1

私はこの問題を理解していません。これは通常これまで機能していたからです。この方法は、canvasと呼ばれるpictureBoxに画像を保存するためのクリックの反応です。画像をキャンバスにロードしてから、いくつかの編集を行います。次に、画像を保存します。画像をロードする前にprintScreenButtonをクリックすると機能しますが、画像をロードすると機能しなくなります。どこに問題があるのでしょうか?

private void printScreenButton_Click(object sender, EventArgs e)
      {
          canvas.Image.Save("name.png", System.Drawing.Imaging.ImageFormat.Png); 
      }

編集:
動作== name.pngという名前のファイルが作成され
ます動作しません==name.pngという名前のファイルが作成されません


画像を描画するためのコード==画像ボックスを配置する

` private void drawTransformedBitmap(Matrix transformationMatrix) 
        {
            Graphics g = Graphics.FromImage(canvasBitmapShow); //prepare graphics

            if (antialiasing)
            {
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
            }
            else 
            {
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
            }

            g.Clear(Color.White); //clear canvas

            g.Transform.Reset(); //clear transformations
            g.Transform = transformationMatrix; //set transformations from transformationMatrix
            g.DrawImage(canvasBitmapTarget, 0, 0); //draw from Bitmap called canvasBitmapTarget

            canvas.Invalidate(); //refresh canvas
        }`

最初の初期化:

canvasBitmapShow = new Bitmap(canvas.Width, canvas.Height);
canvasBitmapSource = new Bitmap(canvas.Width, canvas.Height);
canvasBitmapTarget = new Bitmap(canvas.Width, canvas.Height);
canvasBitmapBackup = new Bitmap(canvas.Width, canvas.Height);

canvas.Image = canvasBitmapShow; //set the Image
4

2 に答える 2

3

canvas.Image.Save( "name.png"、System.Drawing.Imaging.ImageFormat.Png);

このようなコードは絶対に記述しないでください。ファイルの絶対パスを指定しないでください。これにより、ファイルの実際の場所は、プログラムの現在の作業ディレクトリに大きく依存します。Environment.CurrentDirectoryの値。これは予期せず変更される可能性があり、RestoreDirectoryプロパティをtrueに設定せずにOpenFileDialogを使用することが例です。

例外が発生しない場合は、ファイルが保存されたことを確認できます。正確にどこに保存されたかは推測です。少なくともSaveFileDialogまたはEnvironment.GetFolderPath()のいずれかを使用して、予測可能なディレクトリ名を取得します。また、デフォルトの作業ディレクトリはユーザーのマシンでは機能しません。c:\programファイルに書き込むことはできません。

于 2012-06-12T14:56:13.170 に答える
1

画像を読み込むときは、OpenFileDialogを使用して、 CurrentDirectoryを変更し、この動作を防ぐためにRestoreDirectoryをtrueに設定したと思いますが、注意してください。ここでの回答によると、OS間で動作が異なる場合があります。

おそらく、問題を回避する最も簡単な方法は、SpecialFolderを使用してファイルを保存することです。

于 2012-06-12T14:54:29.783 に答える