我试图弄清楚如何在毕加索设置的图像上简单地画一条线。我发现,如果我只是使用Picasso设置给定URI的图像,然后尝试使用以下方法在其上绘画:

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)创建画布。这消除了崩溃,但是没有绘制任何内容。我相信这是因为我的毕加索以前设置过图像,所以现在我需要用这个新的可变位图重置毕加索。问题在于此代码位于毕加索的onSuccess()回调中。我该怎么做才能通过“毕加索”在图像上绘制“绘画”?

最佳答案

只需按照以下步骤操作:


编写您自己的类可扩展类Transformation,如下所示:

 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,将转换添加到使用Picasso.load()函数创建的RequestCreator中,如下所示:

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



这就是您需要做的所有步骤,尽情享受吧!

07-27 14:53