Monodroid将绘制的Bitmap保存为jpg

时间:2012-08-16 15:40:23

标签: bitmap xamarin.android image jpeg

我正在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 个答案:

答案 0 :(得分: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中看到的位图。