【发布时间】:2018-09-13 07:33:21
【问题描述】:
我有一个显示在ImageView 中的位图,我希望能够将图像的一定比例设为黑白,并让另一部分保留它的颜色。例如,如果 60% 是目标百分比,则图像将如下所示:。谢谢。
【问题讨论】:
标签: java android graphics colors bitmap
我有一个显示在ImageView 中的位图,我希望能够将图像的一定比例设为黑白,并让另一部分保留它的颜色。例如,如果 60% 是目标百分比,则图像将如下所示:。谢谢。
【问题讨论】:
标签: java android graphics colors bitmap
我在
ImageView中显示了一个位图,我希望能够 使图像的一定比例黑白,并具有 其他部分保留它的颜色。例如,如果 60% 是目标 百分比。
似乎(从您的图像中)您的意思是monochrome(即greyscale),而不是黑白的。
这样的事情应该可以做到(测试ok.):
void doIt(ImageView image)
{
//get bitmap from your ImageView (image)
Bitmap originalBitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
int height = originalBitmap.getHeight();
int fortyPercentHeight = (int) Math.floor(height * 40.0 / 100.0);
//create a bitmap of the top 40% of image height that we will make black and white
Bitmap croppedBitmap = Bitmap.createBitmap(originalBitmap, 0, 0, originalBitmap.getWidth() , fortyPercentHeight );
//make it monochrome
Bitmap blackAndWhiteBitmap = monoChrome(croppedBitmap);
//copy the monochrome bmp (blackAndWhiteBitmap) to the original bmp (originalBitmap)
originalBitmap = overlay(originalBitmap, blackAndWhiteBitmap);
//set imageview to new bitmap
image.setImageBitmap(originalBitmap );
}
Bitmap monoChrome(Bitmap bitmap)
{
Bitmap bmpMonochrome = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmpMonochrome);
ColorMatrix ma = new ColorMatrix();
ma.setSaturation(0);
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(ma));
canvas.drawBitmap(bitmap, 0, 0, paint);
return bmpMonochrome;
}
Bitmap overlay(Bitmap bmp1, Bitmap bmp2)
{
Bitmap bmp3 = bmp1.copy(Bitmap.Config.ARGB_8888,true);//mutable copy
Canvas canvas = new Canvas(bmp3 );
canvas.drawBitmap(bmp2, new Matrix(), null);
return bmp3 ;
}
【讨论】:
croppedBitmap needs to be the bottom 60%. It's all about the co-ordinates.I will start you off BitmapcroppedBitmap = Bitmap.createBitmap(originalBitmap, 0, fortyPercentHeight, originalBitmap .getWidth() , originalBitmap.getHeight());`