gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:58:00 24 4
gpt4 key购买 nike

我正在开发一个 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;
}

最佳答案

我尝试了 Josip 的答案,但不管偏移参数是 1 还是 0 都对我不起作用 - 绘制的位图只是以原始颜色显示。

但是,这确实有效:

// You have to copy the bitmap as any bitmaps loaded as drawables are immutable
Bitmap bm = ImageLoader.getInstance().loadImageSync("drawable://" + drawableId, o)
.copy(Bitmap.Config.ARGB_8888, true);

Paint paint = new Paint();
ColorFilter filter = new PorterDuffColorFilter(ContextCompat.getColor(this, R.color.COLOR_1_DARK), PorterDuff.Mode.SRC_IN);
paint.setColorFilter(filter);

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

更新 1

虽然上述方法效果很好并且在很多情况下都很有用,但如果您只想更改操作所做的 ImageView 可绘制对象的主要颜色,您可以使用:

imgView.setColorFilter(ContextCompat.getColor(this, R.color.COLOR_1_DARK));

如果您需要更大的灵 active ,或者这不能达到预期的效果,可以使用过载来更改 PorterDuff Mode直到你得到你想要的:

imgView.setColorFilter(ContextCompat.getColor(this, R.color.COLOR_1_DARK), PorterDuff.Mode.SRC_ATOP);

更新 2

我最近遇到的另一个很好的用例是自定义 Google map v2 标记图标的外观。为了使用 2 个图形来允许(例如)标记上的小/大图标,而且通过动态更改它们的颜色,还可以在这 2 个图形上使用一系列颜色。就我而言,我是在 ClusterRenderer 中执行此操作的。因为标记也被聚集在一起,但这可以以相同的方式与常规 map 标记一起使用:

@Override
protected void onBeforeClusterItemRendered(MyClusterItem item, MarkerOptions markerOptions) {
try {
int markerColor = item.getColor();

Bitmap icon;

if (item.isFeatured()) {
// We must copy the bitmap or we get an exception "Immutable bitmap passed to Canvas constructor"
icon = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon_marker_large).copy(Bitmap.Config.ARGB_8888, true);
} else {
// We must copy the bitmap or we get an exception "Immutable bitmap passed to Canvas constructor"
icon = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon_marker_small).copy(Bitmap.Config.ARGB_8888, true);
}

Paint paint = new Paint();
ColorFilter filter = new PorterDuffColorFilter(ContextCompat.getColor(context, markerColor), PorterDuff.Mode.SRC_IN);
paint.setColorFilter(filter);

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

markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
} catch (Exception ex) {
ex.printStackTrace();
}
}

关于android - 如何在android中更改位图图像颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5699810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com