关于图片的叠加问题? ( 积分: 50 )

  • 主题发起人 主题发起人 twosunsun
  • 开始时间 开始时间
T

twosunsun

Unregistered / Unconfirmed
GUEST, unregistred user!
我的应用是在一个大的图片叠加很多小的图片,大图片是jpg格式,小图片是

bmp格式。

我采用的方法是:
大图片使用TDBimage
小图片使用Timage,Timage是动态创建.

在一个循环中创建多个小图片
代码如下:
img:=Timage.create(nil);
img.Top := FieldByName('fx').AsInteger;
img.left := FieldByName('fy').AsInteger;
img.Visible := true;
img.parent :=DBImage1;
存在的问题是:当使用大一点的图片时,会出现显示不全的现象。
我测试了一下:当我不向TDBimage上创建小图片时,是可以显示全的。
并且当大图片显示不全之后,只要将小图片清除那么大图片仍然是可以显示全

的。
清除用代码如下:
for i:=1 to n do
begin
if img<>nil then
begin
img.free;
imgi]:=nil;
end;
end ;

想请问各位大虾,如何解决上述问题?有没有什么替代方案?
 
我的应用是在一个大的图片叠加很多小的图片,大图片是jpg格式,小图片是

bmp格式。

我采用的方法是:
大图片使用TDBimage
小图片使用Timage,Timage是动态创建.

在一个循环中创建多个小图片
代码如下:
img:=Timage.create(nil);
img.Top := FieldByName('fx').AsInteger;
img.left := FieldByName('fy').AsInteger;
img.Visible := true;
img.parent :=DBImage1;
存在的问题是:当使用大一点的图片时,会出现显示不全的现象。
我测试了一下:当我不向TDBimage上创建小图片时,是可以显示全的。
并且当大图片显示不全之后,只要将小图片清除那么大图片仍然是可以显示全

的。
清除用代码如下:
for i:=1 to n do
begin
if img<>nil then
begin
img.free;
imgi]:=nil;
end;
end ;

想请问各位大虾,如何解决上述问题?有没有什么替代方案?
 
怎么没有人回答啊?大虾们帮帮忙了!
 
你使用的是图片叠加,会不会有大图片盖住了下面的小图片?
看不明白这是什么应用,好像是将若干小图片组成大图,感觉跟拼图游戏差不多?
你可以使用copyrect,draw等函数将小图放到一个bitmap中,组成大图(可以转为jpg),然后使用一个bitmap或jpg给dbimage赋值即可。
 
大图不会盖住小图。
应用是这样的,我用一个大图来画出一个楼的平面图,这个平面图是固定的。然后在这个图上做一些标注,表示在这个楼的那个地方有个什么东西,比如在某一个地方有一个电话接头(用一个小图标来表示这个电话接头,就是小图片),有一个有线电视的插头等。
因为有一些其它要求,不能将这些固定画在大图片上。所以就有了这个用法。
 
怎么还是没有人回答啊?提示一下替代方案也可以,谢谢各位大虾了
 
你的小图片放在大图片上是透明的吗?

Siva说得对,最好的办法是把大图片转成bitmap,然后把小图片用copyrect,draw等函数画在大图片上
 
我采用了一个笨的方法,只要一移动大图片,就把所有的小图片删除,refresh大图片,再添加小图片。可以显示全大图片了。可以用起来不是很好,比较慢一些。并且在快速的单击滚动条时优其慢。不是好方法。
to:啊啊啊啊啊
我试一下,您说的方法看。
 
建议这位兄弟从DirectX方面入手吧
可以用DelphiX控件来做 很简单的
有专门的背景类 好像叫TBackGroundSprite吧 在里面载入个图片作背景。并且可以很大很大,能突破BMP的限制
再用TImageSprite类 来做小图 也是直接载入图像 控制他的属性X,Y就能改变位置 控制他的属性Z就能改变层 默认自带透明 碰撞检测 鼠标点选什么的 以后增加功能也方便
这么做 速度绝对是最快的 无论多大多么复杂的图 因为是用DirectX 它里面自带了那种看不见就不渲染的那种功能.......

说了一堆 其实就是把它当DirectX游戏来做.....
DelphiX/Samples/下的例子也很简单 容易看
应该是很方便的 代码量比也比较少
 
春节回来了,我试了:“啊啊啊啊啊”说的方法,没有试通,不知是不是我的方法不对。我再试一下“Genl”的方法。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部