2014-11-22 77 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); 
    

這就是你需要做的所有步驟,只是享受!