一个GDI+ DrawImage的问题

j8daxue 2010-12-30 02:17:35
很多时候,一些图片都是三或者四个连成一串表示各种状态。
经常性是Bmp带有掩码,相信这些一般是用Imagelist处理。
现在有一串带alphabet通道的png图,也是横着一串。
代码:

#define BEGIN_LOAD(path,n) Bitmap* bmp = Bitmap::FromFile(szSkinFilePath);\
m_nWidth = bmp->GetWidth() / count;\
m_nHeight = bmp->GetHeight();\
Graphics* g;

#define LOAD_IMAGE(n) m_pImage[n] = new Bitmap(m_nWidth,m_nHeight);\
g = Graphics::FromImage(m_pImage[n]);\
g->DrawImage(bmp,(REAL)0,(REAL)0,(REAL)n * m_nWidth,(REAL)0,m_nWidth,m_nHeight,UnitPixel);
#define END_LOAD() delete bmp;
void XXX::SetSkinPath(CString szSkinFilePath,int count)
{
Release();
BEGIN_LOAD(szSkinFilePath,count)
LOAD_IMAGE(0)
LOAD_IMAGE(1)
LOAD_IMAGE(2)
LOAD_IMAGE(3)
END_LOAD()
}

问题是,这些被切割的小图片,非常模糊,甚至不对位,感觉都不像是从原图上截取下来的了。
...全文
292 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanshen2891 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 j8daxue 的回复:]
原因不清楚,但如果把目的地rect限定W,H指定,则没问题。
估计DrawImage对PNG有特别处理。
同时DrawImage绘制PNG指定Point,而没W,H时,高DPI下也出现同样问题。估计BMP就没问题。
[/Quote]

这个问题我也发现了,用的解决办法也是和你的一样,画BMP也会出现这个问题
  • 打赏
  • 举报
回复
我试了下,BMP位图32位ARGB

如果在DrawImage时不指定目标矩形大小,绘制出来的图形会稍放大,模糊
如果采用DrawImage(img,rect)的形式,revt与img的大小一致,这时候图像符合要求
j8daxue 2010-12-30
  • 打赏
  • 举报
回复
原因不清楚,但如果把目的地rect限定W,H指定,则没问题。
估计DrawImage对PNG有特别处理。
同时DrawImage绘制PNG指定Point,而没W,H时,高DPI下也出现同样问题。估计BMP就没问题。
  • 打赏
  • 举报
回复
楼主怎么解决的?
说一下我也了解些知识
Thanks
j8daxue 2010-12-30
  • 打赏
  • 举报
回复
解决了,送分算了。艹
j8daxue 2010-12-30
  • 打赏
  • 举报
回复
同样也会失去透明度。
为什么发帖基本没人回。。。
j8daxue 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 beyond0824 的回复:]
用这个函数

C/C++ code

HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_BITMP), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
[/Quote]
答非所问。
试了下,如果把图片直接另存为BMP格式,貌似就没问题了- -
江南烟雨梦 2010-12-30
  • 打赏
  • 举报
回复
用这个函数

HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_BITMP), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