1

我不明白这个问题。因为这通常工作到现在。该方法是点击后的反应,用于将图像保存在称为画布的图片框上。我将图像加载到画布上,然后进行一些编辑。然后我想保存图像。如果我在加载图像之前单击 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 以防止这种行为,但请注意,根据此处的答案,显然它有时会在操作系统中表现不同

解决问题的最简单方法可能是使用SpecialFolder保存文件。

于 2012-06-12T14:54:29.783 回答