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

       }

   }

}

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

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


 

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

31965. ОРГАНИЗАЦИЯ КОРПОРТИВНОЙ КОМПЬЮТЕРНОЙ СЕТИ ООО «ШАТЛ-С» 1.29 MB
  ОРГАНИЗАЦИЯ КОРПОРТИВНОЙ КОМПЬЮТЕРНОЙ СЕТИ ООО ШАТЛС ДИПЛОМНАЯ РАБОТА ПОЯСНИТЕЛЬНАЯ ЗАПИСКА 071900. Функциональная схема локальной вычислительной сети . Планирование структуры сети . Организация сети на основе Windows 2000 Server .
31968. ЧИТАТЕЛЬСКАЯ ПОЧТА «ТРУДОВОЙ НОВИ» И ЕЕ МЕСТО НА СТРАНИЦАХ ГАЗЕТЫ 489.5 KB
  ГАЗЕТА ТРУДОВАЯ НОВЬ: ИСТОРИЯ СТАНОВЛЕНИЯ И СТРУКТУРА РЕДАКЦИИ. ХАРАКТЕР ИНФОРМАЦИИ В ГАЗЕТЕ ТРУДОВАЯ НОВЬ. РУБРИКИ И ТЕМАТИЧЕСКИЕ СТРАНИЦЫ В ГАЗЕТЕ ТРУДОВАЯ НОВЬ. ЗАГОЛОВОК В ГАЗЕТЕ ТРУДОВАЯ НОВЬ: ХАРАКТЕРНЫЕ ЧЕРТЫ И ОСНОВНЫЕ ПРИНЦИПЫ ПОСТРОЕНИЯ.
31969. Создание программного модуля, позволяющего сохранить данные аварийного буфера на верхнем уровне и представить их в табличной и графической форме 256.2 KB
  2 Передача данных от нижнего уровня к верхнему и сохранение данных 19 4.3 Визуализация данных 20 4.1 Структура базы данных 22 4.
31970. Способы самопрезентации готов, а также отношение молодежи г. Екатеринбурга к данному субкультурному течению 517 KB
  Объектом исследования является субкультура готов. Предмет исследования: способы самопрезентации готов. Цель исследования: изучить способы самопрезентации готов а также отношение молодежи г. В третьей главе представлена методическая разработка уроков по теме Способы самопрезентации готов.
31971. Методика комплексного применения средств обучения на уроках ОБЖ 181 KB
  Решением этой проблемы являются мероприятия программы по созданию технических и технологических условий которые позволят преподавателям и учащимся получить эффективный доступ к источникам достоверной информации по всем отраслям науки и техники широко использовать новые электронные образовательные ресурсы и пособия в процессе обучения. Модернизации подвергается не только сфера содержания и методики обучения но и обновление средств обучения. В практике преподавания ОБЖ учителя часто сталкиваются с проблемами касающимися средств обучения:...
31973. Организация парикмахерской работы и создание свадебной прически 606.5 KB
  Строго говоря само понятие парикмахерская подразумевает уход за волосами всевозможные стрижки окраску волос перманент создание прически. создание изделий из натуральных и искусственных волос и уход за ними. Наращивание волос и ногтей выбор прически с помощью компьютера или шаблонов услуги пользующиеся спросом в парикмахерских салонах. В женских парикмахерских кроме помещения обработки волос могут быть другие необходимые помещения для маникюра и педикюра рабочее место для маникюра обычно располагается непосредственно в рабочем зале.