gpt4 book ai didi

C# - 如何更改 PNG 质量或颜色深度

转载 作者:可可西里 更新时间:2023-11-01 08:05:20 26 4
gpt4 key购买 nike

我应该编写一个程序,从用户那里获取一些 PNG 图像,进行一些简单的编辑(如旋转)并将它们保存在 JAR 文件中,以便它可以将图像用作资源。问题是当我打开一个 80kb 的图像然后用 C# 保存它时,我得到了一个质量相同但空间为 130kb 的图像。因为它必须放在 J2ME jar 文件中,所以我真的需要更小的尺寸,至少是原始尺寸。我尝试了下面的代码,但后来发现它只适用于 Jpeg 图像。

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
int j = 0;
for (j = 0; j < codecs.Length; j++)
{
if (codecs[j].MimeType == "image/png") break;
}
EncoderParameter ratio = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 10L);
EncoderParameters CodecParams = new EncoderParameters(1);
CodecParams.Param[0] = ratio;

Image im;
im = pictureBox1.Image;
im.Save(address , codecs[j], CodecParams);

这是将图像加载到图片框的地方:

private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string address = openFileDialog1.FileName;
address.Replace("\\", "\\\\");
Image im = Image.FromFile(address);
pictureBox1.Image = im;
}
}

这是它在没有任何编辑的情况下被保存回来的地方:

private void generateToolStripMenuItem_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
int j = 0;
for (j = 0; j < codecs.Length; j++)
{
if (codecs[j].MimeType == "image/png") break;
}
EncoderParameter ratio = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 10L);
EncoderParameters CodecParams = new EncoderParameters(1);
CodecParams.Param[0] = ratio;

string address = folderBrowserDialog1.SelectedPath;
address = address + "\\";
address.Replace("\\", "\\\\");

Image im;
im = pictureBox1.Image;
im.Save(address + imageFileNames[1], codecs[j], CodecParams);

注意:imageFileNames[] 只是一个字符串数组,其中包含一些必须用于保存图像的文件名。

如有任何想法,我们将不胜感激,并提前致谢。

最佳答案

很抱歉提出一个老问题,但我今天正在解决同样的问题,并在 MSDN 上找到了这个页面:"Listing Parameters and Values for All Encoders" .我希望在那里引用它可能会有用。

文章包含一个示例程序,它输出普通 GDI+ 图像编码器支持的 EncoderParameter,而 PNG 编码器不支持任何参数。

我不确定是否有人认为这是理所当然的,或者在 gdiplus.dll 的某个 future 版本中,PNG 编码器可能会获得更多支持,因此应该检查编码器的运行时的能力。

在任何情况下,对源图像应用一些显式变换似乎是更有成效的方法;不过我还没有探索它。

关于C# - 如何更改 PNG 质量或颜色深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2419222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com