//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. ASP + ACCESS保存图片文件之实现

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

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

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

  3. java 上传图片

    1.导入smartupload.jar包 ,添加uploadIMG.jsp,upfileIMG.jsp. 2.需要在项目下面建立一个保存文件的文件夹pic或者upload 3.在调用的地方调用子框架u ...

  4. 商品条形码(JBarcode)

    之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作: Eclipse:Eclipse Java EE IDE for Web Developers.Version: Hel ...

  5. 使用C#向Sql Sever中存取网络图片和本地图片(二进制流的形式)

    先是做普通的,存储我们本地的图片,将它转化为二进制流存储到数据库对应的表中. 代码如下: string path = "../../A.jpg"; FileStream fs = ...

  6. MFC中快速应用OpenCV(转)

    转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV 简介和缘 ...

  7. GridView控件显示图片

    与图片的二进制数据库存储和显示 1.将图片以二进制存入数据库 2.读取二进制图片在页面显示 3.设置Image控件显示从数据库中读出的二进制图片 4.GridView中ImageField以URL方式 ...

  8. 学习PHP爬虫--《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》

    <Webbots.Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)> 译者序 前言 第一部分 基础概念和技术 第1章 本书主要内容3 1.1 发现互联网的真 ...

  9. webservice跨域上传图片

    1.上传文件,在一般处理程序中处理 //1.接收post过来的文件 HttpPostedFile file = context.Request.Files[]; || file.ContentLeng ...

随机推荐

  1. 【Spring】简单的Spring AOP注解示例

    引入相关包: <properties> <spring.version>3.0.5.RELEASE</spring.version> <aspectj.ver ...

  2. Django 1.10 找不到静态资源解决方法

    测试版本:Django 1.10 问题:Django项目找不到静态资源 解决方法: 1.首先你需要在自己的app下面创建2个目录 static 和  templates 树形结构如下(DjangoPr ...

  3. div显示提示信息

    div显示提示信息 <body> <style type="text/css"> a.link{position:relative;} a.link div ...

  4. C#使用Process调用批处理阻塞问题

    PS:又见到熟悉的C#代码了,好开心,哈哈哈.这次又跳坑了,好不容易才爬起来.   公司有自己开发的一套Submit.Compile.Publish的生命周期系统. 在Compile时,需要调用外部的 ...

  5. 每天checklist所用到的T-CODE

    1.1重点检查 作业 事务码 检查过程 检查R/3系统是否已经启动 · 登录到R/3系统 检查每日备份是否正常 DB12-Backup Logs:Overview · 检查数据库备份 · 检查数据库备 ...

  6. 向txt文件中写入换行

    char ret[2];//向记事本中写入这个char数组可以实现换行 ret[0] = 13;// \r ret[1] = 10;// \n fwrite(ret, 2, 1, pFile);

  7. 节日EDM系列:圣诞节如何进行EDM数据营销

    消费关系升级,消费者看中的早已不是产品本身,场景消费以及消费带来的价值感体验已成为影响消费的重要因素.圣诞将至,如何才能将圣诞节EDM数据营销的效果发挥到极致? ①  节日元素创意融合,高辨识度加深品 ...

  8. Qt 2D绘图 渐变填充(三种渐变方式)

    在qt中提供了三种渐变方式,分别是线性渐变,圆形渐变和圆锥渐变.如果能熟练应用它们,就能设计出炫目的填充效果. 线性渐变: 1.更改函数如下: void Dialog::paintEvent(QPai ...

  9. 伪命题:PHP识别url重写请求

    手上有一个网站,然后启用了伪静态,因为一些设置上的原因,一段时间后,发现收录的都是.php的文件,而启用的伪静态地址则收录很少,在更改设置后,想尽快去掉.php的收录,然后想将.php的地址转向.ht ...

  10. python杂记-1(os模块)

    os模块说明:python os模块包含普遍的操作系统功能 os.access(path, mode) # 检验权限模式 os.chdir(path) # 改变当前工作目录os.chflags(pat ...