Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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上设置ColorFilter后如何保存Drawable_Android_Drawable_Colormatrixfilter - Fatal编程技术网

Android上设置ColorFilter后如何保存Drawable

Android上设置ColorFilter后如何保存Drawable,android,drawable,colormatrixfilter,Android,Drawable,Colormatrixfilter,为了将颜色过滤器应用于takePicure方法中的字节数组,我将其转换为Drawable。调用Drawable.setColorFilter后,我将其保存为图像文件。但是,颜色过滤器不适用于图像文件。在这种情况下,如何保存可绘制应用的颜色过滤器。这是我的密码 Camera.PictureCallback mPicture = new Camera.PictureCallback() { @Override public void onPictureTaken(by

为了将颜色过滤器应用于takePicure方法中的字节数组,我将其转换为Drawable。调用Drawable.setColorFilter后,我将其保存为图像文件。但是,颜色过滤器不适用于图像文件。在这种情况下,如何保存可绘制应用的颜色过滤器。这是我的密码

Camera.PictureCallback mPicture = new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] bytes, Camera camera) {
            mView.mRenderer.restartPreview();
            String storageDir = Environment.getExternalStorageDirectory().getAbsolutePath()
                    + "/" + Environment.DIRECTORY_DCIM + "/Camera";
            File dir = new File(storageDir);

            if (!dir.exists()) dir.mkdir();

            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            String path = storageDir + "/IMG_" + timeStamp + ".jpg";

            File file = new File(path);
            try {
                ColorMatrix matrix = new ColorMatrix(new float[] {
                        1, 0, 0, 0, mView.mRenderer.mTest,
                        0, 1, 0, 0, mView.mRenderer.mTest,
                        0, 0, 1, 0, mView.mRenderer.mTest,
                        0, 0, 0, 1, 0
                });

                Drawable image = new BitmapDrawable(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
                image.setColorFilter(new ColorMatrixColorFilter(matrix));
                Bitmap bitmap = ((BitmapDrawable)image).getBitmap();
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                byte[] bytedata = stream.toByteArray();

                FileOutputStream fos = new FileOutputStream(file);
                fos.write(bytedata);
                fos.flush();
                fos.close();

                Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                Uri uri = Uri.parse("file://" + path);
                intent.setData(uri);
                sendBroadcast(intent);
            }
            catch (Exception e) {
                Log.e("CheckLog", e.getMessage());
                return;
            }
        }
};

mView.mrender.mTest是一个由SeekBar控制的变量。提前感谢。

使用画布应用矩阵

Bitmap bitmap = Bitmap.createBitmap(original.getWidth(), 
original.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(
matrix));
canvas.drawBitmap(original, 0, 0, paint);

return bitmap;

使用画布应用矩阵

Bitmap bitmap = Bitmap.createBitmap(original.getWidth(), 
original.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(
matrix));
canvas.drawBitmap(original, 0, 0, paint);

return bitmap;

使用Drawabledraw方法在画布上绘制您的Drawable-使用新的CanvasBitMap创建它感谢您的建议。非常有帮助使用Drawabledraw方法在画布上绘制您的Drawable-使用新的CanvasBitMap创建它感谢您的建议。非常有帮助谢谢您的代码帮助我克服了这个问题:@皮尤斯非常感谢你,伙计,这正是我要找的汉克斯!您的代码帮助我克服了这个问题:@皮尤斯非常感谢你,伙计,这正是我想要的