VC++ SaveBitmapToFile

原创 2012年03月29日 16:19:37
void SaveBitmapToFile( BYTE* pBitmapBits, LONG lWidth, LONG lHeight,WORD wBitsPerPixel, LPCTSTR lpszFileName )
{
    BITMAPINFOHEADER bmpInfoHeader = {0};
BITMAPFILEHEADER bfh = {0};
HANDLE hFile = NULL;
DWORD dwWritten = 0;


    // Set the size
    bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
    // Bit count
    bmpInfoHeader.biBitCount = wBitsPerPixel;
    // Use all colors
    bmpInfoHeader.biClrImportant = 0;
    // Use as many colors according to bits per pixel
    bmpInfoHeader.biClrUsed = 0;
    // Store as un Compressed
    bmpInfoHeader.biCompression = BI_RGB;
    // Set the height in pixels
    bmpInfoHeader.biHeight = -lHeight;
    // Width of the Image in pixels
    bmpInfoHeader.biWidth = lWidth;
    // Default number of planes
    bmpInfoHeader.biPlanes = 1;
    // Calculate the image size in bytes
    bmpInfoHeader.biSizeImage = lWidth* lHeight * (wBitsPerPixel/8); 


    
    // This value should be values of BM letters i.e 0×4D42
    // 0x4D = M 0x42 = B storing in reverse order to match with endian
    bfh.bfType=0x4D42;
    /* or
    bfh.bfType = ‘B’+(’M’ << 8);
    // <<8 used to shift ‘M’ to end
    */
    // Offset to the RGBQUAD
    bfh.bfOffBits = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER);
    // Total size of image including size of headers
    bfh.bfSize = bfh.bfOffBits + bmpInfoHeader.biSizeImage;
    // Create the file in disk to write
    hFile = CreateFile( lpszFileName,GENERIC_WRITE, 0,NULL,
                              CREATE_NEW /*OPEN_ALWAYS*/, FILE_ATTRIBUTE_NORMAL, NULL); 


    if( !hFile ) // return if error opening file
    {
        return;
    } 


    // Write the File header
    WriteFile( hFile, &bfh, sizeof(bfh), &dwWritten , NULL );
    // Write the bitmap info header
    WriteFile( hFile, &bmpInfoHeader, sizeof(bmpInfoHeader), &dwWritten, NULL );
    // Write the RGB Data
    WriteFile( hFile, pBitmapBits, bmpInfoHeader.biSizeImage, &dwWritten, NULL );
    // Close the file handle
    CloseHandle( hFile );

}


android 保存bitmap到SD卡

public void saveMyBitmap(String bitName,Bitmap mBitmap){  File f = new File("/sdcard/" + bitName + "...
  • CBirdLG
  • CBirdLG
  • 2010年09月20日 09:16
  • 31277

将Bitmap保存为文件File的方法

/** * 保存文件 * @param bm * @param fileName * @throws IOException */ ...
  • fxtxz2
  • fxtxz2
  • 2012年10月26日 13:35
  • 29426

JAVA对图片操作

package com.test.grahpic; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Fon...

[LeetCode]--Add Two Numbers

题目     You are given two non-empty linked lists representing two non-negative integers. The dig...

MOOC清华《VC++面向对象与可视化程序设计》第4章:鼠标操作例程(灰白选框)

#include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE h...

MOOC清华《VC++面向对象与可视化程序设计》第4章:键盘操作例程(五个对话框)

#include long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); BOOL InitWindowsClass...

VC++课程设计常见问题解答

作者前两天做完了自己的课程设计,其中遇到了不少问题,估计其他同学也会遇到,所以在此写下一篇博客,希望有问题的同学能到此处速查,方便大家,这样就不需要去百度了,百度上很多人说的不清楚,而且各种答案,根本...

vc++中的import的使用

#import 指令 1. C++中使用 COM 简单的方法是用 #import 导入 type library 2. # import 指令将 COM 产生对应的 C++类别,可以用接近於VBS...

VC++游戏编程----基础动画显示1

一、定时器 Timer定时器对象可以再每隔一段时间发出一个时间消息,程序收到消息后,就可以执行一些操作。比如,可以设置定时器来播放静态的连续图片,就可以产生动画效果。这也是通常显示动画的一种方式。 ...

MFC/VC++中怎样设置位图按钮并且位图不会覆盖文字--------位图按钮

1:第一次尝试 设置    IDC_BUTTON3按钮风格的bitmap为true 在OnInitialDilog中: CButton* cbpTest = NULL;     HIN...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++ SaveBitmapToFile
举报原因:
原因补充:

(最多只允许输入30个字)