使用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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232772.html
標籤:C++ 語言
上一篇:如何將資料寫入 zebra 生產的 RFID 標簽?
下一篇:Qt槽函式接收不到信號
