我有一个类使用颜色矩阵在ImageView上添加图像效果.我有几种颜色矩阵用于对比度,曝光,温度和饱和度.例如:
public static Bitmap changeContrast(Bitmap bmp, float contrast) { ColorMatrix cm = new ColorMatrix(new float[] { contrast, 0, 0, 0, 0, 0, contrast, 0, 0, 0, 0, 0, contrast, 0, 0, 0, 0, 0, 1, 0 }); return getBitmapFromColorMatrix(cm, bmp); }
现在我的问题是,图像的锐化.这些似乎没有颜色矩阵.请帮忙.
我尝试使用此处的代码锐化图像,但处理时间太长,我不知道应该将哪些有效值传递给方法的权重参数sharpenImage(Bitmap src, double weight)
.
可能为时已晚,但我只是想分享一种快速的方式来锐化图像.
public static Bitmap doSharpen(Bitmap original, float[] radius) { Bitmap bitmap = Bitmap.createBitmap( original.getWidth(), original.getHeight(), Bitmap.Config.ARGB_8888); RenderScript rs = RenderScript.create(yourContext); Allocation allocIn = Allocation.createFromBitmap(rs, original); Allocation allocOut = Allocation.createFromBitmap(rs, bitmap); ScriptIntrinsicConvolve3x3 convolution = ScriptIntrinsicConvolve3x3.create(rs, Element.U8_4(rs)); convolution.setInput(allocIn); convolution.setCoefficients(radius); convolution.forEach(allocOut); allocOut.copyTo(bitmap); rs.destroy(); return bitmap; }
以下是我创建的3种不同的锐化类型:
// low private static void loadBitmapSharp() { float[] sharp = { -0.60f, -0.60f, -0.60f, -0.60f, 5.81f, -0.60f, -0.60f, -0.60f, -0.60f }; //you call the method above and just paste the bitmap you want to apply it and the float of above yourbitmap = doSharpen(getbitmap, sharp)); } // medium private static void loadBitmapSharp1() { float[] sharp = { 0.0f, -1.0f, 0.0f, -1.0f, 5.0f, -1.0f, 0.0f, -1.0f, 0.0f }; //you call the method above and just paste the bitmap you want to apply it and the float of above yourbitmap = doSharpen(getbitmap, sharp)); } // high private static void loadBitmapSharp2() { float[] sharp = { -0.15f, -0.15f, -0.15f, -0.15f, 2.2f, -0.15f, -0.15f, -0.15f, -0.15f }; //you call the method above and just paste the bitmap you want to apply it and the float of above yourbitmap = doSharpen(getbitmap, sharp)); }
您也可以将它们直接应用到没有空白的位图,它的快速简单并且有很好的结果!