帮帮忙.......关于图片动态缩放显示的问题

mdejtod 2008-11-24 06:28:55
RT
在窗体上有一 panel ,panel上有一 image 它的 属性是 clClient.
程序要实现图片由小到大缩放显示
我是这样处理 的:
一开始隐藏panel ,触发事件后,在一个循环中改变它的大小和位置,同时image 也跟着改变,并在循环中画图,但是不知怎么搞的.一直画不了,而且IMAGE的大小不会跟着变,在循环之后再画同样也画不出
以下是代码

var bmp : TGPBitmap;
gd : TGpGraphics;
begin
panel1.BrintToFont;
panel1.Visable := True;
try
bmp := TGpBitmap.Create('1.png');
Gd := TGpgraphics.Create(image1.Canvas.Handle);
For i := 1 to 20 do
begin
pnl1.Left :=
pnl1.Top :=
pnl1.Width :=
pnl1.height := //由屏幕中央向处扩散的效果
gd.Drawimage(Bmp,GpRect (0,0,image1.width,image1.height),0,0,image1.width,image1.height,utpixel);

end;
finally
Bmp.Free;
gp.Free;
end;
end;

可以实现panel缩放的效果,但是图片一直无法显示,请高人赐教,问题出在哪,谢谢了!!!
...全文
128 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mdejtod 2008-11-27
  • 打赏
  • 举报
回复
能想到的方法都试过了,也试过用内存画布,如果不repaint 确实不会闪,但是图像就没有刷新会有一个拖影,
另外,试着把窗体上的frame 替换为 image 再动态创建,可以很好的实现效果,不会有闪烁,但是代码不容易维护和管理!
由于image或paintbox 是窗体上的,即使用 bringtofont 也不能让它在frmae 或 panle 之上显示,所以画出来后会被frame 遮住!
还是谢谢各位,暂时不考虑这个问题了!
mdejtod 2008-11-26
  • 打赏
  • 举报
回复
顶起来,高人不现身......
试了很多方法,都由于窗体一直要重画,所以闪个不停,有没有什么解决办法?不在乎分。。。。
mxm8547 2008-11-26
  • 打赏
  • 举报
回复
var
g:TGPGraphics;
begin
doublebuffer:=true;//双缓存可以很好的解决闪烁问题
g:=TGPGraphics.Create(self.canvas.handle);//或者建个bitmap,把bitmap的handle传进去,最后把bitmap的内容拷到窗体上也行
g.drawimage(.....);//这个放在Paint事件或者循环里面。
end;
自己试试看看,我没有调过,以前我做过类似的,根据鼠标移动图片跟着拖动都不会闪烁的。
xiedewei 2008-11-26
  • 打赏
  • 举报
回复
把除循环以外的绘图部分放进PaintBox的OnPaint事件里
twals 2008-11-26
  • 打赏
  • 举报
回复
up
android2008 2008-11-26
  • 打赏
  • 举报
回复
up
mdejtod 2008-11-26
  • 打赏
  • 举报
回复
to : ajiwuweibin

谢谢兄弟,放大缩小已经实现了,是效果很不好,一直在闪烁,没办法解决!
可能你没看清楚我后面的回贴
twals 2008-11-26
  • 打赏
  • 举报
回复
友情up
android2008 2008-11-26
  • 打赏
  • 举报
回复
友情up
ajiwuweibin 2008-11-26
  • 打赏
  • 举报
回复
加载图片以后
IMAGE设置为最小状态
然后IMAGE的宽和高按比例增加
每次增加一点点
不就是放大的效果了
而且速度快
mdejtod 2008-11-25
  • 打赏
  • 举报
回复
谢谢 楼上的兄弟,我先试下看看效果如何
如果单单是在一个空窗体上的paintbox 里面画,设置窗体的doublebuffer 为真,效果还可以,
问题是我的窗体上有N多个 Frame ,每个Frame 里面都有一个paintbox,在上面画小图,处理了onpaint事件
所以当单击一张图进行放大缩小操作时,就很闪.....
ahjoe 2008-11-25
  • 打赏
  • 举报
回复
用 PaintBox 很好。至于闪烁,可能是你直接在PaintBox上一点点画图造成的,改成先画到一 Bitmap上,再将Bitmap显示到PaintBox上试试。
mdejtod 2008-11-25
  • 打赏
  • 举报
回复
单独试了好久,在image 上画就是不行,改变了它的大小和高宽度,无法正常显示,用paintbox可以做到
用一个 frame,在 frame上放一个 paintbox ,在paintbox 上面画,
但是在改变frame的top 和 left 时,画面显得太闪了,由于很多地方都需要重画,双缓冲也用了,不知哪位有什么更好的办法?
mdejtod 2008-11-25
  • 打赏
  • 举报
回复
有没有哪位提供一下解决方法哪?我会加分的,
现在用pngimage 显示,直接改变控件的大小位置,还是会闪哪。。。由于窗体一直要重画!!!
无条件为你 2008-11-24
  • 打赏
  • 举报
回复
IMAGE的大小不会跟着变,是因为

image 它的 属性是 clClient
gwhdaxia 2008-11-24
  • 打赏
  • 举报
回复
搞个panel,上面放个image ,然后把image的Stretch设置为true,align设置为alClient,
然后设置panel的大小和坐标,就OK了

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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