我应该编写一个程序,从用户那里获取一些 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[] 只是一个字符串数组,其中包含必须保存图像的一些文件名。
任何想法将不胜感激并提前致谢。