2011-04-27 61 views
0

我應該讀取.bmp文件,然後根據命令行參數進行更改。C,BMP處理...不知道:/

實例:
-fromrow x,其中x指定最底部行處理
-torow x,其中x指定了最頂行以處理
-fromcol x,其中x指定最左邊的列處理
-tocol x,其中x指定最右邊的列以處理
-op x,其中x是以下之一
-1 =圖像的閾值(127以上的指定範圍中的任何像素值被改變爲t0 255,並且像素值127或更小改變爲0)
-2 =負(任何像素v ALUE p在規定的範圍內變更爲255-P)

我一直在考慮這個代碼的讀取.bmp文件時許例如:

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    FILE *fp= fopen("sample.bmp", "r+"); 
    if (fp == NULL){ 
      printf("Error"); 
    } 

    int temp=0; 

    //Go to Byte 22 
    fseek(fp,22,SEEK_SET); 
    //Read byte 22 into an integer variable 
    fread(&temp, sizeof(int), 1, fp); 
    printf("Number of Rows: %d\n", temp); 

    fseek(fp,18,SEEK_SET); 
    fread(&temp, sizeof(int), 1, fp); 
    printf("Number of Columns: %d\n", temp); 

    fseek(fp,10,SEEK_SET); 
    fread(&temp, sizeof(int), 1, fp); 
    printf("Start of Pixels: %d\n", temp); 

    fclose (fp); 
} 

什麼是「像素的開始」?我想我以某種方式通過圖像的字節循環並將它們複製到二維數組中...但我不知道訪問文件字節的suntax?

我甚至不知道從哪裏開始改變圖像...:/我很茫然。 任何幫助/建議/ linfo /鏈接將不勝感激。

預先感謝您。

+0

可能的死亡http://stackoverflow.com/questions/5751749/how-can-i-read-bmp-pixel-values-into-an-array? – 2011-04-27 22:36:07

回答

1

您需要先閱讀BITMAPFILEHEADER,然後BITMAPINFO(其中包含BITMAPINFOHEADER)。這些將爲您提供查找和解釋像素所需的信息。

+0

好的,所以我知道'BITMAPFILEHEADER'包含有關BMP文件本身(高度,寬度)的信息,但是如何讀取其內容?示例代碼使用'fseek(fp,22,SEEK_SET);'但他們是怎麼得到的?字節'22'從哪裏來?我找不到任何關於讀入BMP文件然後操作的信息。只創建一個。 – beowulf3 2011-04-27 22:17:46

+0

假設你在Windows上執行此操作,通常只需定義一個BITMAPFILEHEADER結構,然後使用fread從文件的開頭讀入該結構。 – 2011-04-27 22:48:37