Quote:
Originally Posted by snow911
Du hast hier halt ne Laufzeit von O(height * width), was recht langsam ist.
Was du evtl. versuchen könntest, wäre das aufsplitten des Bildes und dann z.B. erst die linke Hälfte abzusuchen. Wenn da nichts dabei ist, suchst du die obere Hälfte der rechten Hälfte ab, wenn da nichts dabei ist, die linke Hälfte der unteren Hälfte der rechten Seite, wenn da nichts dabei ist die linke Hälfte der rechten Hälfte der unteren Hälfte der rechten Seite usw. :D
Irgendwas in die Richtung müsstest du machen, dass deine Laufzeit eher in Richtung logarithmisch geht.
|
auch mit der methode wird die laufzeit nicht logaritmisch werden.
@te:
naja zum einen rufst du Color.FromArgb(A, R, G, B) innerhelb der schleife auf, besser währe es ausserhalb damit es nur einmal aufgerufen wird.
zum zweiten ist bmp.GetPixel auch nicht wirklich schnell, in C# würde man unsafe benutzen, in VB geht das nicht. ist es wohl das beste das ganze mit Marshall.Copy in ein array zu kopieren. In dem zusammenhalb benutzt du auch die methode von tolio.
naja die erste und letzte iele bruchst du nicht. du bauchst nur
Code:
' Create a new bitmap.
Dim bmp As New Bitmap("c:\fakePhoto.jpg")
' Lock the bitmap's bits.
Dim rect As New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim bmpData As System.Drawing.Imaging.BitmapData = bmp.LockBits(rect, _
Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)
' Get the address of the first line.
Dim ptr As IntPtr = bmpData.Scan0
' Declare an array to hold the bytes of the bitmap.
' This code is specific to a bitmap with 24 bits per pixels.
Dim bytes As Integer = Math.Abs(bmpData.Stride) * bmp.Height
Dim rgbValues(bytes - 1) As Byte
' Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)
' Set every third value to 255. A 24bpp image will look red.
For counter As Integer = 2 To rgbValues.Length - 1 Step 3
rgbValues(counter) = 255
Next
' Unlock the bits.
bmp.UnlockBits(bmpData)
rgbValues ist der inhalt des bildes als byte array, dh es hat die grösse 3*höhe*breite (3 da jedes pixel aus 3 bytes (rgb) besteht).
und anstatt jetzt jedes dritte pixel auf 255 zu setzten, überprufst du eben in der schleife ob es die gewünschte farbe ist.