android 怎样获取图像触摸位置的rgb值

android 怎样获取图像触摸位置的rgb值,第1张

基本介绍

思路:

首先需要一张,这里由于我的强迫症,我没有写死,而是去图库选择一张照片。

获取的宽、高,为了精度,这里一定要设置BitmapFactoryOptions,通过坐标的形式来获取RGB值,也就是说把一张通过坐标分为若干个小点。 

上代码:

private Bitmap comp(Bitmap image) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        imagecompress(BitmapCompressFormatJPEG, 100, baos);

        if (baostoByteArray()length / 1024 > 1024) {

            //判断如果大于1M,进行压缩避免在生成(BitmapFactorydecodeStream)时溢出

            baosreset();//重置baos即清空baos

            imagecompress(BitmapCompressFormatJPEG, 50, baos);

            //这里压缩50%,把压缩后的数据存放到baos中

        }

        ByteArrayInputStream isBm = new ByteArrayInputStream(baostoByteArray());

        BitmapFactoryOptions newOpts = new BitmapFactoryOptions();

        //开始读入,此时把optionsinJustDecodeBounds 设回true了

        newOptsinJustDecodeBounds = true;

        Bitmap bitmap = BitmapFactorydecodeStream(isBm, null, newOpts);

        newOptsinJustDecodeBounds = false;

        int w = newOptsoutWidth;

        int h = newOptsoutHeight;

        //现在主流手机比较多是800500分辨率,所以高和宽我们设置为

        float hh = 800f;//这里设置高度为800f

        float ww = 500f;//这里设置宽度为500f

        //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可

        int be = 1;//be=1表示不缩放

        if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放

            be = (int) (newOptsoutWidth / ww);

        } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放

            be = (int) (newOptsoutHeight / hh);

        }

        if (be <= 0)

            be = 1;

        newOptsinSampleSize = be;//设置缩放比例

        //重新读入,注意此时已经把optionsinJustDecodeBounds 设回false了

        isBm = new ByteArrayInputStream(baostoByteArray());

        bitmap = BitmapFactorydecodeStream(isBm, null, newOpts);

        return compressImage(bitmap);//压缩好比例大小后再进行质量压缩

    }

重点:一定要设置BitmapFactoryOptions newOpts = new BitmapFactoryOptions();否则坐标获取不准确

通过getPixel(x, y)方法通过坐标拿到我们需要的色值即可,比较简单。

iv_imagesetOnTouchListener(new OnTouchListener() {

            @Override

            public boolean onTouch(View v, MotionEvent event) {

                int x = (int) eventgetX();

                int y = (int) eventgetY();

                if (eventgetAction() == MotionEventACTION_UP) {

                    int color = bitmapgetPixel(x, y);

                    // 如果你想做的更细致的话 可以把颜色值的R G B 拿到做响应的处理

                    int r = Colorred(color);

                    int g = Colorgreen(color);

                    int b = Colorblue(color);

                    int a = Coloralpha(color);

                    Logi(TAG, "r=" + r + ",g=" + g + ",b=" + b);

                    tv_rgbsetText("a=" + a + ",r=" + r + ",g=" + g + ",b="

                            + b);

                    btnColorsetTextColor(Colorrgb(r, g, b));

                }

                return true;

            }

        });

COLORREF clr = ::GetPixel(hDC, pointx, pointy); //获取当前鼠标点像素值

m_red = GetRValue(clr);

m_bluee = GetBValue(clr);

m_green = GetBValue(clr);

以上就是关于android 怎样获取图像触摸位置的rgb值全部的内容,包括:android 怎样获取图像触摸位置的rgb值、如何用c++编程实现提取给定图像中任意一点的RGB颜色值、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9344683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存