首页 > 解决方案 > 无法使用吸管工具从位图中选择颜色(android studio/java)

问题描述

我正在 android studio 中制作绘图应用程序,但我遇到了互联网搜索无法解决的问题。我有一个工具菜单,滴管就是其中之一。我需要以下功能:

这是我为该工具制作的方法,但它有问题:(注释行是我也尝试过的另一种方法,它产生相同的结果)

    public void dropSelectColor(View v){
           //        this.setDrawingCacheEnabled(true);
        
                    v.setOnTouchListener(new OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
        
           //                Bitmap bitmapTemp = getDrawingCache(true);
           //                int color = bitmapTemp.getPixel((int)v.getX(), (int)v.getY());
        

           //get the color from the currently used global bitmap that is painted on
                            int color = bitmap.getPixel((int)v.getX(), (int)v.getY());
                            Toast.makeText(getContext(),"Color : " + color,Toast.LENGTH_SHORT).show();
                            setDrawingColor(color);

          //invalidate the listener so the next touch will paint on the screen again
                            v.setOnTouchListener(null);

                            return true;
                        }
                    });
                }

上述方法执行以下操作:

我使用的位图是一个在这里初始化的全局变量:

    public void init(DisplayMetrics metrics, Bitmap bitmap) {
            int height = metrics.heightPixels;
            int width = metrics.widthPixels;
            if (bitmap == null) {

// create a new bitmap
                this.bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            } else {
// load a bitmap from image in the gallery
                this.bitmap = Bitmap.createBitmap(bitmap);
            }
    
            paintLine = new Paint();
            paintLine.setAntiAlias(true);
            paintLine.setDither(true);
            paintLine.setStrokeJoin(Paint.Join.ROUND);
            paintLine.setStyle(Paint.Style.STROKE);
            paintLine.setColor(Color.BLACK);
            paintLine.setStrokeWidth(1);
            paintLine.setStrokeCap(Paint.Cap.ROUND);
            paintLine.setXfermode(null);
            paintLine.setAlpha(0xff);
    
            path = new ArrayList<>();
            undo = new ArrayList<>();
        }

有什么我想念的吗?这仍然是新的,虽然我可以使用许多功能来工作,但这个给我带来了一些挑战。我在 Stack 上看到了很多关于这个主题的问题,但我找不到有效的解决方案。

标签: javaandroidcanvasbitmapdrawing

解决方案


推荐阅读