2012-08-16 77 views
1

我在MonoDroid的編寫一個程序來捕捉在屏幕上簽名,然後將其保存爲JPG文件。我可以捕獲簽名,當我嘗試將其保存到文件時,問題就出現了。當用戶想要保存圖像,下面的代碼運行:MonoDroid的保存繪製位圖到JPG

void buttonSave_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!m_locked) 
      { 

       MemoryStream stream = new MemoryStream(); 
       m_bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream);                   
       byte[] byteArray = stream.GetBuffer(); 

       //string toSave = Convert.ToBase64String(byteArray); 

       //save it to file (test); 
       string path = "/mnt/sdcard/TestSig/"; 
       if (!Directory.Exists(path)) 
        Directory.CreateDirectory(path); 

       string file = path + "signature.jpg"; 


       FileOutputStream fo = new FileOutputStream(file); 

       fo.Write(byteArray); 
      } 
     } 
     catch (Exception ex) 
     { 
      //display message 
     } 
    } 

的ImageView的該簽名被繪製到設置從而(在活動的OnCreate法):

 m_imageView = (ImageView)FindViewById(Resource.Id.imageView); 

     m_imageView.SetBackgroundColor(Android.Graphics.Color.White); 

     Display d = WindowManager.DefaultDisplay; 

     m_dw = d.Width; 
     m_dh = d.Height; 
     m_bitmap = Bitmap.CreateBitmap((int)m_dw, (int)(m_dh * 0.5), Bitmap.Config.Argb8888); 



     m_canvas = new Canvas(m_bitmap); 
     m_paint = new Paint(); 
     m_paint.Color = Color.Black; 
     m_imageView.SetImageBitmap(m_bitmap); 


     m_imageView.SetOnTouchListener(this); 

問題是當我在圖像編輯器中打開文件時,所有尺寸都可以,但它完全是黑色的。它應該是這個樣子:

Signature

通過這似乎當使用PNG格式的工作確定的方式。我將圖像保存在Android設備上,但在Windows PC上查看。

謝謝。

回答

1

在你m_imageView的設置,使繪圖緩存(並設置它的背景色):

m_imageView.DrawingCacheEnabled = true; 
m_imageView.DrawingCacheBackgroundColor = Color.White; 

然後用緩存的內容填充的MemoryStream:

m_imageView.GetDrawingCache(false).Compress(Bitmap.CompressFormatJpeg,100, stream); 

的呼籲.GetDrawingCache()將返回你在m_imageView中看到的內容的位圖。

+0

謝謝湯姆,它工作得很好! – 2012-08-22 09:23:15