bmp編輯c語言,bmp文件大小C語言

本文目錄一覽:

C語言編寫程序顯示bmp文件

BOOL BitBlt(

  HDC hdcDest, // 位圖顯示目標設備環境中

  int nXDest,  // 位圖顯示在客戶區的x坐標

  int nYDest,  // 位圖顯示在客戶區的y坐標

  int nWidth,  // 位圖顯示的寬度

  int nHeight, // 位圖顯示的長度

  HDC hdcSrc,  // 源設備環境(包含需要顯示的bmp位圖)

  int nXSrc,   // 在當前位圖中顯示的開始x位置

  int nYSrc,   // 在當前位圖中顯示的開始y位置

  DWORD dwRop  // 映射模式

);

//顯示bmp位圖

#includewindows.h

#include”resource.h”

 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void DrawBrick(); 

 

int WINAPI WinMain(HINSTANCE hInstance,

                   HINSTANCE hPrevInstance,

                   PSTR szCmdLine,

                   int iCmdShow)

{

    static  TCHAR   szAppName[] = TEXT(“Bmp”);

    HWND            hwnd;

    MSG             msg;

    WNDCLASS        wndclass;

     

    wndclass.style          = CS_HREDRAW | CS_VREDRAW;

    wndclass.lpfnWndProc    = WndProc;

    wndclass.cbClsExtra     = 0;

    wndclass.cbWndExtra     = 0;

    wndclass.hInstance      = hInstance;

    wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);

    wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);

    wndclass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);

    wndclass.lpszMenuName   = NULL;

    wndclass.lpszClassName  = szAppName;

     

    if(!RegisterClass(wndclass))

    {

        MessageBox(NULL, TEXT(“This program requires Windows NT!”),

            szAppName, MB_ICONERROR);

        return 0;

    }

     

    hwnd = CreateWindow(szAppName,

                        TEXT(“Bmp Demo”),

                        WS_OVERLAPPEDWINDOW,

                        CW_USEDEFAULT,

                        CW_USEDEFAULT,

                        754,

                        566,

                        NULL,

                        NULL,

                        hInstance,

                        NULL);

     

    ShowWindow(hwnd, iCmdShow);

    UpdateWindow(hwnd);

     

    while(GetMessage(msg, NULL, 0, 0))

    {

        TranslateMessage(msg);

        DispatchMessage(msg);

    }

     

    return msg.wParam;

}

 

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

    static  HBITMAP hBitmap;            //位圖句柄  標示位圖

    static int     cxBitmap, cyBitmap;    //位圖的長寬

    BITMAP          bitmap;

    HDC             hdc, hdcMem;

    HINSTANCE       hInstance;

    PAINTSTRUCT     ps;

     

    switch(message)

    {

    case WM_CREATE:

        hInstance = ((LPCREATESTRUCT)lParam)-hInstance;               //獲取窗口的實例句柄

         

        hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));   //將位圖加載到內存中

         

        GetObject(hBitmap, sizeof(BITMAP), bitmap);

         

        cxBitmap = bitmap.bmWidth;//獲取位圖的長

        cyBitmap = bitmap.bmHeight;//獲取位圖的寬

 

        return 0 ;

         

    case WM_PAINT:

        hdc = BeginPaint(hwnd, ps);

         

        hdcMem = CreateCompatibleDC(hdc);//創建一個兼容於hdc設備環境描述表的hdcMem  主要是用於在內存中截圖

        SelectObject(hdcMem, hBitmap);   //將位圖選到hdcMem中

 

        BitBlt(hdc, -1, -1, cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);//繪製bmp位圖

 

        DeleteDC(hdcMem);

        EndPaint(hwnd, ps);

 

        return 0;

 

    case WM_DESTROY:

        DeleteObject(hBitmap);

        PostQuitMessage(0);

 

        return 0;

    }

     

    return DefWindowProc(hwnd, message, wParam, lParam);

}

最好在VC中編譯

如何用C語言編程來顯示一個bmp文件

直接上代碼吧:

#include Windows.h

#include stdio.h

#include string.h

#include malloc.h

unsigned char *pBmpBuf;//讀入圖像數據的指針

int bmpWidth;//圖像的寬

int bmpHeight;//圖像的高

RGBQUAD *pColorTable;//顏色表指針

int biBitCount;//圖像類型,每像素位數

bool readBmp(char *bmpName)

