Witam.
Mógłby mi ktoś doradzić jak zamienić bitmapę, która jest w odcieniach szarości na wektor, który będzie posiadał wartości z zakresu od 0 (biały) do 1 (czarny)?
Pozdrawiam.
Witam.
Mógłby mi ktoś doradzić jak zamienić bitmapę, która jest w odcieniach szarości na wektor, który będzie posiadał wartości z zakresu od 0 (biały) do 1 (czarny)?
Pozdrawiam.
Jakoś tak...
Bitmap bmp = (Bitmap)Image.FromFile("plik.png");
float[,] data = new float[bmp.Height, bmp.Width];
BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
byte* scanline = (byte*)bd.Scan0;
for (int i = 0; i < bd.Height; i++)
{
for (int j = 0; j < bd.Width; j++)
data[i, j] = (float)(255 - scanline[j*3]) / 255.0f;
scanline = scanline + bd.Stride;
}
bmp.UnlockBits(bd);
bmp.Dispose();
Zakładam że bitmapa jest 24-bitowa, z czego pobieram tylko jeden kanał (przy odcieniach szarości R==G==B).
Nie wiem dlaczego, ale u mnie ma problem z zadeklarowaniem tablicy floatów. Mimo, że tablica ma 64 pola to indeksy ma tylko pierwsze 14.
Co skopałem?
Wyświetl ją sobie, bo może to debuger tylko tak wyświetla.