很高深的一段代码

oyzm 2002-08-01 04:13:02
本人想用一个图片为背景画一个圆,当图片尺寸小于圆时,出现严重的锯齿代码如下,哪位高手帮我解决用图片为背景画图的问题???
TRect rect;
HRGN hRgn0, hRgn1, hRgn2;
ImgPhoto->Picture->LoadFromFile("c:\\test.bmp");
//test.bmp尺寸如果很小就有锯齿
rect=Rect(0,0,SImage->Width,SImage->Height);
hRgn0 = CreateRectRgn(0, 0, ImgPhoto->Picture->Width, ImgPhoto->Picture->Height);
hRgn1 = CreateEllipticRgn(0, 0,ImgPhoto->Picture->Width,ImgPhoto->Picture->Height);
CombineRgn(hRgn0, hRgn0, hRgn1, RGN_XOR);
CombineRgn(hRgn0, hRgn0, hRgn2, RGN_XOR);
SelectObject(ImgPhoto->Picture->Bitmap->Canvas->Handle, hRgn0);
ImgPhoto->Canvas->Rectangle(-1, -1, ImgPhoto->Picture->Width+1, ImgPhoto->Picture->Height+1);

DeleteObject(hRgn0); DeleteObject(hRgn1);
...全文
61 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangguo_god 2002-08-02
  • 打赏
  • 举报
回复
mark
gk0205 2002-08-02
  • 打赏
  • 举报
回复
@_@....
oyzm 2002-08-02
  • 打赏
  • 举报
回复
哈....!!!我直接用image1框就可以拉大它的尺寸了
jishiping 2002-08-01
  • 打赏
  • 举报
回复
哈哈,你以前的那个帖子没有理了,又在这儿贴了个帖子。上面的代码,你多
写了一行 CombineRgn(hRgn0, hRgn0, hRgn2, RGN_XOR);
言归正传,图形放大的时候,如果没有采用算法,仅仅是用Windows API函数
StretchDIBits或者StretchBlt的话,就会有锯齿。而TImage就是使用上面说
的函数实现放大的。要想没有锯齿,必须先用插值的方法将图形放大才行。
kingcaiyao 2002-08-01
  • 打赏
  • 举报
回复
你可以考虑先将位图放在当前设备描述表中:
CreateCompatibleDC
BitBlt
然后再画锯齿图形。
ppgo 2002-08-01
  • 打赏
  • 举报
回复
up
书生 2002-08-01
  • 打赏
  • 举报
回复
Mark@_@

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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