如何将位图图像保存为JPEG

7
问题在于该文件未保存为JPEG格式,只是一个普通文件。
以下是我的代码:
private void btnSave_Click(object sender, EventArgs e)
{
    saveDialog.FileName = txtModelName.Text;

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        Bitmap bmp = new Bitmap(pnlDraw.Width, pnlDraw.Height);

        pnlDraw.DrawToBitmap(bmp, new Rectangle(0, 0,
            pnlDraw.Width, pnlDraw.Height));

        bmp.Save(saveDialog.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
    }
}

“Normal file” 是什么意思? - SLaks
在我看来,它是正确的。我怀疑“普通文件”只是指该文件没有正确的扩展名。 - Dirk
我认为你的问题很简单,就是文件扩展名的问题。如果你用图像查看器打开“image1”文件会发生什么?我的意思是,这是一个缺少扩展名的图像吗? - Christophe De Troyer
在文件属性中只显示“文件类型:文件”。 - GameOver
实际上它不再打开,它告诉我选择一个程序来打开它。 - GameOver
@GameOver:你需要了解文件扩展名是什么。 - SLaks
2个回答

17

在保存文件之前,检查文件名是否有.jpg扩展名怎么样?

您还可以更改saveDialog以仅允许用户选择.jpg图像。

private void btnSave_Click(object sender, EventArgs e)
{
    saveDialog.FileName = txtModelName.Text;
    saveDialog.DefaultExt = "jpg";
    saveDialog.Filter = "JPG images (*.jpg)|*.jpg";    

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        Bitmap bmp = new Bitmap(pnlDraw.Width, pnlDraw.Height);

        pnlDraw.DrawToBitmap(bmp, new Rectangle(0, 0,
            pnlDraw.Width, pnlDraw.Height));

        var fileName = saveDialog.FileName;
        if(!System.IO.Path.HasExtension(fileName) || System.IO.Path.GetExtension(fileName) != "jpg")
            fileName = fileName + ".jpg";

        bmp.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
    }
}

谢谢,它有效了,但是当我保存图像时,为什么不显示JPEG保存文件类型? - GameOver
@GameOver,我更新了我的答案,加入了2行代码可以解决问题。 - MarcinJuraszek

1
int width;
int height;
int stride;
int x;
int y;
string filename;

Bitmap bitmap = new Bitmap(width,height,stride,PixelFormat.Format32bppArgb,new IntPtr());

//then set the pixel;
bitmap.SetPixel(x,y,Colors.Black);
bitmap.Save(filename);

嘿,欢迎来到本站,感谢您的回答。也许你可以编辑这篇文章,解释一下如何修复这个问题以及如何使用它?这样未来经过的人就可以更好地理解发生了什么。 - SCB
请问您能否添加一些澄清说明? - Yahya Hussein
有人错误地将您的答案标记为低质量。您应该添加一些附加文本来解释您的答案如何工作,以防止进一步的标记和/或投票。仅包含代码的答案不是低质量。它是否尝试回答问题?如果没有,请标记为“不是答案”或建议删除(如果在审核队列中)。b)技术上是否不正确?请点踩或评论。来自审查 - Wai Ha Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接