【问题标题】:Android: How to make a percentage of a bitmap black and white, retaining color in the rest?Android:如何使位图的百分比为黑白,其余部分保留颜色?
【发布时间】:2018-09-13 07:33:21
【问题描述】:

我有一个显示在ImageView 中的位图,我希望能够将图像的一定比例设为黑白,并让另一部分保留它的颜色。例如,如果 60% 是目标百分比,则图像将如下所示:。谢谢。

【问题讨论】:

    标签: java android graphics colors bitmap


    【解决方案1】:

    我在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 ;
    }
    

    【讨论】:

    • 这很好用,我以前从未使用过画布,所以我很高兴有机会了解它们。谢谢。
    • 欢迎您@KOG。作为一个新用户,这个网站可能有点吓人。 (与其他网站不同,我们有相当严格的质量控制)请花点时间查看site your。 (您会因为查看它而获得徽章!)享受 StackOverflow。准备好对您的问题进行残酷的分析!这是一个主要受用户监控的网站,因此在涉及人员时,会发生随机事情,如果您有投诉,请将其提交给版主(标志)。记住对你喜欢或不喜欢的东西投票(很多),这对质量控制很重要。狩猎愉快。
    • 我怎样才能扭转这种局面?那么,从黑白图像开始,图像的彩色版本是否填满了前 40%?我似乎无法让它工作。
    • 嗯,你好像没看懂代码,你想要的很简单,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());`
    • 我希望原始位图现在是黑白的。我稍微修改了你的代码,所以我单独发了一个帖子。请在此处查看:stackoverflow.com/questions/50124575/…
    猜你喜欢
    • 2013-09-16
    • 2021-08-07
    • 2019-07-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2015-06-14
    • 2020-05-29
    • 2019-04-06
    相关资源
    最近更新 更多