14753

ИЗУЧЕНИЕ ПРЕДСТАВЛЕНИЯ ГРАФИЧЕСКОЙ ИНФОРМАЦИИ В WINDOWS

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная лабота №1 Изучение представления графической информации в Windows Цель работы: Написать программу реализующую просмотр графического файла формат BMP. Программа должна: загружать и выводить на экран произвольный файл с использованием файловых функ

Русский

2013-06-09

144.25 KB

1 чел.

Лабораторная лабота №1

"Изучение представления графической информации в Windows"

Цель работы:

Написать программу, реализующую просмотр графического файла (формат BMP). Программа должна:

  1.  загружать и выводить на экран произвольный файл (с использованием файловых функций);
  2.  читать файлы с цветовой палитрой в 256 цветов;
  3.  выводить информацию из заголовков файла (тип, размер, разрешение, использование сжатия, к-во цветов, ...), а также цветовую палитру;

Код программы:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace lab1

{

   public partial class Form1 : Form

   {

       public string path;        public int scale;

       public byte r, g, b;        public int[,] palette = new int[256, 3];

       public Form1()

       {

           InitializeComponent();

           listView1.Hide();

       }

       private void open256bitmapToolStripMenuItem_Click(object sender, EventArgs e)

       {

           OpenFileDialog dialog = new OpenFileDialog();

           dialog.Filter = "bmp | *.bmp";

           if (dialog.ShowDialog() == DialogResult.OK)

           {

               this.path = dialog.FileName;

               Show_Pic(this.path);

           }

       }

       public void Show_Pic(string filename)

       {

           byte[] array2 = new byte[2];

           byte[] array4 = new byte[4];

           byte[] array3 = new byte[3];

           byte[] values = new byte[3];

           FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);

           fs.Seek(2, SeekOrigin.Begin); fs.Read(array4, 0, 4);

           int filesize = BitConverter.ToInt32(array4, 0);

           fs.Seek(10, SeekOrigin.Begin); fs.Read(array4, 0, 4);

           int rasterlocation = BitConverter.ToInt32(array4, 0);

           fs.Seek(18, SeekOrigin.Begin); fs.Read(array4, 0, 4);

           int width = BitConverter.ToInt32(array4, 0);

           fs.Read(array4, 0, 4);

           int height = BitConverter.ToInt32(array4, 0);

           fs.Read(array2, 0, 2);

           int numofcolorflats = BitConverter.ToInt16(array2, 0);

           fs.Read(array2, 0, 2);

           int bitperpix = BitConverter.ToInt16(array2, 0);

           fs.Seek(46, SeekOrigin.Begin); fs.Read(array4, 0, 4);

           int numofcolors = BitConverter.ToInt32(array4, 0);

           fs.Read(array4, 0, 4);

           int numofmaincolors = BitConverter.ToInt32(array4, 0);

           fs.Seek(54, SeekOrigin.Begin);

           long pos = fs.Position;

           for (int i = 0; pos + 4 < rasterlocation; i++)

               {

                   pos = fs.Position;

                   fs.Read(values, 0, 3);

                   palette[i, 0] = values[2];

                   palette[i, 1] = values[1];

                   palette[i, 2] = values[0];

                   fs.Seek(1, SeekOrigin.Current);

               }

           fs.Seek(rasterlocation, SeekOrigin.Begin);

           Bitmap bmp1 = new Bitmap((int)width, (int)height);

           for (int y = bmp1.Height - 1; y >= 0 ; y--)

               for (int x = 0; x < bmp1.Width; x++)

               {

                   int a = Convert.ToInt32(fs.ReadByte());

                  bmp1.SetPixel(x, y, Color.FromArgb(palette[a, 0],

                       palette[a, 1], palette[a, 2]));

               }

           pictureBox1.Image = bmp1;

           string msg1 = "raster data location is " + rasterlocation.ToString() +

                           "\nwidth = " + width.ToString() +

                           "\nheight = " + height.ToString() +

                           "\nfile size = " + filesize.ToString() + " bytes" +

                           "\nnumber of color flats = " + numofcolorflats.ToString() +

                           "\nbit per pixel = " + bitperpix.ToString() +

                           "\nnumber of colors = " + numofcolors.ToString() +

                           "\nnumber of main colors = " + numofmaincolors.ToString();

           MessageBox.Show(msg1);

       }

       private void showPaliterToolStripMenuItem_Click(object sender, EventArgs e)

       {

           pictureBox1.Visible = false;

           int cc = 0;

           while (cc < 256)

           {

               listView1.Items.Add("    ");

               listView1.Items[cc].BackColor = Color.FromArgb(palette[cc, 0], palette[cc, 1], palette[cc, 2]);

               cc++;

           }

           listView1.Show();

       }

       private void hidePaletteToolStripMenuItem_Click(object sender, EventArgs e)

       {

           pictureBox1.Visible = true;

           listView1.Hide();

       }

   }

}

