C# - Как изменить качество PNG или глубину цветаC#

Место общения программистов C#
Anonymous
C# - Как изменить качество PNG или глубину цвета

Сообщение Anonymous »

Я должен написать программу, которая получает от пользователя несколько изображений PNG, выполняет некоторые простые изменения, такие как поворот, и сохраняет их в файле JAR, чтобы можно было использовать изображения в качестве ресурсов. Проблема в том, что когда я открываю, скажем, изображение размером 80 КБ, а затем сохраняю его с помощью C#, я получаю изображение того же качества, но размером 130 КБ. А поскольку он должен находиться внутри jar-файла J2ME, мне действительно нужны меньшие размеры, по крайней мере исходный размер. Я попробовал приведенный ниже код, но позже обнаружил, что он работает только с изображениями 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[] — это просто массив строк, содержащий некоторые имена файлов, в которых должны быть сохранены изображения.

Любые идеи будут оценены по достоинству и заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/241 ... olor-depth

Вернуться в «C#»