我目前有以下代码来获取一个Bitmap对象,剥离颜色,然后将其变为红色,但是我需要将图像的较暗元素变暗,此时它就像是有人放了一部红色电影在图像上,这几乎是我想要的,但需要黑色更暗:
Bitmap sourceBitmap = BitmapFactory.decodeFile(imgPath);
float[] colorTransform = {
0, 1f, 0, 0, 0,
0, 0, 0f, 0, 0,
0, 0, 0, 0f, 0,
0, 0, 0, 1f, 0};
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(0f); //Remove Colour
colorMatrix.set(colorTransform); //Apply the Red
ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
Paint paint = new Paint();
paint.setColorFilter(colorFilter);
Display display = getWindowManager().getDefaultDisplay();
Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, (int)(display.getHeight() * 0.15), display.getWidth(), (int)(display.getHeight() * 0.75));
image.setImageBitmap(resultBitmap);
Canvas canvas = new Canvas(resultBitmap);
canvas.drawBitmap(resultBitmap, 0, 0, paint);
答案 0 :(得分:0)
c = 2;//this will boost your contrast by 2x thus deepening the black (and lightning the white). I'm not sure why at 0 you have anything but black... maybe I don't understand the matrix as well as I think I do... I thought 1 (in place of my c) gets you the original colors.
Anyway... give that a whirl.
float[] colorTransform = {
c, 1f, 0, 0, 0,
0, c, 0f, 0, 0,
0, 0, c, 0f, 0,
0, 0, 0, 1f, 0};
答案 1 :(得分:0)
彩色矩阵中前三个原始的最后一列改变图像的亮度。它在[-255 ... 255]之间变化。 -255将为您提供黑色图像,255将使其为白色。 这种方法可以改变你的对比度。比明亮的物体会变得更加明亮,黑暗更暗。比你可以设置你的亮度,以满足你的需求。对比度在[-1 ... 1]之间变化。
private static void setContrast(ColorMatrix cm, float contrast) {
float scale = contrast + 1.f;
float translate = (-.5f * scale + .5f) * 255.f;
cm.set(new float[] {
scale, 0, 0, 0, translate,
0, scale, 0, 0, translate,
0, 0, scale, 0, translate,
0, 0, 0, 1, 0 });
}