vc++ mfc 里保存缩放的bmp图片 不失真
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图片 不失真的更多相关文章
- 保存画面为图片 当前MFC保存该程序为图片 c++ vc
将屏幕保存为图片.使用vs2008编译通过. [cpp] view plaincopy #include "stdafx.h" #include <windows.h> ...
- 【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片
本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp ...
- MFC对话框显示BMP图片
1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...
- MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733 ...
- VC++使用CImage在内存中Jpeg转换Bmp图片
VC++中Jpeg与Bmp图片格式互转应该是会经常遇到,Jpeg相比Bmp在图片大小上有很大优势. 本文重点介绍使用现有的CImage类在内存中进行转换,不需要保存为文件,也不需要引入第三方库. Li ...
- Windows 保存BMP图片
在Windows下保存BMP图片还是挺方便的,直接上代码,拷贝就能用 void savebmp(uchar * pdata, char * bmp_file, int width, int heigh ...
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...
- 24位和8位BMP图片保存纯C代码
BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片.非常方便使用. 具体BMP结构可以参考:wingdi.h头文件.今天主要在进行删减代码,需要把多余的代码删除, ...
- [转]RGB数据保存为BMP图片
转自:http://blog.csdn.net/yixianfeng41/article/details/52591585 一.BMP文件由文件头.位图信息头.颜色信息和图形数据四部分组成. 1.BM ...
随机推荐
- Java 获取APK安装程序的包名
Java 获取APK安装程序的包名核心的两个类: ResPackage ApkDecoder package com.temobi.util; import java.io.File; impo ...
- EF学习笔记(二)
DbContext 1.指定连接字符串(上一章提到) public string ConnectionStringName { get; private set; } /// <summary& ...
- BZOJ 1568 Blue Mary开公司
李超线段树. GTMD调了一下午... #include<iostream> #include<cstdio> #include<cstring> #include ...
- [Java Basics] Stack, Heap, Constructor, I/O, Immutable, ClassLoader
Good about Java: friendly syntax, memory management[GC can collect unreferenced memory resources], o ...
- 怎样修改Response中的内容
重写Stream public class CatchTextStream : Stream { private Stream output; public CatchTextStream(Strea ...
- 4 Values whose Sum is 0_upper_bound&&ower_bound
Description The SUM problem can be formulated as follows: given four lists A, B, C, D of integer val ...
- ajax 外部变量
1.一般的js代码可以放在任何位置.但是用jquery写的代码需要先引入jquery文件,再写代码. 2.ajax函数中内部的变量不能传到外部.如果改变外部变量,需要async:false,代码如下: ...
- 使用innerHTML生成的script节点不会发出请求与执行text属性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Day07_面向对象第二天
1.构造方法(掌握) 1.构造方法的特点(掌握) A.方法名必须和类名保持一致 B.没有返回值类型并且没有具体的返回值 2.构造方法的作用(掌握) 给对象的属性初始 ...
- Open vSwitch FAQ (二)
Configuration Problems Q: I created a bridge and added my Ethernet port to it, using commands like t ...