在CImage类的像素访问
MSDN的代码
COLORREF pixel;
int maxY = imgOriginal.GetHeight(), maxX = imgOriginal.GetWidth();
byte r,g,b,avg;
for (int y=0; y<maxY; y++) {
for (int x=0; x<maxX; x++) {
pixel = imgOriginal.GetPixel(x,y);
r = GetRValue(pixel);
g = GetGValue(pixel);
b = GetBValue(pixel);
avg = (r+ g+ b)/3;
imgOriginal.SetPixelRGB(x,y,avg,avg,avg);
}}
这种方式效率很低, 因为每次调用getpixel,都包含着程序的进栈和出栈。所以,面对大量需要处理的数据,采用直接访问内存地址的方法。
byte* pRealData;
pRealData=(byte*)imgOriginal.GetBits();
int pit=imgOriginal.GetPitch();
int bitCount=imgOriginal.GetBPP()/8;
for (int y=0; y<maxY; y++) {
for (int x=0; x<max