2014-04-03 147 views
1

我最近發現BMP圖像可以具有負高度,這意味着像素在文件中從頂部到底部存儲。我們的產品代碼拒絕了來自用戶的文件,因爲它將高度解釋爲4294966272(無符號32位值),而它實際上是-1024(有符號32位值),實際上意味着1024像素的高度。我設法找到的BITMAPINFOHEADER格式的最「官方」文檔是Wikipedia,它說寬度也是signed integer。如何正確驗證BMP輸入?BITMAPINFOHEADER BMP中的寬度字段可以爲負值嗎?

回答

0

由於BMP格式has been used in Windows since version 2.0我會使用MSDN作爲最「官方」文檔。在MSDN我們發現以下definition of BITMAPINFOHEADER

typedef struct tagBITMAPINFOHEADER { 
    DWORD biSize; 
    LONG biWidth; 
    LONG biHeight; 
    WORD biPlanes; 
    WORD biBitCount; 
    DWORD biCompression; 
    DWORD biSizeImage; 
    LONG biXPelsPerMeter; 
    LONG biYPelsPerMeter; 
    DWORD biClrUsed; 
    DWORD biClrImportant; 
} BITMAPINFOHEADER, *PBITMAPINFOHEADER; 

正如你所看到的,biHeight定義爲長,通常是一樣的符號int。如果你的代碼沒有正確讀取這個值,我會說在那裏有一個錯誤。

相關問題