当我们把一个Image画到它本身上面...

当我们把一个Image画到它本身上面,会出现什么情况呢?如下例子:
Image img = Image.createImage(100,50);
Graphics g = img.getGraphics();
g.setColor(0xff0000);
g.fillrect(0,0,10,10);
g.drawImage(img,dx=10,dy=10,0);

也许,结果和你预想的有所不同。

原因很简单,由于源图和目标图是同一张图,在内存中也是同一块
数据区域,drawImage()时,是按照从上到下,从左到右复制的,
(x,y)先被复制到(x+10,y+10), (x+20,y+20)的数据就不对了.也
不能算是bug吧.

如果dy<0,或者dy==0 and dx<=0,或者dy>0且(dy>=h/2或dx>=w/2),不
会出现这种情况.

下面我们来想想怎么利用.
1. 要做含过渡色的背景时,为了省空间,经常只保存一个1*N的小
图,然后画若干次到一个buffer上。现在我们可以先画一次到buffer,
然后把buffer画到buffer本身上,x=1,y=0,就可以得到背景图。
这样子看起来,似乎并没有多大好处,还是需要一张buffer。如
果是用GameCanvas,就可以不用buffer。
Graphics bg = getGraphics();
bg.drawImage(background, 0, 0, 20);
bg.translate(0,1);
super.paint(bg);
bg.translate(0,-1);

2. 还没想到...
你有什么其他的好主意?请告诉我 :)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值