在没有显示文件对话框的情况下保存图像

本文关键字:情况下 保存 图像 对话框 显示文件 | 更新日期: 2023-09-27 18:30:16

我的程序会裁剪您从磁盘加载的图像并另存为两个jpg.文件。我一个接一个地使用了 2 个 ShowFileDialog,但我的教授说它应该以不同的方式工作。第一个显示文件对话框没关系,因为我们键入文件名并显示路径。第二个图像应该在没有 SFD 的情况下保存,但具有与上一个图像相同的路径和文件名,但带有前缀,例如。照片.jpg,照片1.jpg。在这里,我向你寻求帮助。它应该看起来像 [1]:http://scr.hu/5duf/04oep

这是我的代码:

        Boolean loaded = true;
        if (loaded)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "jpg(*.jpg)|*.jpg|bmp (*.bmp)|*.bmp| png(*.png) |*.png| gif(*.gif)|*.gif";
            string zapis = sfd.FileName;
            if (sfd.ShowDialog() == DialogResult.OK && sfd.FileName.Length > 0)
            {
                grafika = CropImage (new Bitmap(pictureBox1.Image, pictureBox1.Size), Obcinacz);
                Bitmap Crop1 = new Bitmap(grafika, new Size(SzerReal, WysReal));
                Crop1.Save(sfd.FileName, ImageFormat.Jpeg);
                zapisano = true;
            }
            /////////////////////////////////////////////////////////////////////////////////////////SECOND IMAGE

                try {
                    SzerAnalog = (int)Math.Round((float)SzerMM*300.0f/25.4f, 0); math.round
                    WysAnalog = (int)Math.Round((float)WysMM * 300.0f / 25.4f, 0);
                     }
                catch (Exception) { MessageBox.Show("Błędnie wpisane wartości. Spróbuj użyć innych wymiarów.", "Błąd03", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                try
                {
                    Bitmap grafika2 = new Bitmap(grafika, new Size(SzerAnalog, WysAnalog));
                    grafika2.SetResolution(300.0f, 300.0f);
                    Ark = grafika2;
                }
                catch (Exception) { MessageBox.Show("Zapis zdjęcia analogowego nie powiódł się. Spróbuj zmienić nazwę.", "Błąd04", MessageBoxButtons.OK, MessageBoxIcon.Error); }

            if (DialogResult.Yes == MessageBox.Show("Zdjęcie cyfrowe zostało zapisane. Czy chcesz przygotować arkusz do druku?",
                  "Wydruk", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
            {
               // btnOK = true; 
            }
            else return;
        }

        Arkusz.BackgroundImage = Ark;
        Arkusz.BackgroundImageLayout = ImageLayout.Tile;
    try
            {
                using (Bitmap compositionBmp = new Bitmap(Arkusz.Width, Arkusz.Height))
                {
                    Arkusz.DrawToBitmap(compositionBmp, Unvisible);
                    SaveFileDialog sfd3 = new SaveFileDialog();
                    sfd3.Filter = "jpg (.jpg)|*.jpg|bmp (.bmp)|*.bmp| png(*.png)|*.png| gif (*.gif)|*.gif";
                    compositionBmp.SetResolution(300.0f, 300.0f);
                    if (sfd3.ShowDialog() == DialogResult.OK && sfd3.FileName.Length > 0)
                    {
                        compositionBmp.Save(sfd3.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);

                            MessageBox.Show("Arkusz do wydruku został zapisany", "Zapis.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                }
            }
            catch (Exception)
            {
                MessageBox.Show("Nieudany zapis kompozycji do druku.", "Błąd07", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    }

在没有显示文件对话框的情况下保存图像

将第一个文件分解为零件,然后重新组装零件并添加所需编号很简单。

这可以使用 Path 类来完成,该类提供了许多处理文件路径的方法

if (sfd.ShowDialog() == DialogResult.OK && sfd.FileName.Length > 0)
{
    string firstFile = sfd.FileName;
    string secondFile = Path.Combine(Path.GetDirectoryName(firstFile), 
           Path.GetFileNameWithoutExtension(firstFile) + "1" + 
           Path.GetExtension(firstFile));
    grafika = CropImage (new Bitmap(pictureBox1.Image, pictureBox1.Size), Obcinacz);
    Bitmap Crop1 = new Bitmap(grafika, new Size(SzerReal, WysReal));
    // Now save the first file and the second one
    grafike.Save(firstFile, ImageFormat.Jpeg);
    Crop1.Save(secondFile, ImageFormat.Jpeg);
    zapisano = true;
}