Bitmap 圖片格式並用 C++ 讀寫 Bitmap


轉自 Bitmap 圖片格式並用 C++ 讀寫 Bitmap

1、Bitmap 圖片格式

 

  每部分的具體內容就不展開了。要說的有兩點:

  (1)調色板不是必須的,可有可無,有沒有調色板可以通過位圖文件頭的 bfOffBits 是否等於位圖文件頭加上位圖信息頭的長度來判斷。調色板這個問題也曾經導致我在用 C++ 讀取 BMP 的時候出錯,原因就是並不是每個圖片都沒有調色板的,我讀取的開始位置錯了。

  (2)windows 的 BMP 是從最后一行開始讀的!這個問題曾經導致我在用 C++ 做圖像的旋轉時方向錯誤。

2、C++ 讀取 Bitmap 圖片

 

    #include <stdio.h>  
    #include <stdlib.h>  
    #include <windows.h>  
      
    typedef struct  
    {  
        BYTE b;  
        BYTE g;  
        BYTE r;  
    }RGB;  
      
    void imgOpr(RGB &a,RGB &b)  
    {  
        b.b=a.b;      
        b.g=a.g;  
        b.r=a.r;  
    }  
      
    int main()  
    {  
        BITMAPFILEHEADER fileHeader;  
        BITMAPINFOHEADER infoHeader;  
        FILE* pfin =fopen("D:/1.bmp","rb");  
        FILE* pfout = fopen( "D:/2.bmp" , "wb");  
        //Read the Bitmap file header;  
        fread(&fileHeader,sizeof(BITMAPFILEHEADER),1,pfin);  
        //Read the Bitmap info header;  
        fread(&infoHeader,sizeof(BITMAPINFOHEADER),1,pfin);  
        //為簡化代碼,只處理24位彩色  
        int height,weight;  
        height=0;  
        weight=0;  
        height=infoHeader.biHeight;  
        weight=infoHeader.biWidth;  
        if( infoHeader.biBitCount >= 1)  
        {  
            int size = height * weight;  
            RGB img[height][weight];  
            RGB img2[weight][height];  
            fread( img , sizeof(RGB) , size , pfin );  
              
            //對圖片進行操作   
            int i, j;  
            for (i=0; i<height; i++)   
                for (j=0 ; j < weight ; j++ )  
                {  
                    //將數組 img 賦值給 img2   
                    imgOpr(img[i][j],img2[i][j]);  
                }  
              
            //將修改后的圖片保存到文件   
            fwrite( &fileHeader , sizeof(fileHeader) , 1 , pfout );  
            fwrite( &infoHeader , sizeof(infoHeader) , 1 , pfout );  
            fwrite( img2 , sizeof(RGB) , size , pfout );  
        }  
        fclose(pfin);  
        fclose(pfout);  
      
        return 0;  
    }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM