使用Cimage.save后内存访问冲突

qiufeng3831442 2020-12-10 06:15:16
使用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();
...全文
69 点赞 收藏 回复
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发动态
发帖子
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
社区公告
暂无公告