要求是这样的:
把以下几个图片合成为一个图片(可以是任何格式)大小是145*145
a.png(100*100) -- 这个图片作为背景
b.jpg(15*15) -- 显示在左下角
c.gif(15*15) -- 显示在右下角我试验了一个方法,如下:
CRect rect(0, 0, 145, 145);
Bitmap bmPhoto(rect.Width(), rect.Height(), PixelFormat24bppRGB); // 新图 -- 在内存中
bmPhoto.SetResolution(72, 72); // 设置分辨率
Image imgBk(sWorkingDirectory + _T("a.png"));
Image imgLeft(sWorkingDirectory + _T("b.jpg"));
Image imgRight(sWorkingDirectory + _T("c.jpg")); Graphics *pGrPhoto = Graphics::FromImage(&bmPhoto);////////按窗口尺寸拉伸显示////////
picPoints[0] = PointF(rect.left, rect.top); // 顶点
picPoints[1] = PointF(rect.left + rect.Width(), rect.top); // 右上
picPoints[2] = PointF(rect.left, rect.top + rect.Height()); // 左下
pGrPhoto->DrawImage(&imgPhoto, picPoints, 3);CLSID pngClsid;
GetEncoderClsid(L"image/bmp", &pngClsid);bmPhoto.Save(WorkingDirectory + _T("\\newpng.bmp"), &pngClsid, NULL);结果新图片好多背景都是纯黑色,而且那个png图片上也大幅失真(简直都看不出原来的模样了)
把以下几个图片合成为一个图片(可以是任何格式)大小是145*145
a.png(100*100) -- 这个图片作为背景
b.jpg(15*15) -- 显示在左下角
c.gif(15*15) -- 显示在右下角我试验了一个方法,如下:
CRect rect(0, 0, 145, 145);
Bitmap bmPhoto(rect.Width(), rect.Height(), PixelFormat24bppRGB); // 新图 -- 在内存中
bmPhoto.SetResolution(72, 72); // 设置分辨率
Image imgBk(sWorkingDirectory + _T("a.png"));
Image imgLeft(sWorkingDirectory + _T("b.jpg"));
Image imgRight(sWorkingDirectory + _T("c.jpg")); Graphics *pGrPhoto = Graphics::FromImage(&bmPhoto);////////按窗口尺寸拉伸显示////////
picPoints[0] = PointF(rect.left, rect.top); // 顶点
picPoints[1] = PointF(rect.left + rect.Width(), rect.top); // 右上
picPoints[2] = PointF(rect.left, rect.top + rect.Height()); // 左下
pGrPhoto->DrawImage(&imgPhoto, picPoints, 3);CLSID pngClsid;
GetEncoderClsid(L"image/bmp", &pngClsid);bmPhoto.Save(WorkingDirectory + _T("\\newpng.bmp"), &pngClsid, NULL);结果新图片好多背景都是纯黑色,而且那个png图片上也大幅失真(简直都看不出原来的模样了)
解决方案 »
- MFC 基于对话框的程序,实现按钮PNG图片。
- 快速查找二进制数据
- 大虾们,给小弟介绍介绍Variant 数据类型以及它的用法,org
- 帮忙寻找实时录制mp3文件的VC工具源代码,和mp3格式的详细资料
- 关于异常处理的语法问题(郁闷)
- 学习COM,请大家推荐好书
- 请问浏览页面时,怎样强制刷新呢?我看到的全是几分钟前的贴子,怎么刷新也看不到刚发的。
- 如何得到设备和USB HUB端口的对应关系
- 在VC下使用ODBC绑定时间数据时的问题的解决!
- 请问高手:用 C++Builder 做 COM 如何访问数据库?
- 关于windows核心编程 书中代码编译问题,实在不知道哪里出了问题
- VC++图像处理问题
selectobject(dc1, bitmap1);
把图1画上去建立内存dc2,内存bitmap2,
selectobject(dc1, bitmap);
把图2画上去建立内存dc3,内存bitmap3,
selectobject(dc3, bitmap3);
把图3画上去把dc2 bitblt到dc1的左下角
把dc3 bitblt到dc1的右下角参考这几个函数:
CreateCompatibleDC
CreateCompatibleBitmap
Bitblt
SetStretchBltMode(hDC,COLORONCOLOR);
SetStretchBltMode(hDC,nMode);