如何在android中更改位图图像颜色?

新手上路,请多包涵

我正在开发一个 android 应用程序,在其中将图像设置为 imageview。现在编程我想更改位图图像颜色。假设我的图像最初是红色的,现在我需要将其更改为橙色。我怎样才能做到这一点?请帮忙。

这是我的代码。我设法改变了不透明度,但我不知道如何改变颜色。

   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView iv = (ImageView) findViewById(R.id.img);
        Drawable d = getResources().getDrawable(R.drawable.pic1);
        Bitmap mNewBitmap = ((BitmapDrawable)d).getBitmap();
        Bitmap nNewBitmap = adjustOpacity(mNewBitmap);
        iv.setImageBitmap(nNewBitmap);
    }

    private Bitmap adjustOpacity( Bitmap bitmap ) {
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        Bitmap dest = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        int[] pixels = new int[width * height];
        bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
        dest.setPixels(pixels, 0, width, 0, 0, width, height);
        return dest;
    }

原文由 user456118 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 566
2 个回答

我得到了一种解决方案。

     Bitmap sourceBitmap = BitmapFactory.decodeFile(imgPath);
    float[] colorTransform = {
            0, 1f, 0, 0, 0,
            0, 0, 0f, 0, 0,
            0, 0, 0, 0f, 0,
            0, 0, 0, 1f, 0};

    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.setSaturation(0f); //Remove Colour
    colorMatrix.set(colorTransform); //Apply the Red

    ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
    Paint paint = new Paint();
    paint.setColorFilter(colorFilter);

    Display display = getWindowManager().getDefaultDisplay();

    Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, (int)(display.getHeight() * 0.15), display.getWidth(), (int)(display.getHeight() * 0.75));

    image.setImageBitmap(resultBitmap);

    Canvas canvas = new Canvas(resultBitmap);
    canvas.drawBitmap(resultBitmap, 0, 0, paint);

原文由 user744881 发布,翻译遵循 CC BY-SA 3.0 许可协议

科特林

 private fun changeBitmapColor(oldBitmap: Bitmap, newColor: Int): Bitmap {
    val paint = Paint()
    val filter: ColorFilter = PorterDuffColorFilter(
        newColor,
        PorterDuff.Mode.SRC_IN
    )
    paint.colorFilter = filter

    val canvas = Canvas(oldBitmap)
    canvas.drawBitmap(oldBitmap, 0f, 0f, paint)
    return oldBitmap
}

这个功能 PorterDuff.Mode.SRC_IN 可以改变由于位图文件,看这个链接 https://developer.android.com/reference/android/graphics/PorterDuff.Mode 在此处输入图像描述

原文由 Mori 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题