//VC下把HBITMAP保存为bmp图片
 BOOL  CtestBitMapDlg::SaveBmp(HBITMAP  hBitmap,   CString  FileName)
 {
     HDC     hDC;
     //当前分辨率下每象素所占字节数
     int     iBits;
     //位图中每象素所占字节数
     WORD     wBitCount;
     //定义调色板大小,     位图中像素字节大小     ,位图文件大小     ,     写入文件字节数
     DWORD     dwPaletteSize=,   dwBmBitsSize=,   dwDIBSize=,   dwWritten=;
     //位图属性结构
     BITMAP     Bitmap;
     //位图文件头结构
     BITMAPFILEHEADER     bmfHdr;
     //位图信息头结构
     BITMAPINFOHEADER     bi;
     //指向位图信息头结构
     LPBITMAPINFOHEADER     lpbi;
     //定义文件,分配内存句柄,调色板句柄
     HANDLE     fh,   hDib,   hPal,hOldPal=NULL;   

      *  *  / ;

     //计算位图文件每个像素所占字节数
     hDC  = CreateDC("DISPLAY",   NULL,   NULL,   NULL);
     iBits  = GetDeviceCaps(hDC,   BITSPIXEL)     *     GetDeviceCaps(hDC,   PLANES);
     DeleteDC(hDC);
     )
         wBitCount = ;
     )
         wBitCount  = ;
     )
         wBitCount  = ;
     else
         wBitCount  = ;             

     GetObject(hBitmap,   sizeof(Bitmap),   (LPSTR)&Bitmap);
     bi.biSize= sizeof(BITMAPINFOHEADER);
     bi.biWidth = Bitmap.bmWidth;
     bi.biHeight =  Bitmap.bmHeight;
     bi.biPlanes =  ;
     bi.biBitCount = wBitCount;
     bi.biCompression= BI_RGB;
     bi.biSizeImage = Bitmap.bmWidth * Bitmap.bmHeight * ;
     bi.biXPelsPerMeter = ;
     bi.biYPelsPerMeter = ;
     bi.biClrImportant = ;
     bi.biClrUsed =  ;         

     dwBmBitsSize  = ((Bitmap.bmWidth *wBitCount+) / )** Bitmap.bmHeight;         

     //为位图内容分配内存
     hDib  = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
     lpbi  = (LPBITMAPINFOHEADER)GlobalLock(hDib);
     *lpbi  = bi;             

     //     处理调色板
     hPal  = GetStockObject(DEFAULT_PALETTE);
     if (hPal)
     {
         hDC  = ::GetDC(NULL);
         hOldPal = ::SelectPalette(hDC,(HPALETTE)hPal, FALSE);
         RealizePalette(hDC);
     }         

     //     获取该调色板下新的像素值
     GetDIBits(hDC,hBitmap, ,(UINT)Bitmap.bmHeight,
         (LPSTR)lpbi+ sizeof(BITMAPINFOHEADER)+dwPaletteSize,
         (BITMAPINFO *)lpbi, DIB_RGB_COLORS);             

     //恢复调色板
     if (hOldPal)
     {
         ::SelectPalette(hDC,   (HPALETTE)hOldPal,   TRUE);
         RealizePalette(hDC);
         ::ReleaseDC(NULL,   hDC);
     }             

     //创建位图文件
     fh  = CreateFile(FileName,   GENERIC_WRITE,,   NULL,   CREATE_ALWAYS,
         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,   NULL);             

     if (fh     ==  INVALID_HANDLE_VALUE)         return     FALSE;             

     //     设置位图文件头
     bmfHdr.bfType  = 0x4D42;     //     "BM"
     dwDIBSize  = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize;
     bmfHdr.bfSize  = dwDIBSize;
     bmfHdr.bfReserved1  = ;
     bmfHdr.bfReserved2  = ;
     bmfHdr.bfOffBits  = (DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwPaletteSize;
     //     写入位图文件头
     WriteFile(fh,   (LPSTR)&bmfHdr,   sizeof(BITMAPFILEHEADER),   &dwWritten,   NULL);
     //     写入位图文件其余内容
     WriteFile(fh,   (LPSTR)lpbi,   dwDIBSize - ,   &dwWritten,   NULL);
     //清除
     GlobalUnlock(hDib);
     GlobalFree(hDib);
     CloseHandle(fh);             

     return     TRUE;
 }  

