2017-05-23 86 views
0

我有ImageView的子類,我可以在其上繪製(筆,矩形,橢圓等),並添加EditText子視圖(可拖動和可以旋轉)。Xamarin Android在位圖上繪製EditText

問題是我想獲得最終圖像我不確定如何將這些EditText合併到新圖像中,因爲所有工具都直接在畫布上繪圖,而最終需要繪製EditText文本,因爲他們需要在用戶單擊Save之前可拖動和變化。

經過許多不同的方法後,這一個是最正確的,但如果文本旋轉一定程度,它不起作用。

public Bitmap GetFinalBitmap() 
    { 
     this.DrawingCacheEnabled = false; 
     this.DrawingCacheEnabled = true; 

     var finalImage = Bitmap.CreateBitmap(GetDrawingCache(true)); 
     foreach (var item in this.pathLists) 
     { 
      if (item.TextView != null) 
      { 
       item.TextView.BuildDrawingCache(true); 
       var txt = item.TextView.GetDrawingCache(true); 
       finalImage = Overlay(finalImage, txt, item.TextView.GetX(), item.TextView.GetY()); 
      } 
     } 

     return finalImage; 
    } 

    public Bitmap Overlay(Bitmap bmp1, Bitmap bmp2, float x, float y) 
    { 
     Bitmap bmOverlay = Bitmap.CreateBitmap(bmp1.Width, bmp1.Height, bmp1.GetConfig()); 
     Canvas canvas = new Canvas(bmOverlay); 
     canvas.DrawBitmap(bmp1, new Matrix(), null); 
     canvas.DrawBitmap(bmp2, x, y, null); 
     return bmOverlay; 
    } 

任何幫助,將不勝感激(溶液的更新或有關如何使用正確的座標上ImageView's位圖繪製EditText也許新方法)。

回答

0

基本上我所要做的就是使用矩陣繪製第二個位圖(其中一個EditText)。這裏是更新後的代碼,即使對於旋轉EditText也適用。

public Bitmap Overlay(Bitmap bmp1, Bitmap bmp2, float x, float y, float rotation) 
    { 
     Bitmap bmOverlay = Bitmap.CreateBitmap(bmp1.Width, bmp1.Height, bmp1.GetConfig()); 
     Canvas canvas = new Canvas(bmOverlay); 
     canvas.DrawBitmap(bmp1, new Matrix(), null); 
     var matrix = new Matrix(); 
     matrix.Reset(); 
     if (rotation > 0) 
      matrix.PostRotate(rotation, bmp2.Width/2, bmp2.Height/2); 
     matrix.PostTranslate(x, y);  
     canvas.DrawBitmap(bmp2, matrix, null); 
     return bmOverlay; 
    }