我用gdi+在屏幕上显示一张图片,图片的尺寸会变大? 不知道如何解决?比如,我开一个200x200的窗口,从(0,0)的位置显示一张200X200的jpg.
但图片的尺寸会变大,使图片的右边和下边超出窗口。不知大家有没有遇见同样的问题? 是如何解决的?
但图片的尺寸会变大,使图片的右边和下边超出窗口。不知大家有没有遇见同样的问题? 是如何解决的?
解决方案 »
- 下面两段代码,那个效率高呢?
- MFC的Release模式问题
- 请问怎么做到那些下载工具的主窗口那样?
- 如何在win32工程里,添加一个用户线程呀?
- 想问问关于这个文件的读写,谢谢大家!
- 有谁对webdrive、xdrive或ftpnetdrive的实现比较熟悉的吗?
- 高手帮忙
- 有什么办法: 在 CStatic 上画多个 可拖动边的 矩形
- mcisendmessage怎么播放含有空格音乐名的音乐
- 我使用相同非模式对话框显示不同内容,要求可以同时打开多个实例,但相同标题的仅打开一次即可。怎样实现啊?
- 菜鸟问题,vc.net怎样让对话框响应某个按键(如F11),按下后退出程序,在线等
- 怎么给VC做二次开发改变文件保存、编译、调试命令以实现完全不同的功能?
难道其他尺寸的图片就一定要变形?
Y:U :V=4:1:1
所以必须是16*16你可以看看jpeg图像的格式,到网上去搜一下
但是:
1. 我把图片和窗口的宽高都改为16的倍数。 y方向没有缩放了,但X方向依然被拉长了.
2. 在gdi+方式下,只能贴16倍数尺寸的jpg图片? 总感觉不太对吧?不知道 有没有彻底的解决方式?
// 程序: FitSize(CSize toFit,CSize room)
// 说明: 实现图像窗口的自适应,如果图像小于窗口,就图像大小为原大小,如果
// 图像大于窗口,根据高宽来定比例,以适就窗口大小
// 返加: 新的图像大小
// 日期: 2004-04-18
// 程序员: 武志文
/////////////////////////////////////////////////////////////////////////////
CSize CPicEditCtrl::FitSize(CSize toFit, CSize room)
{
if (toFit.cx > room.cx || toFit.cy > room.cy) // 图像大于窗口
// 小图像保留原大小
{
if (toFit.cx * room.cy > room.cx * toFit.cy) // width determines scale
{
toFit.cy = MulDiv(toFit.cy, room.cx, toFit.cx);
toFit.cx = room.cx;
}
else // height determines scale
{
toFit.cx = MulDiv(toFit.cx, room.cy, toFit.cy);
toFit.cy = room.cy;
}
}
return toFit;
}//////////////////////以下为示例部份
CRect rcClient;
GetClientRect(rcClient); // If necessary, scale down to fit picture in rcClient
CSize szPic = FitSize(CSize(pPicture->GetWidth(), pPicture->GetHeight()), rcClient.Size()); // Center in window and cache in GDI+ rect
CRect rcImage(CPoint(0, 0), szPic);
CSize szOffset = rcClient.CenterPoint() - rcImage.CenterPoint(); m_rect.X = szOffset.cx;
m_rect.Y = szOffset.cy;
m_rect.Width = szPic.cx;
m_rect.Height = szPic.cy;
把
g.DrawImage ( &Img , Point ( 0,0 ) ) ;
改为:
g.DrawImage ( &Img , 0,0 , BK_W , BK_H ) ;
强行设置宽高。
这末简单的方法,竟然让我痛苦了好几天,我开始对我的智商表示深刻怀疑。不过,仍然没有找到为什末默认的情况下,宽高会变化,怀疑与dpi有关,未果。
还望高人指点。
wuzhiwen说的不是我困惑的问题,但同样感谢。在gdi下贴图不会有问题,在gdi+下却有。