Witam.
Zależy mi na wykadrowaniu z jednej bitmapy danego jej wycinka o danych współrzędnych i wklejeniu jej do drugiej bitmapy o wymiarach tego wykadrowanego materiału. Chciałbym wykonać to przy uzyciu wskaźników, poniważ dostęp bezpośredni poprzez GetPixel, SetPixel jest za wolny. Udaje mi sie pobrać barwę danego piskela z bitmapy bmp,bądź ja zmodyfikować, ale nie wiem jak ją potem zapisać do bitmapy docelowej bmp2. Bitmapa bmp jest juz wczesniej zadeklarowana i zainicjowana. Proszę o pomoc lub ewentualną drobną modyfikację kodu. Pozdrawiam
const int PixelSize = 3;
Point point_poczatek = new Point(30, 30);
Size rozm = new Size();
rozm.Width = 30;
rozm.Height = 30;
bmp2 = new Bitmap(30,30); //Tworzenie drugiej bitmapy o wymiarze kadru
Rectangle bitmapBounds = new Rectangle(point_poczatek, rozm);
Rectangle bitmapBounds2 = new Rectangle(Point.Empty, bmp2.Size); //?
BitmapData bitmapData = bmp.LockBits(bitmapBounds, ImageLockMode.ReadWrite, bmp.PixelFormat);
BitmapData bitmapData2 = bmp2.LockBits(bitmapBounds2, ImageLockMode.ReadWrite, bmp2.PixelFormat); //?
unsafe
{
for (int y = 0; y < bitmapData.Height; y++)
{
byte* row = (byte*)bitmapData.Scan0.ToPointer() + (y * bitmapData.Stride);
byte* row2 = (byte*)bitmapData.Scan0.ToPointer() + (y * bitmapData.Stride + 1);
byte* row3 = (byte*)bitmapData.Scan0.ToPointer() + (y * bitmapData.Stride) + 2;
byte* row_ = (byte*)bitmapData2.Scan0.ToPointer() + (y * bitmapData2.Stride); //?
byte* row2_ = (byte*)bitmapData2.Scan0.ToPointer() + (y * bitmapData2.Stride + 1); //?
byte* row3_ = (byte*)bitmapData2.Scan0.ToPointer() + (y * bitmapData2.Stride) + 2; //?
for (int x = 0; x < bitmapData.Width; x++)
{
byte niebieski= row[x *PixelSize];
byte zielony =row2[x * PixelSize];
byte czerwony=row3[x * PixelSize];
row_[x * PixelSize] = niebieski; //Tu prawdopodobnie podstawianie jest błędne
row2_[x * PixelSize] = zielony; //Tu prawdopodobnie podstawianie jest błędne
row3_[x * PixelSize] = czerwony; //Tu prawdopodobnie podstawianie jest błędne
}
}
}
bmp.UnlockBits(bitmapData);
bmp2.UnlockBits(bitmapData2);