26.Графика, растровые изображения
Предмет исследований
Графические средства C#.
Форматы графики.
Контрольные вопросы
BitMap изображение.
TIFF изображение
GiF изображение.
PNG изображение.
JPEG изображение.
Компонент PictureBox.
Принцип создания анимации.
Использование в анимационной программе фоновой картинки.
Использование в анимационной программе картинки образа.
Использование в анимационной программе буфера.
Задание. Создать программу работы с графическими файлами. Проект – WindowsForm приложение. В проекте растровая картинка *.bmp преобразуется в другие форматы графики.
Пример. Создать программу работы с графическими файлами. Проект – WindowsForm приложение. В программе используется файл растровой картинки Кувшинка.bmp, который надо загрузить в ту же папку, где находится проект приложения. Этот файл находится в папке УМД к ЛР.
В проекте растровая картинка Кувшинка.bmp преобразуется в другие форматы графики. Картинки отображаются в компонентах PictureBox1 (с заголовком BitMap в компоненте Label1) для исходника и PictureBox2 (с заголовком Результат в компоненте Label2).
Тип результата (TIFF, GIF, PNG, JPEG), выбирается из выпадающего списка combobox1 с заголовком «Выбор формата» в компоненте Label3.
При выборе JPEG дополнительно выбирается желаемое качество результата от 5 до 100 из выпадающего списка-диапазона NumericUpDown с заголовком «Качество» в компоненте Label4.
При выборе TIFF дополнительно из выпадающего списка combobox2 с заголовком «Сжатие TIFF» в компоненте Label5 выбирается алгоритм сжатия:
None – сжатия нет.
Default – по умолчанию.
Lzw – сжатие без потерь качества.
Rle – с анализом повторов пикселей
Zip – для архивирования.
Кнопка с надписью «Старт» запускает процесс преобразования.
Форма проекта задания 1. В окне свойств формы задаем свойство text = Растровая графика.
Листинг программы
using System;
using System.Drawing;
using System.Windows.Media.Imaging;
using System.IO;
using System.Windows.Forms;
namespace RastrGraphic
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Загрузка bitmap
FileStream fin = new FileStream(@"e:\Kuvshinka.bmp", FileMode.Open);
pictureBox1.Image = Image.FromStream(fin);
long Bytes = fin.Length;
fin.Close();
label1.Text = "BitMap " + Bytes.ToString() + " байт";
}
private void button1_Click(object sender, EventArgs e)
{
if ( comboBox1.SelectedItem == "TIFF")
{
FileStream fin = new FileStream(@"e:\Kuvshinka.bmp", FileMode.Open);
FileStream fout = new FileStream(@"e:\Kuvshinka.tiff", FileMode.Create);
TiffBitmapEncoder encTiff = new TiffBitmapEncoder();
if (comboBox2.SelectedItem == "Default")
{
encTiff.Compression = TiffCompressOption.Default;
}
if (comboBox2.SelectedItem == "None")
{
encTiff.Compression = TiffCompressOption.None;
}
if (comboBox2.SelectedItem == "Rle")
{
encTiff.Compression = TiffCompressOption.Rle;
}
if (comboBox2.SelectedItem == "Lzw")
{
encTiff.Compression = TiffCompressOption.Lzw;
}
if (comboBox2.SelectedItem == "Ccitt3")
{
encTiff.Compression = TiffCompressOption.Ccitt3;
}
if (comboBox2.SelectedItem == "Ccitt4")
{
encTiff.Compression = TiffCompressOption.Ccitt4;
}
if (comboBox2.SelectedItem == "Zip")
{
encTiff.Compression = TiffCompressOption.Zip;
}
encTiff.Frames.Add(BitmapFrame.Create(fin));
encTiff.Save(fout);
fin.Close();
long Bytes = fout.Length;
pictureBox2.Image = Image.FromStream(fout);
fout.Close();
label2.Text = "TIFF " + Bytes.ToString() + " байт";
}
if (comboBox1.SelectedItem == "GIF")
{
FileStream fin = new FileStream(@"e:\Kuvshinka.bmp", FileMode.Open);
FileStream fout = new FileStream(@"e:\Kuvshinka.gif", FileMode.Create);
GifBitmapEncoder encGif = new GifBitmapEncoder();
encGif.Frames.Add(BitmapFrame.Create(fin));
encGif.Save(fout);
fin.Close();
long Bytes = fout.Length;
pictureBox2.Image = Image.FromStream(fout);
fout.Close();
label2.Text = "GIF " + Bytes.ToString() + " байт";
}
if (comboBox1.SelectedItem == "PNG")
{
FileStream fin = new FileStream(@"e:\Kuvshinka.bmp", FileMode.Open);
FileStream fout = new FileStream(@"e:\Kuvshinka.png",
FileMode.Create);
PngBitmapEncoder encPng = new PngBitmapEncoder();
encPng.Frames.Add(BitmapFrame.Create(fin));
encPng.Save(fout);
fin.Close();
long Bytes = fout.Length;
pictureBox2.Image = Image.FromStream(fout);
fout.Close();
label2.Text = "PNG " + Bytes.ToString() + " байт";
}
if (comboBox1.SelectedItem == "JPEG")
{
FileStream fin = new FileStream(@"e:\Kuvshinka.bmp", FileMode.Open);
FileStream fout = new FileStream(@"e:\Kuvshinka.jpeg",
FileMode.Create);
JpegBitmapEncoder encJpeg = new JpegBitmapEncoder();
encJpeg.QualityLevel = (int)numericUpDown1.Value;
encJpeg.Frames.Add(BitmapFrame.Create(fin));
encJpeg.Save(fout);
fin.Close();
long Bytes = fout.Length;
pictureBox2.Image = Image.FromStream(fout);
fout.Close();
label2.Text = "JPEG " + Bytes.ToString() + " байт";
}
}
}
}
При запуске проекта на выполнение появляется окно, в котором преобразованной картики нет, а для исходника отображается тип и размер файла.
Пусть выбран тип JPEG с качество 5. При нажатии на кнопку Старт формируется результат – выводится картинка, а в поле результата прописывается тип картинки и размер файла.
Картинка получилась со сжатием почти в 100 раз, но с плохим качеством. Изменим качество на 30 и повторим преобразование. Результат с хорошим качеством, но сжатие стало меньше, около 30 раз.
- 1.Иср Visual c#. Первые программы
- 1.1.Основы иср
- 2.Численные типы в языке c#
- 3.Строковые и символьные типы в языке c#
- 3.1.Взаимные преобразования
- 3.2.Стандартное форматирование
- 3.3.Нестандартное форматирование
- 4.Тип DateTime в языке c#
- 4.1.Консольное приложение
- 4.2.Windows Forms приложение
- 5.Линейные структуры
- 6.Ветвления
- 6.1.Ветвление if; else
- 6.2.Выбор switch; case
- 7.Циклы с неизвестным числом повторений
- 7.1.Цикл while
- 7.2.Цикл do…while
- 8.Циклы с заданным числом повторений
- 8.1.Команда Goto и метки
- 8.2.Цикл for
- 8.3.Вложенные циклы for
- 8.4.Команда break
- 8.5.Команда continue
- 9.Логические операции
- 10.Массивы
- 10.1.Одномерный массив
- 10.2.Матрица
- 11.Файлы
- 12.Подпрограммы
- 13.Операции со строками
- 13.1.Сравнение строк
- 13.2.Объединение строк
- 13.3.Разбиение строк
- 14.Исключения
- 14.1.Операции с вещественными числами
- 14.2.Операции с целыми числами
- 15.Работы с классами и объектами
- 16.Использование командной строки при запуске программ
- 17.Отладка и тестирование в с#
- 18.Многопоточные приложения
- 19.Работа с папками
- 20.Многооконные приложения
- 21.Компонент ProgressBar
- 22.Списки
- 23.Таблицы
- 24.Графика. Рисуем функции
- 24.1.Текст и график функции в форме
- 24.2.Компонент Chart
- 25.Графика, рисование фигур
- 26.Графика, растровые изображения
- 27.Графика, анимация
- 28.Приложения
- 28.1.Класс System.Math
- 28.2.Класс System.Console
- 28.3.Класс System.String