2014-11-22 36 views
1

我想弄清楚如何简单地在毕加索中设置的图像上绘制一条线。我发现,如果我只是设置图像,给定一个URI,与毕加索并尝试使用画漆给它的以下内容:在毕加索设置的ImageView上绘制一条线

canvas = new Canvas(bitmap); 
image.draw(canvas); 
topEdge = new Paint(); 
topEdge.setColor(context.getResources().getColor(R.color.blue)); 
topEdge.setStrokeWidth(5); 
canvas.drawLine(c1.getX(), c1.getY(), c2.getX(), c2.getY(), topEdge); 

然后我得到一个崩溃说,位图需要是可变的第一。所以我在代码上面加了这个:

Bitmap workingBitmap = ((BitmapDrawable) image.getDrawable()).getBitmap(); 
Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true); 

然后改用new Canvas(mutableBitmap)来创建画布。这消除了崩溃,但没有任何东西正在绘制。我相信这是因为我的毕加索之前正在设置图像,所以现在我需要用这个新的可变位图重新设置毕加索。问题是这个代码在Picasso的onSuccess()回调中。我能做些什么来允许Paint通过毕加索在图像上绘制?

回答

3

只要按照下面的步骤:

  1. 写自己的类扩展的类转型象下面这样:

    class DrawLineTransformation implements Transformation { 
    
        @Override 
        public String key() { 
        // TODO Auto-generated method stub 
        return "drawline"; 
        } 
    
        @Override 
        public Bitmap transform(Bitmap bitmap) { 
        // TODO Auto-generated method stub 
        synchronized (DrawLineTransformation.class) { 
         if(bitmap == null) { 
         return null; 
         } 
         Bitmap resultBitmap = bitmap.copy(bitmap.getConfig(), true); 
         Canvas canvas = new Canvas(resultBitmap); 
         Paint paint = new Paint(); 
         paint.setColor(Color.BLUE); 
         paint.setStrokeWidth(10); 
         canvas.drawLine(0, resultBitmap.getHeight()/2, resultBitmap.getWidth(), resultBitmap.getHeight()/2, paint); 
         bitmap.recycle(); 
         return resultBitmap; 
        } 
        } 
    } 
    

    2,添加到RequestCreator与Picasso.load创建的转换()函数如下所示:

    Picasso picasso = Picasso.with(getApplicationContext()); 
    DrawLineTransformation myTransformation = new DrawLineTransformation(); 
    picasso.load("http://www.baidu.com/img/bdlogo.png").transform(myTransformation).into(imageview); 
    

这就是你需要做的所有步骤,只是享受!