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();

       }

   }

}

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

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


 

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

11107. Повышение устойчивости работы объектов на ЧС 42.56 KB
  Повышение устойчивости работы объектов на ЧС ПРЕДУПРЕЖДЕНИЕ ЧРЕЗВЫЧАЙНЫХ СИТУАЦИЙ И ПОВЫШЕНИЕ УСТОЙЧИВОСТИ ФУНКЦИОНИРОВАНИЯ ОРГАНИЗАЦИЙ Введение Как гласит Федеральный закон О защите населения и территорий от чрезвычайных ситуаций природного и техног...
11108. Локализация и ликвидация последствий ЧС 22.07 KB
  Локализация и ликвидация последствий ЧС Ликвидация последствий ЧС. Ликвидация ЧС ситуации осуществляется силами и средствами предприятий учреждений и организаций независимо от их организационно – правовой формы органов местного самоуправления органов исполнител...
11109. Дознание в уголовном процессе 44.5 KB
  РЕФЕРАТ по уголовному процессу на тему: Дознание в уголовном процессе Дознание – один из видов предварительного расследования о...
11110. Представительство. Доверенность 158 KB
  Курсовая работа по гражданскому праву На тему: Представительство. Доверенность Оглавление [1] Глава 1 понятие значение института представительства...
11111. Рентные договоры: понятие, правовая природа, виды 176 KB
  История, правовая природа и понятие рентных договоров. Правовая природа рентных договоров. Понятие, предмет и форма заключения договора ренты. Противоречивость конструкции договора ренты. Исполнение обязанности по передаче имущества
11112. Граждане как субъекты гражданского права 184 KB
  По дисциплине: Гражданское право На тему: Граждане как субъекты гражданского права Оглавление [1] По дисциплине: Гражданское право [2] Оглавление [3] Глава 1 Понятие...
11113. Ответственность за нарушение налогового законодательства. Виды налоговых правонарушений, влекущих ответственность 217 KB
  Меняются ставки налогов, объекты налогообложения, отменяются одни льготы и вводятся новые, уточняются источники уплаты налогов. Но проблема правонарушений в области уплаты налогов и сборов всегда останется актуальной. С этой проблемой не справились даже развитые цивилизованные государства.
11114. Сроки в гражданском праве 166 KB
  Курсовая работа по дисциплине: гражданское право тема: Сроки в гражданском праве Введение. Актуальность избранной темы обуславливается тем что своевременное осуществление и защита нарушенных прав способствует достижению той цели которую субъекты пресл...
11115. Прекращение жилищных правоотношений. Выселение 91.5 KB
  РЕФЕРАТ по дисциплине: жилищное право на тему: Прекращение жилищных правоотношений. Выселение Введение. Конституция Российской Федерации ст. 40 провозгласила в числе основных прав и свобод человека и гражданина право на жилище....