资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Android开发中如何实现图片灰阶显示-创新互联

这篇文章将为大家详细讲解有关Android开发中如何实现图片灰阶显示,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联公司主营昭阳网站建设的网络公司,主营网站建设方案,app开发定制,昭阳h5小程序开发搭建,昭阳网站营销推广欢迎昭阳等地区企业咨询

   灰阶显示图片的典型应用就是用户头像,如用户在线头像显示彩色(原图),不在线显示灰色(黑白图)。总结一点就是更加一张原始图片来通过颜色的过滤处理计算得到不同显示效果的图片。这方法的API主要位于:android.

    使用上文中提到的“三种算法转换彩色灰阶”一文中提到的灰阶计算方法产生的黑白图片显示效果如下图:

  Android开发中如何实现图片灰阶显示

  Android开发中如何实现图片灰阶显示

   说明:通过Use Matrix是使用Android的ColorMatrix和ColorFilter实现,其中设置ColorMatrix的setSaturation(float sat)饱和度设置为0时颜色过滤之后显示灰阶,android.graphics.ColorMatrix的内部实现和具体RGB颜色权重值近似等于图中BT709中的权重。

  代码示例(依赖此文中附加的灰阶计算方法封装类)


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grayscale);
        ButterKnife.bind(this);

        BitmapDrawable bd = (BitmapDrawable) Original_ImageView.getDrawable();
        Bitmap bitmap = bd.getBitmap();
        Log.d(TAG, " w=" + bitmap.getWidth() + ", h=" + bitmap.getHeight() + ", c=" + bitmap.getConfig().toString());

        //0 BT709
        Bitmap matrix = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(matrix);
        Paint paint = new Paint();
        ColorMatrix colorMatrix = new ColorMatrix();
        //传入一个大于1的数字将增加饱和度,而传入一个0~1之间的数字会减少饱和度。0值将产生一幅灰度图像
        //Android ColorMatrix 默认的灰阶计算采用下面的BT709标准
        colorMatrix.setSaturation(0f);
        ColorMatrixColorFilter colorMatrixColorFilter = new ColorMatrixColorFilter(colorMatrix);
        paint.setColorFilter(colorMatrixColorFilter);
        canvas.drawBitmap(bitmap, 0f, 0f, paint);
        Matrix_ImageView.setImageBitmap(matrix);

        //原始图片
        Bitmap sunflower = XUtils.BitmapUtil.decodeMutableBitmapFromResourceId(this, R.drawable.sunflower);

        //1
        Bitmap lightness = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.Lightness);
        Lightness_ImageView.setImageBitmap(lightness);

        //2
        Bitmap average = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.Average);
        Average_ImageView.setImageBitmap(average);

        //3
        Bitmap luminosity = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.Luminosity);
        Luminosity_ImageView.setImageBitmap(luminosity);

        //4
        Bitmap bt709 = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.BT709);
        BT709_ImageView.setImageBitmap(bt709);

        //5
        Bitmap rmy = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.RMY);
        RMY_ImageView.setImageBitmap(rmy);

        //6
        Bitmap y = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.Y);
        Y_ImageView.setImageBitmap(y);

    }

    public Bitmap grayScale(final Bitmap bitmap, XUtils.GrayScaleUtil.GrayScale grayScale) {
        if (null == bitmap || null == grayScale) {
            return null;
        }
        Bitmap rs = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(rs);
        Paint paint = new Paint();
        for (int x = 0, w = bitmap.getWidth(); x < w; x++) {
            for (int y = 0, h = bitmap.getHeight(); y < h; y++) {
                int c = bitmap.getPixel(x, y);
                int a = Color.alpha(c);
                int r = Color.red(c);
                int g = Color.red(c);
                int b = Color.blue(c);
                int gc = grayScale.grayScale(r, g, b);
                paint.setColor(Color.argb(a, gc, gc, gc));
                canvas.drawPoint(x, y, paint);
            }
        }
        return rs;
    }


关于“Android开发中如何实现图片灰阶显示”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:Android开发中如何实现图片灰阶显示-创新互联
网页地址:http://cdkjz.cn/article/cohdee.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220