繁体   English   中英

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

[英]Android - Compress Bitmap with applied PorterDuffColorFilter

我有一个应用了PorterDuffColorFilterBitmap 但是,当我将此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();
}

您不能ColorFilter Bitmap上设置ColorFilter 在您的代码中,将ColorFilter设置在BitmapDrawable 这样做不会更改基础的Bitmap实例。 为了解决您的问题,您将必须创建一个新的Bitmap ,将其附加到Canvas上,然后使用具有所需ColorFilterPaint在画布上绘制原始位图。 这是一个例子:

// 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”保存到文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM