2012-12-26 52 views
1

我想實現一個簡單的基於命令行的圖像編輯器。該程序將提供基於文本的菜單 ,該菜單提供了幾個功能,供用戶操作位圖(.bmp)圖像文件的Windows 。該菜單將包括加載圖像,旋轉圖像,鏡像圖像,保存圖像 和退出選項。加載圖像選項將用於打開並讀取給定的位圖文件中的像素值。該選項還將打印出給定文件的基本屬性,例如尺寸和總大小。旋轉和鏡像選項將操縱先前讀取的像素值。在應用這些選項之前,必須加載圖像 。保存選項會將 內存中的像素值保存爲具有給定文件名的位圖文件。使用位圖文件結構c中的位圖圖像文件操作

你對我推薦的這個項目和位圖文件結構有哪些方法?

如果你給我建議甚至關於一個特定的主題,例如加載文件,那將是非常感謝。

回答

0

libbmp將使您的程序,但不重要實施。

+0

感謝您的建議,一個頭文件。我查看了庫,但沒有讀取位圖文件的功能。 – Ege

+0

@hotaru,顯然有。那是圖書館的全部目的。 –

+0

對不起,我找不到任何這些人http://code.google.com/p/libbmp/issues/detail?id=4 如果你能找到我很高興看到它因爲我非常需要它:D – Ege

0

如果你真的想用C,然後嘗試libbmp庫http://code.google.com/p/libbmp/

不過,我建議你使用C#,那麼任務將是微不足道的與System.Drawing命名空間。

+0

感謝您的幫助,不幸的是我必須用c這個項目 – Ege

0

該函數用於將bmp文件加載到內存。 你必須先申報與BMP結構

BMP* load_BMP(char *filename); 

BMP *bmp;  // local integer for file loaded 
FILE *in;  // pointer for file opening 
int rowsize; 

int row, col, color, i; 
unsigned char b; 

in=fopen(filename,"rb"); // open binary file 
if (in==NULL) 
{ 
    printf("Problem in opening file %s.\n",filename); 
    return NULL; 
} 


bmp=(BMP*) malloc(sizeof(BMP)); //memory allocation 
if (bmp==NULL) 
{ 
    printf("Not enough memory to load the image.\n"); 
    return NULL; 
} 

fread(bmp->BM,2,1,in); 
if (bmp->BM[0]!='B' || bmp->BM[1]!='M') 
{ 
    printf("Bad BMP image file.\n"); 
    free(bmp); 
    return NULL; 
} 

fread(&bmp->fileSize,4,1,in); 
fread(&bmp->Reserved1,2,1,in); 
fread(&bmp->Reserved2,2,1,in); 
fread(&bmp->imageOffset,4,1,in); 
fread(&bmp->imageHeaderSize,4,1,in); 
fread(&bmp->imageWidth,4,1,in); 

rowsize=4*((3*bmp->imageWidth+3)/4); //calculate rowsize because of padding 

fread(&bmp->imageHeight,4,1,in); 
fread(&bmp->colorPlanes,2,1,in); 
fread(&bmp->compressionMethod,4,1,in); 
fread(&bmp->imageSize,4,1,in); 
fread(&bmp->hPPM,4,1,in); 
fread(&bmp->vPPM,4,1,in); 
fread(&bmp->paletteColors,4,1,in); 
fread(&bmp->paletteImportantColors,4,1,in); 


bmp->data=(unsigned char*) malloc(bmp->imageSize); //allocate memory for image data array 
if (bmp->data==NULL) 
{ 
    printf("There is not enough memory to load the image\n"); 
    free(bmp); 
    return NULL; 
} 

for(row=0;row<bmp->imageHeight;row++) //read picture data 
{ 
    for(col=0;col<bmp->imageWidth;col++) 
     for(color=0;color<=2;color++) 
      fread(&bmp->data[row*rowsize+3*col+color], 
      sizeof(unsigned char),1,in); 

    //read extra bytes for end of row padding 
    for(i=0;i<rowsize-3*bmp->imageWidth;i++) 
     fread(&b,1,1,in); 
} 

fclose(in); 
return bmp; 

}

相關問題