Drawable loses color filter after converting into bitmap

末鹿安然 提交于 2020-01-03 20:06:05

问题


I am trying to add a color filer in a drawable and then convert it in Bitmap. The problem is when convert the drawable into bitmap it loses it's color filter.I used drawable in imageview and its have the color filter but using bitmap in imageview doesn't have any color effect. Why this happen ? Thanks in advance.


回答1:


Use a canvas to blit the Drawable back onto a bitmap:

    Canvas canvas;
    Drawable drawable = <yourDrawable created from wherever>;
    Bitmap bmp = <your Bitmap which is the same width/height as the drawable>

    // blit the drawable onto the bitmap using a Canvas
    canvas = new Canvas(bmp);
    drawable.draw(canvas);

http://developer.android.com/guide/topics/graphics/2d-graphics.html




回答2:


I had the same problem and I figured it out finally!

We need to do following thing to get the bitmap with color filter applied on it.

image_view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(image_view.getDrawingCache());



回答3:


I've faced the same issue and finally found a solution. Drawable can have multiple states thus you might be drawing wrong state.

You should switch it to proper mode before drawing:

Drawable drawable = icon.loadDrawable(getContext());

        if (drawable == null) {
            return;
        }
        drawable.setState(new int[] {android.R.attr.state_enabled});

        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);


来源:https://stackoverflow.com/questions/33287510/drawable-loses-color-filter-after-converting-into-bitmap

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!