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

       }

   }

}

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

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


 

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

79650. Порядок формирования и структура федеральной и региональных нотариальных палат 188.5 KB
  Основ законодательства о нотариате нотариус занимающийся частной практикой должен быть членом нотариальной палаты. Кроме того членами нотариальной палаты могут быть также лица получившие или желающие получить лицензию на право нотариальной деятельности однако для них членство...
79651. ПОРЯДОК ОТБОРА ИНВЕСТИЦИОННЫХ ПРОЕКТОВ, ОСУЩЕСТВЛЯЕМЫХ НА УСЛОВИЯХ ГОСУДАРСТВЕННО-ЧАСТНОГО ПАРТНЕРСТВА В СОВРЕМЕННОЙ РОССИИ 101 KB
  Государственная поддержка инвестиционных проектов осуществляемых на условиях государственно-частного партнерства предоставляется для реализации инвестиционных проектов направленных: на социально-экономическое развитие Российской Федерации в части создания и или развития...
79652. ПРАВА И ОБЯЗАННОСТИ ЛИЦ, УЧАСТВУЮЩИХ В ИСПОЛНИТЕЛЬНОМ ПРОИЗВОДСТВЕ 133 KB
  Взыскатель имеет право: просить судебного пристава-исполнителя о немедленном наложении после возбуждения исполнительного производства ареста на имущество и денежные средства должника; знать где находится исполнительный документ в тот или иной момент поскольку на судебном...
79653. ПОДХОД К ВЫРАБОТКЕ ЕДИНОГО ПОНЯТИЯ «КИБЕРТЕРРОРИЗМ» (НАУЧНОЕ ОБОСНОВАНИЕ, СРАВНИТЕЛЬНАЯ ХАРАКТЕРИСТИКА) 122.5 KB
  Проблема кибертерроризма существует относительно недавно, поэтому она не вошла в законодательство большинства ведущих стран мира, в том числе России. Это связано с тем, что до сих пор не выработано единое понятие (научная дефиниция) нового вида правонарушения.
79654. Особенности формы договора займа, заключаемого кредитным потребительским кооперативом граждан со своими членами 92 KB
  Вторая особенность формы договора займа, заключаемого кредитным потребительским кооперативом граждан со своими членами, состоит в последствиях ее несоблюдения. Так, в соответствии с п. 2 ст. 17 Закона о кредитных потребительских кооперативах граждан несоблюдение письменной формы договора займа влечет его недействительность.
79655. ВАЛЮТНЫЕ ОПЕРАЦИИ. ОБЩАЯ ХАРАКТЕРИСТИКА 136.5 KB
  Согласно действовавшему ранее Закону Российской Федерации от 9 октября 1992 г. Порядок и условия отнесения изделий из драгоценных металлов и природных драгоценных камней к ювелирным и другим бытовым изделиям и лому таких изделий устанавливаются Правительством Российской Федерации.
79656. ОРГАНИЗАЦИОННАЯ СТРУКТУРА НАЛОГОВЫХ ОРГАНОВ ЗАРУБЕЖНЫХ СТРАН. МОДЕЛИ ОРГАНИЗАЦИОННОЙ СТРУКТУРЫ НАЛОГОВЫХ ОРГАНОВ 105 KB
  В течение последних 20-30 лет к организации внутренней структуры национальных налоговых администраций отчетливо выделились три подхода: модель вид налога; функциональная модель; модель вид налогоплательщика. Наиболее ранняя модель организационной структуры налоговых органов...
79657. МЕСТО И РОЛЬ ФЕДЕРАЛЬНОГО АРБИТРАЖНОГО СУДА МОСКОВСКОГО ОКРУГА В СИСТЕМЕ СУДЕБНОЙ ВЛАСТИ В РОССИИ 156.5 KB
  Из данного конституционного положения следует что деятельность арбитражных судов представляет собой форму осуществления судебной власти в сфере гражданского и административного судопроизводства а сами арбитражные суды входят в систему органов гражданской юрисдикции.
79658. НОВАЦИИ В ПРАВОВОМ РЕГУЛИРОВАНИИ РЫНКА ЦЕННЫХ БУМАГ 97.5 KB
  Вопросы проведения первичных публичных размещений акций продолжительное время находились за рамками внимания законодателя что порождало возникновение правовых проблем на пути расширения практики использования российскими компаниями механизма первичного публичного размещения для привлечения...