{

//二進制讀方式打開指定的圖像文件

FILE *fp=fopen(bmpName,”rb”);

if(fp==0) return 0;

//跳過位圖文件頭結構BITMAPFILEHEADER

fseek(fp, sizeof(BITMAPFILEHEADER),0);

//定義位圖信息頭結構變量,讀取位圖信息頭進內存,存放在變量head中

BITMAPINFOHEADER head;

fread(head, sizeof(BITMAPINFOHEADER), 1,fp);

//獲取圖像寬、高、每像素所佔位數等信息

bmpWidth = head.biWidth;

bmpHeight = head.biHeight;

biBitCount = head.biBitCount;

//定義變量,計算圖像每行像素所佔的字節數(必須是4的倍數)

int lineByte=(bmpWidth * biBitCount/8+3)/4*4;

//灰度圖像有顏色表,且顏色表表項為256

if(biBitCount==8){

//申請顏色表所需要的空間,讀顏色表進內存

pColorTable=new RGBQUAD[256];

fread(pColorTable,sizeof(RGBQUAD),256,fp);

}

//申請位圖數據所需要的空間,讀位圖數據進內存

pBmpBuf=new unsigned char[lineByte * bmpHeight];

fread(pBmpBuf,1,lineByte * bmpHeight,fp);

//關閉文件

fclose(fp);

return 1;

}

bool saveBmp(char *bmpName, unsigned char *imgBuf, int width, int height,

int biBitCount, RGBQUAD *pColorTable)

{

//如果位圖數據指針為0,則沒有數據傳入,函數返回

if(!imgBuf)

return 0;

//顏色表大小,以字節為單位,灰度圖像顏色表為1024字節,彩色圖像顏色表大小為0

int colorTablesize=0;

if(biBitCount==8)

colorTablesize=1024;

//待存儲圖像數據每行字節數為4的倍數

int lineByte=(width * biBitCount/8+3)/4*4;

//以二進制寫的方式打開文件

FILE *fp=fopen(bmpName,”wb”);

if(fp==0) return 0;

//申請位圖文件頭結構變量,填寫文件頭信息

BITMAPFILEHEADER fileHead;

fileHead.bfType = 0x4D42;//bmp類型

//bfSize是圖像文件4個組成部分之和

fileHead.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)

+ colorTablesize + lineByte*height;

fileHead.bfReserved1 = 0;

fileHead.bfReserved2 = 0;

//bfOffBits是圖像文件前3個部分所需空間之和

fileHead.bfOffBits=54+colorTablesize;

//寫文件頭進文件

fwrite(fileHead, sizeof(BITMAPFILEHEADER),1, fp);

//申請位圖信息頭結構變量,填寫信息頭信息

BITMAPINFOHEADER head;

head.biBitCount=biBitCount;

head.biClrImportant=0;

head.biClrUsed=0;

head.biCompression=0;

head.biHeight=height;

head.biPlanes=1;

head.biSize=40;

head.biSizeImage=lineByte*height;

head.biWidth=width;

head.biXPelsPerMeter=0;

head.biYPelsPerMeter=0;

//寫位圖信息頭進內存

fwrite(head, sizeof(BITMAPINFOHEADER),1, fp);

//如果灰度圖像,有顏色表,寫入文件

if(biBitCount==8)

fwrite(pColorTable, sizeof(RGBQUAD),256, fp);

//寫位圖數據進文件

fwrite(imgBuf, height*lineByte, 1, fp);

//關閉文件

fclose(fp);

return 1;

}

int main()

{

char inFileName[90],outFileName[90];

printf(“請輸入原始位圖文件的文件名:”);

scanf(“%s”,inFileName);

printf(“請輸入加密程序產生的新位圖文件的文件名:”);

scanf(“%s”,outFileName);

//讀入指定BMP文件進內存

readBmp(inFileName);

//輸出圖像的信息

printf(“width=%d,height=%d, biBitCount=%d\n”,bmpWidth,bmpHeight, biBitCount);

//將圖像數據存盤

saveBmp(outFileName, pBmpBuf, bmpWidth, bmpHeight, biBitCount, pColorTable);

//清除緩衝區,pBmpBuf和pColorTable是全局變量,在文件讀入時申請的空間

delete []pBmpBuf;

if(biBitCount==8)

delete []pColorTable;

return 0;

}

如何用C語言在已有的bmp圖片上添加文字生成新的圖片?

用C語言在已有的bmp圖片上添加文字生成新的圖片方法是:

1、首先要了解位圖文件的結構和熟悉C語言的畫圖函數等基層知識,這些知識可以在網上找到自學;

2、BMP(全稱Bitmap)是Windows操作系統中的標準圖像文件格式,可以分成兩類:設備相關位圖(DDB)和設備無關位圖(DIB),它採用位映射存儲格式,除了圖像深度可選以外,不採用其他任何壓縮,因此,BMP文件所佔用的空間很大,BMP文件存儲數據時,圖像的掃描方式是按從左到右、從下到上的順序,由於BMP文件格式是Windows環境中交換與圖有關的數據的一種標準,因此在Windows環境中運行的圖形圖像軟件都支持BMP圖像格式,圖像中每個像素的顏色值都保存在BMP文件中。

3、C語言是一種計算機程序設計語言,它既有高級語言的特點,又具有彙編語言的特點,它可以作為系統設計語言,編寫工作系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序,因此,它的應用範圍廣泛,

用C語言顯示BMP圖片,最直接的方法就是先將每個像素的顏色值提取出來,再用C語言的畫圖函數畫。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/258159.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:48
下一篇 2024-12-15 12:48

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論