使用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();
...全文
156 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,645

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