Salve a tutti.
Devo scorrere un'immagine fino a trovarne il primo pixel scuro (diciamo che l'immagine è a sfondo bianco e per scuro intendo grigio/nero).
L'implementazione che ho utilizzato sfrutta GetPixel che però ho visto essere molto lento.
Mi sono documentato un po' e ho visto che è molto più veloce utilizzare i puntatori e LockBits.
Il codice iniziale (quello con GetPixel) è:
Ho provato ad adattare il codice utilizzando LockBits ma non ottengo lo stesso risultato.codice:int x = 0; int y = 0; bool trovatoNero = false; //cutVersion è un oggetto di tipo Bitmap while (y < cutVersion.Height && trovatoNero == false) { x = 0; c = cutVersion.GetPixel(x, y); while (x < cutVersion.Width && trovatoNero == false) { if (c.R <= 100 || c.G <= 100 || c.B <= 100) { trovatoNero = true; } x++; } y++; }
(A me interessa sapere a che altezza si trova il pixel scuro)
Il codice è:
Dove sbaglio?codice:BitmapData bmpData = cutVersion.LockBits(new Rectangle(0, 0, cutVersion.Width, cutVersion.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); System.IntPtr bmpScan0 = bmpData.Scan0; unsafe { byte* bmpPtr = (byte*)(void*)bmpScan0; while (y < cutVersion.Height && trovatoNero == false) { x = 0; while (x < cutVersion.Width && trovatoNero == false) { byte pixelXY = *(bmpPtr++); if(pixelXY<=100) { trovatoNero = true; } x++; } y++; } cutVersion.UnlockBits(bmpData); }![]()

Rispondi quotando