【发布时间】:2011-02-11 10:02:25
【问题描述】:
我正在尝试从多个较小的位图合成背景位图。我正在使用带有 Android SDK 的 Eclipse。
我已经加载了一个(大部分)空白背景位图(像素尺寸为 320x480),如下所示:
Bitmap mBackground = BitmapFactory.decodeResource( res, R.drawable.background );
然后我以同样的方式加载位图“平铺”(128x128)。
我尝试了多种将图块绘制到位图上的方法,但每种方法都无法按照我想要/预期的方式工作。我想在背景位图上的特定位置(像素偏移)绘制缩小到 64x64 的平铺位图。
1) 使用画布...
Canvas c = new Canvas( mBackground );
c.drawBitmap( mTile, null, new Rect( 10, 10, 73, 73 ), null );
这会将图块绘制得太大(不是全尺寸,不是 64x64,但介于两者之间,大约是原始尺寸的 66%)
2)使用drawables(基本上看起来是一样的):
Canvas c = new Canvas( mBackground );
c.translate( 10, 10 );
d.setBounds( 0, 0, 63, 63 );
d.draw( c );
与实验 #1 相同的结果...
文档在许多地方(没有任何地方的简明解释)提到这与设备无关的“密度”有关,因此我尝试了下一种方法......
3) 使用固定规模的资源。我创建了 /res/drawable-nodpi(我也尝试了 /res/drawable)文件夹并将我的资源(背景和平铺 png 图像)移动到其中。从背景位图创建画布时会导致异常,因为未缩放的位图显然变得不可变,因此无法分配给画布!
4) 我尝试使用 BitmapFactory.Options 并将 inScaled 设置为 false,并将这些选项传递给背景和磁贴的 decodeResource 调用。这与 #3 的效果完全相同(抛出异常)。
没有任何效果,它变得非常令人沮丧。我敢肯定,当涉及到不同的坐标空间时,我只是遗漏了位图特有的一些细节,但我在文档或其他地方都找不到它(我尝试了多个 android 开发站点都无济于事)。
希望这样做的人会看到这个请求! 谢谢,杰森
【问题讨论】:
-
为什么不使用 Bitmap.createScaledBitmap() 将“平铺”从 128x128 缩放到 64x64?
-
基本上,在尝试了几次实验之后,似乎无法使用合成。如果我单独加载所有图块并动态组合位图(即一次将所有内容绘制到空白画布上),它工作得很好,因为坐标空间都匹配。