把HBITMAP 保存图片文件.的更多相关文章

  1. C#中saveFileDialog(另存为)保存图片文件

    弹出另存为提示框保存图片文件: //用户自由选择指定路径保存文件            SaveFileDialog savedialog = new SaveFileDialog();        ...

  2. Django 批量保存图片文件 自定义上传方法

    1.前端通过formData的方式批量增加图片或文件 for (var i = 0; i < form_img_list.length; i++) { formData.append('imag ...

  3. ASP + ACCESS保存图片文件之实现

    con.execute "CREATE tblImg (lngId COUNTER PRIMARY KEY, binImg IMAGE)" set ads=createobject ...

  4. mui开发app之js将base64转图片文件

    之前我已经做过一个利用cropper裁剪并且制作头像的功能.如何在mui app中实现相册或相机获取图片后裁剪做头像请看另一篇博客:mui开发app之cropper裁剪后上传头像的实现 但是当时裁剪后 ...

  5. okhttp请求文件异常解决方法

    微信借口中获取素材的接口返回只是一个缓存的文件流 InputStream, 接口中请求永久图片素材返回的是 InputStream; 接口项目获取到 InputStream 可以直接通过文件流写到文件 ...

  6. Windows DIB文件操作具体解释-4.使用DIB Section

    前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB.可是这又遇到一个问题.假设我想操作DIB的数据的话,显然是不能使用DDB:一是由于DIB转DDB时发生了颜色转换.再就是DDB无法直接 ...

  7. js批量上传文件

    html代码: <input type="file" id='upload' name="upload" multiple="multiple& ...

  8. vue中assets文件夹与static文件夹的区别

    1.如果这些产品图片文件“万年不变”,放在 /static 目录里,(不需要使用require将这些图片作为模块来引用) var products = [{ img: '/static/img/pro ...

  9. WPF中使用BitmapImage处理图片文件(转)

    (1)图片从文件导入 BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new Uri(filen ...

随机推荐

  1. 高端大气上档次的fullPage.js

    简介 4月15日,网易邮箱升级到6.0版本,并发布了介绍页面,页面采用了时下非常流行的"全屏"效果,文字.图片再加上 CSS3 动画,让用户非常直观.清晰的了解6.0版本的功能及特 ...

  2. position&amp;containing block

    一.包含块(Containing Block) 要讲position,首先就涉及到一个概念:包含块. 1.包含块介绍 包含块简单理解就是一个定位参考块,就是"大盒子里套小盒子"中那 ...

  3. 多线程编程4 - NSOperationQueue

    一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...

  4. c# 遍历子控件,比如Form下的group,或者panel

    方法很好用.目的是遍历所有容器的子控件... 方法1private void GetControl(Control.ControlCollection ctc, ref int checkNull) ...

  5. c#快捷键大全

    转发:http://zhidao.baidu.com/question/444655283 直接贴出来吧(关于VS的): 快捷键 功能 CTRL + SHIFT + B生成解决方案 CTRL + F7 ...

  6. 在 IIS 中配置 ASP.NET 应用程序

     注意事项: 1.注册.NET 如果先安装.net平台,后安装IIS,那么在IIS中可能就没有出现ASP.NET版本的下拉菜单,就要手动注册: 一般.Net版本都存放在:C:\WINDOWS\Micr ...

  7. java文件读写操作

    Java IO系统里读写文件使用Reader和Writer两个抽象类,Reader中read()和close()方法都是抽象方法.Writer中 write(),flush()和close()方法为抽 ...

  8. 使用IDENTITY列属性和Sequence对象

    使用IDENTITY列属性 1. 建立表 Sales.MyOrders USE TSQL2012; IF OBJECT_ID(N'Sales.MyOrders', N'U') IS NOT NULL ...

  9. 微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)

    转自:http://www.kwstu.com/ArticleView/netmvc_201511132050268716 最近开发手机app需要实现移动支付功能,由于考虑支付安全将微信支付生成签名写 ...

  10. js 错误Error对象详解

    一.概念 error,指程序中的非正常运行状态,在其他编程语言中称为"异常"或"错误".解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信 ...