Problem ze wskaźnikiem i przetwarzaniem bitmap

0

Witam,mam problem z wykorzystaniu wskaźników podczas optymalizacji dostępu do bitmapy.Chciałem napisać programik wyselekcjonowywujący składową R z bitmapy RGB,tzn wyzerować składowe G i B.Mam programik, który realizuje podobna kwestie, tzn robi negatyw,może mi ktoś pomoć go przerobić,bo jest to pewnie kwestia przerobienia wskaźnika w pętli,tam gdzie go pogrubiłem.Dzięki za pomoc.Pisze w srodowisku Visial Studio 2005 w C#.Wklejam kod

bmp_r = new Bitmap(bmp);


Rectangle rect = new Rectangle(0, 0, bmp_r.Width, bmp_r.Height);

BitmapData bmp_rData = bmp_r.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

int stride = bmp_rData.Stride;

IntPtr Scan0 = bmp_rData.Scan0;

unsafe

{

byte* ptr = (byte*)(void*)Scan0;

int nOffset = stride - bmp_r.Width * 3; 

int nWidth = bmp_r.Width * 3;

for (int y = 0; y < bmp_r.Height; ++y)

{

for (int x = 0; x < nWidth; ++x)

{

<b>ptr[0] = (byte)(255 - ptr[0]);</b>

++ptr;

}

ptr += nOffset;

}

bmp_r .UnlockBits(bmp_rData);

} 
0

Żebyś się nie gubił w tych wskaźnikach to polecam http://zabanet.aspweb.cz/grafika
Możesz tam ściągnąć klasę, w której "zapakowane" są funkcje z kodu, który wleiłeś.
Po stworzeniu obiektu tej klasy dostęp do składowej R danego piksela uzyskujesz tak jak do tablicy:

Obrazek img = new Obrazek("bitmapa.jpg");
int skladowaR = img[x, y].R;
</cpp>

Wygodne i szybkie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1