void CSaveView::OnFileSave()
{
BITMAP info;//原始图片
m_bitmap.GetBitmap(&info);
CDC DC1;
DC1.CreateCompatibleDC(NULL);
DC1.SelectObject(&m_bitmap); DC1.MoveTo(,);
DC1.LineTo(info.bmWidth,info.bmHeight); CDC DC2;
CBitmap bmp;//缩放后的图片
bmp.CreateCompatibleBitmap(&DC1,,);
DC2.CreateCompatibleDC(NULL);
DC2.SelectObject(&bmp);
int mode = SetStretchBltMode(DC2, COLORONCOLOR); //设置不失真缩放
DC2.StretchBlt(,,,,&DC1,,,info.bmWidth,info.bmHeight,SRCCOPY);
SetStretchBltMode(DC2, mode); CFileDialog dlg(false,"bmp",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,this);
if(IDOK == dlg.DoModal())
{
    CString bmpfile = dlg.GetPathName();
CFile file(bmpfile,CFile::modeCreate|CFile::modeWrite);
BITMAP bInfo;
     bmp.GetBitmap(&bInfo);
//计算调色板大小
int panelsize = ;
if (bInfo.bmBitsPixel<) //非真彩色
{
panelsize = int(pow((double),bInfo.bmBitsPixel)*sizeof(RGBQUAD));
} //定义位图信息
BITMAPINFO* bMapInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFOHEADER)+panelsize);
bMapInfo->bmiHeader.biBitCount = bInfo.bmBitsPixel;
bMapInfo->bmiHeader.biClrImportant = ;
bMapInfo->bmiHeader.biCompression = ;
bMapInfo->bmiHeader.biHeight = bInfo.bmHeight;
bMapInfo->bmiHeader.biPlanes = bInfo.bmPlanes;
bMapInfo->bmiHeader.biSize = sizeof(BITMAPINFO);
bMapInfo->bmiHeader.biSizeImage = bInfo.bmHeight*bInfo.bmWidthBytes;
bMapInfo->bmiHeader.biWidth = bInfo.bmWidth;
bMapInfo->bmiHeader.biXPelsPerMeter = ;
bMapInfo->bmiHeader.biYPelsPerMeter = ; //获取位图的实际数据
char* pData = new char[bMapInfo->bmiHeader.biSizeImage];
    int len = GetDIBits(DC2.m_hDC,bmp,,bInfo.bmHeight,pData,bMapInfo,DIB_RGB_COLORS); BITMAPFILEHEADER bFileHeader;
bFileHeader.bfType = 0x4D42;
bFileHeader.bfReserved1 = ;
bFileHeader.bfReserved2 = ;
bFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
bFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize; //向文件中写入位图数据
file.Write(&bFileHeader,sizeof(BITMAPFILEHEADER));
file.Write(&bMapInfo->bmiHeader,sizeof(BITMAPINFOHEADER));
file.Write(pData,bMapInfo->bmiHeader.biSizeImage+panelsize);
file.Close();
delete pData;
LocalFree(bMapInfo);
  }
}

vc++ mfc 里保存缩放的bmp图片 不失真的更多相关文章

  1. 保存画面为图片 当前MFC保存该程序为图片 c++ vc

    将屏幕保存为图片.使用vs2008编译通过. [cpp] view plaincopy #include "stdafx.h" #include <windows.h> ...

  2. 【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片

    本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp ...

  3. MFC对话框显示BMP图片

    1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...

  4. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

    版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733   ...

  5. VC++使用CImage在内存中Jpeg转换Bmp图片

    VC++中Jpeg与Bmp图片格式互转应该是会经常遇到,Jpeg相比Bmp在图片大小上有很大优势. 本文重点介绍使用现有的CImage类在内存中进行转换,不需要保存为文件,也不需要引入第三方库. Li ...

  6. Windows 保存BMP图片

    在Windows下保存BMP图片还是挺方便的,直接上代码,拷贝就能用 void savebmp(uchar * pdata, char * bmp_file, int width, int heigh ...

  7. 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码

    ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...

  8. 24位和8位BMP图片保存纯C代码

    BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片.非常方便使用. 具体BMP结构可以参考:wingdi.h头文件.今天主要在进行删减代码,需要把多余的代码删除, ...

  9. [转]RGB数据保存为BMP图片

    转自:http://blog.csdn.net/yixianfeng41/article/details/52591585 一.BMP文件由文件头.位图信息头.颜色信息和图形数据四部分组成. 1.BM ...

随机推荐

  1. SimpleDateFormat格式化日期

    SimpleDateFormat格式化日期 import java.text.SimpleDateFormat;import java.util.Date;public class test { pu ...

  2. JS tab切换事件

    $('ul.main-tab>li').on('mousedown', data, function() { var $this = $(this), $box = $('.main-tab-c ...

  3. iOS中nil、Nil、NULL、NSNull详解(转)

    ObjC 里面的几个空值符号经常会差点把我搞死,这些基础的东西一点要弄清楚才行,以提高码农的基本素质. nil nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interfa ...

  4. [TOP10]十大渗透测试演练系统

    本文总结了目前网络上比较流行的渗透测试演练系统,这些系统里面都提供了一些实际的安全漏洞,排名不分先后,各位安全测试人员可以亲身实践如何利用这个漏洞,同时也可以学习到漏洞的相关知识. DVWA (Dam ...

  5. JAVA的第一个程序

    关于下载安装环境变量的配置网上的教程已经很多了 . 下面附上第一个HelloWorld的代码 /** 这是我的第一个java程序 */ public class HelloWorld { public ...

  6. HDU 4819 Mosaic(13年长春现场 二维线段树)

    HDU 4819 Mosaic 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4819 题意:给定一个n*n的矩阵,每次给定一个子矩阵区域(x,y,l) ...

  7. source insight 注册码

    分享一下google来的 呵呵 Source Insight,一个无比强大的工具.一个很好的查看代码的工具.到它的官网上去看一下,就知道,世界上基本上所有的大的软件公司,都在用这个工具.习惯了这个工具 ...

  8. C++学习笔记35:函数模板

    函数模板 函数模板的目的 设计通用的函数,以适应广泛的数据型式 函数模板的定义格式 template<模板型式参数列表>返回值型式 函数名称(参数列表): 原型:template<c ...

  9. easyui accordion—手风琴格子始终展开和多个格子展开

    来源:http://www.cnblogs.com/tylerdonet/p/3531844.html 始终打开有时候可能会很管用,其实就是一个设置问题.这里就不再介绍引用的资源了,这里只看看html ...

  10. Sprint第二个冲刺(第七天)

    一.Sprint 计划会议: 现在简单的说下今天的会议情况:组员们除了完善之前做的功能,还打算实现把轮播图迁移到一个fragment中,方便管理.现在也准备着手实现商家上传商品的图片这个功能,虽说现在 ...