撰寫了函式用來將圖片存盤為bmp格式
代買如下:
void WriteRGBBMPFile(char* filename, BYTE* imageRed[2000], BYTE* imageGreen[2000], BYTE* imageBlue[2000], int w1, int w2, int h1, int h2)//將影像的某一部分輸出為RGB BMP格式的影像檔案
{
FILE* fp = fopen(filename, "wb");
if (fp == NULL)
{
printf("open %s unsuccessfully", filename);
return;
}
int width = max(w1, w2) - min(w1, w2) + 1;
int height = max(h1, h2) - min(h1, h2) + 1;
int wh = width * 3;
if (wh % 4 != 0)
wh += wh % 4;
BITMAPFILEHEADER fh;
fh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPFILEHEADER);
fh.bfReserved1 = fh.bfReserved2 = 0;
fh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + height * wh;
fh.bfType = 0x4D42;
fwrite(&fh, 1, sizeof(BITMAPFILEHEADER), fp);
BITMAPINFOHEADER fin;
fin.biBitCount = 24;
fin.biClrImportant = 0;
fin.biClrUsed = 0;
fin.biCompression = 0;
fin.biHeight = height;
fin.biPlanes = 1;
fin.biSize = 40;
fin.biSizeImage = height * wh;
fin.biWidth = width;
fin.biXPelsPerMeter = 0;
fin.biYPelsPerMeter = 0;
fwrite(&fin, 1, sizeof(BITMAPINFOHEADER), fp);
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
fwrite(imageBlue[h2 - i] + j + w1, 1, 1, fp);
fwrite(imageGreen[h2 - i] + j + w1, 1, 1, fp);
fwrite(imageRed[h2 - i] + j + w1, 1, 1, fp);
}
if ((width * 3) % 4 != 0)
{
BYTE xtt = 0;
for (int jj = 0; jj < 4 - (width * 3) % 4; jj++)
fwrite(&xtt, 1, 1, fp);
}
}
}
改代碼執行結果可以正常輸出bmp圖片,在畫圖中可以完美打開,如圖

但是當用PS打開該圖片是就會出現如下情況

然后我在用畫圖軟體將圖片另存為bmp,PS就可以完美打開,
使用了二進制編輯器查看檔案,發現兩檔案在bmp檔案頭稍有不同,但是使用代碼生成的原檔案一定是沒問題的,所以說畫圖軟體在另存為的時候會把圖片更改,請問這是什么原理,能否用PS完美打開代碼生成的源檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100314.html
標籤:C語言
上一篇:面向物件的理解
下一篇:VScode配置c++環境
