讨论一下GDI+下如何实现背景图片的拉伸绘制吧,1像素拉伸,不要渐变,不要特效,我就要CDC::StretchBlt的那个效果

BloodFighter 2010-05-15 11:26:07
起因:最近项目接了一个控件绘制的活,因为要加载不同的图片格式png bmp gif等等,图片的加载采用GDI+,因此绘制部分也得用GDI+

问题:GDI+在绘制很小的区域的时候,是没有变形的,但是当我做到希望把一个1*30的背景图拉伸到一个任意区域的时候,卡住了,baidu了很多方法,还是显示不正确,下边罗列两大类方法,其中又有几个细节的参数设置,总之我就是没有搞定啊

CPaintDC dc(this);
dc.FillSolidRect(0, 0, 300, 250, RGB(255, 0, 0));

// method 1
Graphics grap(dc.GetSafeHdc());
grap.SetInterpolationMode(InterpolationModeNearestNeighbor);
Rect rcDes(0, 0, 300, 250);
grap.DrawImage(m_pImageBack, rcDes
, 0, 0, m_pImageBack->GetWidth(), m_pImageBack->GetHeight()
, UnitPixel);

// method 2
Rect rcSrc(0, 0, m_pImageBack->GetWidth(), m_pImageBack->GetHeight());
TextureBrush brush(m_pImageBack, WrapModeTile, rcSrc);
grap.FillRectangle(&brush, rcDes);


为了显示好效果,我先把背景色设为了红色,这样可以很明显看到绘制的效果
method 1,永远在右侧还有底部有绘制不上的地方,SetInterpolationMode调用任何一个参数都没戏
method 2,只能做到横向拉伸,WrapMode无论采用哪个类型,都是横向拉伸,纵向没能力


效果图如下:
[img=http://hi.csdn.net/attachment/201005/15/335321_12739371630p7U.png]ttp://hi.csdn.net/space-335321-do-album-picid-544307-goto-down.html[/img]

我郁闷了,其实我想要做的东西很简单,我想问一下GDI+中,如何实现CDC::StretchBlt这个效果,我的背景图就是1*20,目标区域大小不确定,随意

认真发帖,希望熟悉的达人,认真回帖
...全文
427 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BloodFighter 2010-05-16
  • 打赏
  • 举报
回复
qifa的方法有效,问题解决,非常感谢qifa的代码,结贴
另外,qifa如果能看到,能给几篇GDI+的文章么?
BloodFighter 2010-05-16
  • 打赏
  • 举报
回复
hgreminem没有仔细看我的问题描述,我说了SetInterpolationMode没有用,所有参数都试过了
qifa 2010-05-16
  • 打赏
  • 举报
回复
试试下面的代码:


ImageAttributes imAtt;
imAtt.SetWrapMode(WrapModeTileFlipXY);
grap.DrawImage(m_pImageBack, rcDes
, 0, 0, m_pImageBack->GetWidth(), m_pImageBack->GetHeight()
, UnitPixel, &imAtt);
hgreminem 2010-05-16
  • 打赏
  • 举报
回复
grap.SetInterpolationMode(InterpolationModeHighQualityBicubic);
LZ换个参数看看~~

15,980

社区成员

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

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