gpt4 book ai didi

java - Android - 使用应用的 PorterDuffColorFilter 压缩位图

转载 作者:行者123 更新时间:2023-11-29 03:26:18 24 4
gpt4 key购买 nike

我有一个 Bitmap,上面应用了 PorterDuffColorFilter。但是,当我将此 Bitmap 压缩到文件时,PorterDuffColorFilter 消失了。我如何压缩我的 Bitmap 并且不丢失 PorterDuffColorFilter

这是我现在正在使用的一些代码:


public void PrepareFiles(Bitmap original_img)
{
try
{
Bitmap b = convert(original_img, 0xFFFF0000);

String path1 = "/sdcard/red.png";

File f1 = new File(path1);
if (!f1.exists()) {
f1.createNewFile();
}
else
{
f1.delete();
f1.createNewFile();
}

FileOutputStream fos1 = new FileOutputStream(path1);
b.compress(Bitmap.CompressFormat.PNG, 100, fos1);
b.recycle();
}
catch (Exception ex)
{
Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
}
}

public Bitmap convert(Bitmap src, int color)
{
BitmapDrawable temp = new BitmapDrawable(src);
temp.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.ADD));
return temp.getBitmap();
}

最佳答案

您不能在 Bitmap 上设置 ColorFilter。在您的代码中,您在 BitmapDrawable 上设置了 ColorFilter。这样做不会更改底层 Bitmap 实例。要解决您的问题,您必须创建一个新的 Bitmap,将 Canvas 附加到它并使用 Paint 在 Canvas 上绘制原始位图它具有所需的 ColorFilter。这是一个例子:

// The original bitmap
Bitmap src = ...;
// an empty bitmap with the same dimensions as the original one
Bitmap filteredBitmap = Bitmap.create(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(filteredBitmap);
Paint paint = new Paint(); // no need to set Paint.FILTER_BITMAP flag
paint.setColorFilter(colorFilter); // set the required color filter
canvas.drawBitmap(src, 0f, 0f, paint);

在此之后将“filteredBitmap”保存到一个文件中。

关于java - Android - 使用应用的 PorterDuffColorFilter 压缩位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823573/

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