Результаты работы:

Вывод: мы научились попиксельно загружать битмап, изучили устройство битмапа.


 

А также другие работы, которые могут Вас заинтересовать

1448. Будівництво трьохповерхового житлового будинку в м. Львові по вулиці Порічковій 68 166 KB
  Описання, розпланування, конструкцій і благоустрою. Техніко-економічні показники. Плани поверхів, підвалу, фундаменту, перекриттів. Інженерні комунікації будинку.
1449. Разработка и исследование промышленных отпаянных лазеров на парах меди мощностью 10-50 Вт для технологического медицинского оборудования 11.38 MB
  Конструкция, параметры и недостатки первого ЛПМ Криостат 1 с отпаянным саморазогревным АЭ ТЛГ-5. Выбор материала и конструкции разрядного канала. Сравнительный анализ эффективности накачки высоковольтного импульсного модулятора. Параметры, габаритные и присоединительные размеры, масса, внешний вид и конструктивные особенности отпаянных АЭ серии.
1450. Разработка жизнеспособного, экономически рентабельного бизнес проекта салона красоты 485.5 KB
  Теоретические основы бизнес - планирования. Структура и содержание бизнес – планирования. Требования, предъявляемые к бизнес-плану. Анализ развития рынка индустрии красоты в РФ и г. Москва. Наиболее востребованные услуги в салонах красоты.
1451. Расчет электрических цепей 298 KB
  Расчет параметров эквивалентного источника. Расчет электрических цепей постоянного тока. Расчет электрических цепей переменного тока. Расчет резонансных схем.
1452. Выбор методов производства работ, техника безопасности 488 KB
  Вертикальная планировка и срезка растительного слоя ведётся в подготовительный период. Устройство горизонтальной гидроизоляции из двух слоёв рубероида. Расчет бригады, описание календарного плана. Описание технологической последовательности выполнения работ.
1453. Формирование педагогических навыков в процессе практической деятельности студента педагога 152.5 KB
  Приобретение знаний, связанных с изучением структуры, функций, направлений и эффективности педагогической деятельности. Формирование практических навыков анализа работы преподавателя. Изучение порядков, норм, деятельности кафедры, стандартов, документов, методических материалов.
1454. Особливості репрезентації концепту Кількість в англійській та українській мовах 158.5 KB
  Мета роботи – створити когнітивно-семантичне підґрунтя вибору варіантів перекладу одиниць на позначення концепту Кількість. Обґрунтувати вибір дефініції поняття концепт та узагальнити інформацію про мовну репрезентацію концепту. Створити модель аналізу концепту, орієнтовану на переклад.
1455. Расчет привода и его составляющих 150.5 KB
  Расчет червячной передачи. Выбор материала червяка и колеса. Расчет цепной передачи. Размеры пружины. Расчёт тихоходного вала. Проверка на статическую прочность. Проверка на усталостную прочность. Смазка редуктора.
1456. Теория бухгалтерского учета 786.5 KB
  Специфика бухгалтерского учета предприятий торговли. Обособленное подразделение юридического лица, осуществляющего часть его функций. Записи операций по кредиту счета 3310. Сводный документ, в котором обобщают все начисления, удержания и суммы к выплате заработной платы.