zablokowałem bitmapę i teraz nie wiem jak rysować. Poda ktoś przykładowy kod?
</img>
Co jak co, ale człowiek tak opornie broniący się przed korzystaniem z wyszukiwarki programistą zostać nie może.
unsafe
{
byte* ptrData = (byte*)bmpData.Scan0;
int offsetData = bmpData.Stride - bmpData.Width * 3;
for (int y = 0; y < bmp.Height; y++)
for (int x = 0; x < bmp.Width; x++)
{
//co dalej?
}
}
Powinieneś przesuwać się bajtami po ptrData i interpretować je zgodnie z formatem, który wybrałeś przy lockbits, a nie pikselami. Ta zmienna offsetData też jest dziwna, bo najprawdopodobniej będzie wynosić zero (stride to długość w bajtach jednego wiersza - scanline).
unsafe
{
byte* ptrData = (byte*)bmpData.Scan0;
int offsetData = bmpData.Stride - bmpData.Width * 3;
for (int y = 0; y < bmp.Height; y++)
for (int x = 0; x < bmp.Width; x++)
{
*(ptrData + (y * bmpData.Stride) + (x * 3))=122;
}
}
W takim podejściu offset jest niepotrzebny. Czy dobrze rozumiem?
Tak.
Dlaczego kod:
unsafe
{
byte* ptrData = (byte*)bmpData.Scan0;
int offsetData = bmpData.Stride - bmpData.Width * 3;
for (int y = 0; y < bmp.Height; y++)
for (int x = 0; x < bmp.Width; x+=3)
{
//wskaźnik na pierwszy piksel
*(ptrData + (y * bmpData.Stride) + (x * 3))=Color.DarkGray.B;
*(ptrData + (y * bmpData.Stride) + ((x+1) * 3)) = Color.DarkGray.G;
*(ptrData + (y * bmpData.Stride) + ((x+2) * 3)) = Color.DarkGray.R;
}
}
nie wyświetla mi koloru szarego?
Nie powinno tam być:
*(ptrData + (y * bmpData.Stride) + (x * 3))=Color.DarkGray.B;
*(ptrData + (y * bmpData.Stride) + ((x * 3)+1) = Color.DarkGray.G;
*(ptrData + (y * bmpData.Stride) + ((x * 3)+2) = Color.DarkGray.R;
Ale po co ta cała arytmetyka (z jej powodu popełniłeś pomyłkę!). Wystarczy przesuwać sobie wskaźnik o jeden bajt/linię, coś na ten kształt:
byte* scanLine = (byte*)bmpData.Scan0;
for (int y = 0; y < bmp.Height; y++)
{
byte* ptr = scanLine;
for (int x = 0; x < bmp.Width; x++)
{
*ptr++ = Color.DarkGray.B;
*ptr++ = Color.DarkGray.G;
*ptr++ = Color.DarkGray.R;
}
scanLine += bmpData.Stride;
}
Dodatkowo Stride
może być ujemne - wtedy kolejność wierszy jest odwrócona. Trzeba to wziąć pod uwagę.