使用Cimage.save后内存访问冲突
使用image.create创建位图读取一个BMP图片的数据并进行一定处理后想再用image.save存储,但如果用访问内存的方法修改位图像素就会出现内存访问冲突的错误,用SetPixelRGB,就可以用Save保存图片,但是SetPixelRGB太慢,想问有什么办法通过访问内存修改像素后再用Save保存图片。代码如下:
readImage.Create(infoHeader.biWidth, infoHeader.biHeight, infoHeader.biBitCount, 0);
FILE *fpIn = fopen(strFilePath, "rb");
BYTE *img = new BYTE[giall];
fseek(fpIn, fileHeader.bfOffBits, SEEK_SET);
fread(img, sizeof(BYTE), giall, fpIn);
int r, g, b, avg;
for (int i = 0; i < infoHeader.biWidth; i++)
for (int j = 0; j < infoHeader.biHeight; j++)
{
r = (int)img[3 * (infoHeader.biHeight - 1 - j) * infoHeader.biWidth + 3 * i];
g = (int)img[3 * (infoHeader.biHeight - 1 - j) * infoHeader.biWidth + 3 * i + 1];
b = (int)img[3 * (infoHeader.biHeight - 1 - j) * infoHeader.biWidth + 3 * i + 2];
avg = (r + g + b) / 3;
if (avg > 70)
{
avg = 255;
}
else
{
avg = 0;
}
readImage.SetPixelRGB(i, infoHeader.biHeight - 1 - j, avg, avg, avg);
/**(pRealData + j * pit + i * bpp) = avg;
*(pRealData + j * pit + i * bpp + 1) = avg;
*(pRealData + j * pit + i * bpp + 2) = avg;*/
}
readImage.Save(strFilePath1);
readImage.Destroy();