我有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();
}
答案 0 :(得分:4)
您无法在ColorFilter
上设置Bitmap
。在您的代码中,您要在ColorFilter
上设置BitmapDrawable
。这样做不会更改基础Bitmap
实例。要解决您的问题,您必须创建一个新的Bitmap
,附加一个Canvas
并使用Paint
在画布上绘制原始位图,该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);
。这是一个例子:
{{1}}
在此之后将'filteredBitmap'保存到文件中。