为什么当我创建这个新的Bitmap时,它的背景是深灰色的?如何将其设置为布局背景的相同颜色?

时间:2016-09-10 17:36:19

标签: java android android-activity android-image android-bitmap

我在Android中很新,我有以下问题。

我创造了这个immage:

enter image description here

使用此方法:

public static Bitmap createRankingImg(Context context, int difficulty) {

    // Create a Bitmap image starting from the star.png into the "/res/drawable/" directory:
    Bitmap myBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.chef_hat_ok_resize);


    // Create a new image bitmap having width to hold 5 star.png image:
    Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth() * 7, myBitmap.getHeight(), Bitmap.Config.RGB_565);

    Canvas tempCanvas = new Canvas(tempBitmap);

    // Draw the image bitmap into the cavas:
    tempCanvas.drawBitmap(myBitmap, 0, 0, null);        // FROM 0 TO 1
    tempCanvas.drawBitmap(myBitmap, (float) (myBitmap.getWidth() * 1.5), 0, null);       // FROM 1.5 TO 2.5
    tempCanvas.drawBitmap(myBitmap, (float) ( myBitmap.getWidth() * 3), 0, null);        // FROM 3 TO 4
    tempCanvas.drawBitmap(myBitmap, (float) (myBitmap.getWidth() * 4.5), 0, null);       // FROM 4.5 TO 5.5
    tempCanvas.drawBitmap(myBitmap, (float) (myBitmap.getWidth() * 6), 0, null);       // FROM 6 TO 7


    return tempBitmap;

}

它的工作非常精细,唯一的问题是在一个 chef_hat_ok_resize.png 图像与下一个图像之间的空间中,空白区域呈现深灰色。

我希望它具有与布局背景相同的颜色(白色)。

我认为这可能取决于这一行:

Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth() * 7, myBitmap.getHeight(), Bitmap.Config.RGB_565);

为什么呢?我错过了什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

方法1

drawBitmap来电之前,请插入

tempCanvas.drawColor(Color.WHITE);

您看到的背景颜色只是黑色,这是将此类型的空白新位图初始化为(全零)。

方法2

使用支持透明度的位图配置:

Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth() * 7, myBitmap.getHeight(), Bitmap.Config.ARGB_8888);

在这种情况下,位图将初始化为透明黑色(全部为零),其后面的任何内容都将显示在未绘制图标的位置。

两种方法的区别在于透明度需要带有alpha通道的位图。首选哪种方法取决于您的应用程序的其他详细信息。

例如,

RGB_565ARGB_8888更紧凑(但支持透明度的ARGB_4444也是如此)。

使用透明度也会降低动画效果,因为需要更频繁地重新绘制部分覆盖的视图。