高分求一图形放大的算法,非高手莫入!(200分)

  • 主题发起人 主题发起人 NeutronDelphi
  • 开始时间 开始时间
N

NeutronDelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
如下描叙:
我有一图片,48X48,在图片的四周有一边框,4个象素,中间是一照片(当然是40X40),
我要求把图片放大几倍,但是我要求只放大中间的照片,也就是说放大n倍以后边框还是
4个象素,只是横边框变长了,纵边框变高了,四个角不变。
简单的算法是把图片分成9个部分,四个角不变,两个横边框变长,两个纵边框变高,
中间的照片按比例放大。
这样不仅操作繁琐,而且速度受到很大程度的影响,
特求一较好的算法。
 
用Canvas.CopyRest方法
 
我辛辛苦苦等了半天,来了个灌水的!
是 Canvas.CopyRect不是CopyRest.
 
我有一种想法.但我没试过.. 不知是不是可以

用你上面的方法是可行的
一张图是一个矩阵

我们可以定义9个TBITMAP对象.
程序自动计算这9个点在原图中的位置.将其自动COPY
不可以用[Canvas.CopyRect]这样速度会很慢..
然后就可放大中间的一部分
 
连边框一起放大,然后对放大后的图进行截取,截取到边框只有4个像素就可以了
 
唉,这算好算法吗,行不通!
 
定义RECT,
rect1.top:=4;
rect1.left;=4;
rect1.right:=iamge1.picture.width
rect1.bottom:=image1.picture.height
用上面的方法把rect1复制到另一个IMAGE的RECT2里面,再画四边的线就OK!
 
to x-dsl:
你认为行吗,你试过没有?
一,就是边框画不出来。
二,就是说边框能画出来你的方法也不行,你那样会把边框放大,
应该是Copy除了边框的图形,
三,Image是什么?什么时候来了Image,用TBitmap就行,兄弟,Image的开销比TBitmap
大n倍!
 
用paintbox画,也很好用,至少很快
边框可以先用一个tbitmap画好,再一次性的用copyrect复制过去
这样就不会闪了
 
给你一个思路:
1、将该图片分割为5部分,即上下左右和中间部分,当然是TBitMap类型;
2、对不同部分做放缩处理,即上下部分做横向处理,左右部分做纵向处理,中间部分
同步放缩;
3、以上处理完毕后再并接到一起就可以了。

应该要使用到BitBlt API函数。

对于图象的放缩处理,我觉得你还是去找一个比较好的图象处理算法才行,否则容易失真。
 
to chnplzh:
你的思路和我题目上的思路是一样的,甚至。。
谢谢你!
 
我有一个方法:
1,先把这个图象全部放大到一个 Image 里。
2,再把图象中的 40x40 的放大,盖到之前的那个 Image 上就可以了。
不过要边框是一个颜色的。
可能不能满足你的要求。

还有也就只有把图分为 9 个部分了。没办法。
 
先把你要的部分,复制到同样大的一个区域内,然后再canvas.stretchdraw,效果还可以,可能他就是调用了bitblt函数。我也不知道,显然无论是放大和缩小比copyrect好多了。
 

Similar threads

回复
0
查看
839
不得闲
D
回复
0
查看
849
DelphiTeacher的专栏
D
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
926
SUNSTONE的Delphi笔记
S
后退
顶部