Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Drawable在转换为位图后丢失颜色过滤器_Android_Bitmap_Drawable_Colorfilter - Fatal编程技术网

Android Drawable在转换为位图后丢失颜色过滤器

Android Drawable在转换为位图后丢失颜色过滤器,android,bitmap,drawable,colorfilter,Android,Bitmap,Drawable,Colorfilter,我试图添加一个颜色文件在一个可绘制的,然后在位图转换它。问题是,当将可绘制文件转换为位图时,它会丢失其颜色过滤器。我在imageview中使用了可绘制文件,其具有颜色过滤器,但在imageview中使用位图不会产生任何颜色效果。为什么会这样?提前谢谢 使用画布将可绘制的内容点放到位图上: Canvas canvas; Drawable drawable = <yourDrawable created from wherever>; Bitmap bmp = &

我试图添加一个颜色文件在一个可绘制的,然后在位图转换它。问题是,当将可绘制文件转换为位图时,它会丢失其颜色过滤器。我在imageview中使用了可绘制文件,其具有颜色过滤器,但在imageview中使用位图不会产生任何颜色效果。为什么会这样?提前谢谢

使用画布将可绘制的内容点放到位图上:

    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);
Canvas;
可拉伸=;
位图bmp=
//使用画布将可绘制的图形点放到位图上
画布=新画布(bmp);
可绘制。绘制(画布);

我也遇到了同样的问题,我终于解决了

我们需要做下面的事情来获得应用了颜色过滤器的位图

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

我也面临同样的问题,最终找到了解决办法。 Drawable可以有多个状态,因此您可能绘制了错误的状态

在绘制之前,应将其切换到正确的模式:

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);

可能重复:你到底想做什么?您正在尝试将可绘制回位图。向我们显示您的代码。我想向绘图表添加颜色过滤器并将其转换为位图。您得到解决方案了吗?使用了此代码,但结果不是预期的。我需要与颜色过滤器应用在绘图位图。