簡體   English   中英

使用 libjpeg/C++ 的文件中的 JPEG 編碼位圖 (BMP) 圖像

[英]JPEG encoding bitmap (BMP) image from file using libjpeg / C++

我們正在使用 IJG 的 libjpeg 庫的 8d 版從 24 位 Windows 位圖 (.bmp) 文件創建 JPEG 圖像。

IJG 的 example.c 中的 write_JPEG_file() 函數無需任何修改即可使用,如下所示: http : //code.google.com/p/sumatrapdf/source/browse/trunk/ext/libjpeg-turbo/example.c? r=2397

執行的步驟順序如下:

BITMAPFILEHEADER bfh;
BITMAPINFO bi; 
BITMAPINFOHEADER *bih;
FILE *input;
int image_height;
int image_width;

fopen_s( &input, "image.bmp", "rb" ); // Open existing file

// Read bitmap file header
fread_s( &bfh, sizeof(BITMAPFILEHEADER), 1, sizeof(BITMAPFILEHEADER), input );

// Read bitmap info header
fread_s( &bi, sizeof(BITMAPINFO), 1, sizeof(BITMAPINFO), input );

bih = &bi.bmiHeader;
image_height = bih->biHeight;
image_width = bih->biWidth;
int data_size = image_width * image_height * 3; // Compute image data size

// Allocate image buffer; this is the buffer write_JPEG_file() will use
JSAMPLE * image_buffer = (JSAMPLE *)malloc( data_size );

// Read image pixel data from file
fread_s( image_buffer, data_size, 1, data_size, input );

fclose( input );

write_JPEG_file( "image.jpg", 100 /* quality */ );

雖然一切正常,沒有任何錯誤,但生成的 JPEG 圖像與原始位圖圖像的顏色不同,例如,紅色和藍色交換,黃色和青色相同......

我們嘗試使用 fseek() 將輸入文件光標設置為 bfh.bfOffBits,但顏色仍然關閉。

是否需要任何額外的步驟來確保 JPEG 編碼正確完成?

BMP 文件使用 BGR 順序的像素顏色進行編碼,JPEG 庫需要 RGB 順序。 您必須從每組 3 個字節中反轉紅色和藍色字節。

BMP 文件也用文件頂部的底線組織,您也需要反轉它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM