1

画面上の署名をキャプチャし、jpg ファイルに保存するプログラムを Monodroid で作成しています。署名をうまくキャプチャできますが、ファイルに保存しようとすると問題が発生します。ユーザーが画像を保存したい場合、以下のコードが実行されます。

 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);

問題は、画像エディターでファイルを開くと、すべての寸法は問題ありませんが、完全に黒です。次のようになります。

サイン

ちなみに、これは png 形式を使用すると問題なく動作するようです。画像を A​​ndroid デバイスに保存していますが、Windows PC で表示しています。

ありがとう。

4

1 に答える 1

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 内に表示されるビットマップが返されます。

于 2012-08-21T15:24:14.193 に答える