如何在android中将位图设置为ARGB_8888?

时间:2014-08-29 22:05:00

标签: java android bitmap alpha

在我的android项目中,我从手机中的图像加载位图。然后我对它进行各种图像处理,如裁剪,调整大小,编辑像素值。

但问题是位图的格式不是ARGB_8888,所以它并没有真正存储alpha值。或者更确切地说,它始终保持在255。

如何以ARGB_8888格式加载位图?这是我加载和调整大小的代码。 如何在其中任何一种中指定格式?

由于

private static Bitmap resize(Bitmap img, int newW, int newH) throws IOException {
    Bitmap resizedImg = Bitmap.createScaledBitmap(img, newW, newH, false);
    img.recycle();

    Bitmap newresizedImg = resizedImg.copy(Bitmap.Config.ARGB_8888, true);
    resizedImg.recycle();


    Pixel initialPixel = Function.getPixel(0, 0, newresizedImg, null);
    int a = initialPixel.getColor().getAlpha(); // -> 255
    newresizedImg.setPixel(0, 0, Pixel.getTransparentColor().getRGB());
    initialPixel = Function.getPixel(0, 0, newresizedImg, null);
    int new_a = initialPixel.getColor().getAlpha(); // -> 255

    return newresizedImg;
}

private static Bitmap getImage(String from) throws IOException {
    File file = new File(from);

    if (file.exists()) {
        BitmapFactory.Options op = new BitmapFactory.Options(); 
        op.inPreferredConfig = Bitmap.Config.ARGB_8888; 
        Bitmap bufferedImage = BitmapFactory.decodeFile(from, op);
        return bufferedImage;
    }
    return null;
}

像素类

public static Color getTransparentColor() {
    return new Color(0, 0, 0, 0);
}

颜色等级

public int getRGB() {
    return ((A << 24) | 0xFF) + ((R << 16) | 0xFF) + ((G << 8) | 0xFF) + (B | 0xFF);
}

4 个答案:

答案 0 :(得分:4)

您可以使用此类功能复制您的位图(或者您知道,根据您的使用方式,不使用功能)

private Bitmap ARGBBitmap(Bitmap img) {
  return img.copy(Bitmap.Config.ARGB_8888,true);
}

答案 1 :(得分:0)

BitmapFactory.Options op = new BitmapFactory.Options(); op.inPreferredConfig = Bitmap.Config.ARGB_8888; bitmap = BitmapFactory.decodeFile(path, op);

来自:How can I specify the bitmap format (e.g. RGBA_8888) with BitmapFactory.decode*()?

答案 2 :(得分:0)

您可以使用:

public Bitmap highlightImage(Bitmap src) { 
    Bitmap bmOut = Bitmap.createBitmap(src.getWidth() + 96, src.getHeight() + 96, Bitmap.Config.ARGB_8888); 
    return bmOut;
}

答案 3 :(得分:0)

希望这有帮助,因为这对我有用。

Bitmap bitmap = Bitmap.createBitmap(marker.getMeasuredWidth(), marker.getMeasuredHeight(), Bitmap.Config.ARGB_8888);