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) è:
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++;
}
Ho provato ad adattare il codice utilizzando LockBits ma non ottengo lo stesso risultato.
(A me interessa sapere a che altezza si trova il pixel scuro)
Il codice è:
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);
}
Dove sbaglio?