Программа просмотра изображений с нецелочисленными пикселями
Заказать уникальную курсовую работу- 40 40 страниц
- 7 + 7 источников
- Добавлена 12.01.2013
- Содержание
- Часть работы
- Список литературы
- Вопросы/Ответы
1. ЗАДАНИЕ
2. ОПИСАНИЕ ФУНКЦИОНАЛЬНОЙ МОДЕЛИ. ОБЩИЕ СВЕДЕНИЯ.
3. СТРУКТУРЫ ДАННЫХ
3.1. Сохранение данных
3.2. Вывод изображения на форму
3.3. Цветовые составляющие
3.4. Размеры изображения и просмотр
4. ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ
5. СТРУКТУРА ПРОГРАММЫ
5.1. Назначение файлов программы
5.2. Структура компонентов
5.3. Основные использованные готовые процедуры и функции
5.4. Основные использованные свойства и методы компонентов
6. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ
6.1. Конвертация изображения
6.2. Просмотр изображения
6.3. Настройки яркости
ПРИЛОЖЕНИЕ
Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
DesignSize = (
503
544)
PixelsPerInch = 96
TextHeight = 13
object ImgView: TImage
Left = 8
Top = 48
Width = 489
Height = 487
Anchors = [akLeft, akTop, akRight, akBottom]
end
object BtnOpen: TButton
Left = 8
Top = 8
Width = 225
Height = 25
Caption = #1054#1090#1082#1088#1099#1090#1100' '#1080#1079#1086#1073#1088#1072#1078#1077#1085#1080#1077
TabOrder = 0
OnClick = BtnOpenClick
end
object BtnSave: TButton
Left = 248
Top = 8
Width = 249
Height = 25
Caption = #1057#1086#1093#1088#1072#1085#1080#1090#1100' '#1080#1079#1086#1073#1088#1072#1078#1077#1085#1080#1077
TabOrder = 1
OnClick = BtnSaveClick
end
object OpenPictureDialog: TOpenPictureDialog
Filter = 'BMP (*.bmp)|*.bmp'
Left = 416
Top = 64
end
object SavePictureDialog: TSaveDialog
Left = 416
Top = 120
end
end
Файл ViewUnit.pas
unit viewunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TViewForm = class(TForm)
GroupSize: TGroupBox;
EditHeight: TEdit;
EditWidth: TEdit;
LblHeight: TLabel;
LblWidth: TLabel;
BtnLoad: TButton;
OpenPictureDialog: TOpenDialog;
ImageView: TImage;
GroupBrightess: TGroupBox;
EditLowLevel: TEdit;
EditHiLevel: TEdit;
lblLowLevel: TLabel;
lblHiLevel: TLabel;
CheckAuto: TCheckBox;
ScrollHeight: TScrollBar;
ScrollWidth: TScrollBar;
procedure BtnLoadClick(Sender: TObject);
procedure CheckAutoClick(Sender: TObject);
procedure ScrollHeightChange(Sender: TObject);
procedure ScrollWidthChange(Sender: TObject);
procedure EditHeightChange(Sender: TObject);
procedure EditWidthChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ViewForm: TViewForm;
f:file of double;
implementation
{$R *.dfm}
function GetFileSize(FileName: String): Integer;
var
FS: TFileStream;
begin
try
FS := TFileStream.Create(Filename, fmOpenRead);
except
Result := -1;
end;
if Result <> -1 then Result := FS.Size;
FS.Free;
end;
procedure TViewForm.BtnLoadClick(Sender: TObject);
var fl,z:double; //Значение серой составляющей, вспомогательная переменная
i1,k1,i,k:integer; //Счётчики и пределы цикла
s:string;
size1,size2:integer;
max,min, average, ratio:double; //Максимальное значение яркости пикселов картинки,
//минимальное значение пикселов картинки, разброс между этими значениями, отношение разброса
//к стандартному разбросу (256)
pix:byte; //значение серой составляющей в байтовом виде
begin
i1:=StrToInt(EditHeight.Text); //Считываем значение высоты из компонента Edit1
k1:=StrToInt(EditWidth.Text); //Считываем значение ширины из компонента Edit2
size1:=i1*k1*8; //Определяем нужный раммер файла
If OpenPictureDialog.Execute then s:=OpenPictureDialog.FileName else exit;
size2:=GetFileSize(s);
if Size1<>Size2 then
begin
ShowMessage('Размер файла не совпадает с указанными вами размерами!'#10#13'Укажите верный файл или правильные размеры!');
exit;
end;
//Ассоциируем файловую переменную с указанным файлом на диске
AssignFile(f,s);
If CheckAuto.Checked then //Если отмечен флажок "Автоподбор" - яркость подбирается автоматически
//в результате выполнения следующего кода
begin
max:=0; //Указываем маленькое максимальное значение яркости, чтобы программа быстро нашла первый максимум
min: 000;//Указываем большое минимальное значение яркости, чтобы программа быстро нашла первый минимум
reset(f); //Устанавливаем указатель на начало файла
for i:=1 to i1 do //Считываем строки из файла
for k:=1 to k1 do //Считываем столбцы из файла
begin
read(f,fl); //Считываем значение серой составляющей пикселя
if fl>max then max:=fl; //Если это значение меньше минимума, то передаем его в минимальное значение
if fl
end else //Если не отмечен флажок "Автоподбор", то считываем значение максимума и минимума с формы
begin
min:=StrToFloat(EditLowLevel.Text);
max:=StrToFloat(EditHiLevel.Text);
end;
average:=max-min; //Вычисляем разброс между яркостями
reset(f); //Устанавливаем указатель в начало файла
ratio:=average/256; //Узнаем отношение разброса к стандарту
for i:=1 to i1 do //Последовательно считываем строки из файла
for k:=1 to k1 do //Последовательно считываем столбцы из файла
begin
read(f,fl); //Считываем значение серой составляющей
pix:=round(((fl+min)*ratio)); //Переводим с помощью формулы значение серой составляющей, указанной в файле
//к стандартным значениям (1-255)
z:=((fl+min)*ratio); //То же самое значение, но в виде числа с плавающей точкой
if z>255 then pix:%5 else if z<0 then pix:=0; //Если полученное значение больше, чем 255, то это чёрный пиксель
//Если полученное значение меньше нуля, то это белый пиксель
ImageView.Canvas.Pixels[i,k]:=RGB(pix,pix,pix); //Рисуем пиксель в нужном месте на картинке
end;
CloseFile(f);
end;
procedure TViewForm.CheckAutoClick(Sender: TObject);
//Процедура включает/выключает поля Edit3 и Edit4 на форме при щелчке на компонент CheckBox1
begin
EditLowLevel.Enabled:=Not(CheckAuto.Checked);
EditHiLevel.Enabled:=Not(CheckAuto.Checked);
end;
procedure TViewForm.ScrollHeightChange(Sender: TObject);
begin
EditHeight.Text:=IntToStr(ScrollHeight.Position);
end;
procedure TViewForm.ScrollWidthChange(Sender: TObject);
begin
EditWidth.Text:=IntToStr(ScrollWidth.Position);
end;
procedure TViewForm.EditHeightChange(Sender: TObject);
begin
ScrollHeight.Position:=StrToInt(EditHeight.Text);
end;
procedure TViewForm.EditWidthChange(Sender: TObject);
begin
ScrollWidth.Position:=StrToInt(EditWidth.Text);
end;
end.
Файл ViewUnit.dfm
object ViewForm: TViewForm
Left = 351
Top = 77
Width = 696
Height = 618
Caption = #1055#1088#1086#1089#1084#1086#1090#1088' '#1080#1079#1086#1073#1088#1072#1078#1077#1085#1080#1103
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
DesignSize = (
680
580)
PixelsPerInch = 96
TextHeight = 13
object ImageView: TImage
Left = 16
Top = 152
Width = 657
Height = 415
Anchors = [akLeft, akTop, akRight, akBottom]
end
object GroupSize: TGroupBox
Left = 16
Top = 16
Width = 249
Height = 121
Caption = #1042#1074#1077#1076#1080#1090#1077' '#1088#1072#1079#1084#1077#1088#1099' '#1080#1079#1086#1073#1088#1072#1078#1077#1085#1080#1103
TabOrder = 0
object LblHeight: TLabel
Left = 8
Top = 24
Width = 40
Height = 13
Caption = #1064#1080#1088#1080#1085#1072
end
object LblWidth: TLabel
Left = 8
Top = 72
Width = 37
Height = 13
Caption = #1042#1099#1089#1086#1090#1072
end
object EditHeight: TEdit
Left = 112
Top = 24
Width = 121
Height = 21
TabOrder = 0
Text = '700'
OnChange = EditHeightChange
end
object EditWidth: TEdit
Left = 112
Top = 72
Width = 121
Height = 21
TabOrder = 1
Text = '525'
OnChange = EditWidthChange
end
object ScrollHeight: TScrollBar
Left = 8
Top = 48
Width = 225
Height = 17
Max = 1024
Min = 1
PageSize = 0
Position = 700
TabOrder = 2
OnChange = ScrollHeightChange
end
object ScrollWidth: TScrollBar
Left = 8
Top = 96
Width = 225
Height = 17
Max = 1024
Min = 1
PageSize = 0
Position = 525
TabOrder = 3
OnChange = ScrollWidthChange
end
end
object BtnLoad: TButton
Left = 560
Top = 16
Width = 105
Height = 25
Caption = #1047#1072#1075#1088#1091#1079#1080#1090#1100
TabOrder = 1
OnClick = BtnLoadClick
end
object GroupBrightess: TGroupBox
Left = 288
Top = 16
Width = 257
Height = 121
Caption = #1059#1082#1072#1078#1080#1090#1077' '#1076#1080#1072#1087#1072#1079#1086#1085' '#1103#1088#1082#1086#1089#1090#1077#1081
TabOrder = 2
object lblLowLevel: TLabel
Left = 16
Top = 24
Width = 83
Height = 13
Caption = #1053#1080#1078#1085#1103#1103' '#1075#1088#1072#1085#1080#1094#1072
end
object lblHiLevel: TLabel
Left = 16
Top = 48
Width = 86
Height = 13
Caption = #1042#1077#1088#1093#1085#1103#1103' '#1075#1088#1072#1085#1080#1094#1072
end
object EditLowLevel: TEdit
Left = 176
Top = 24
Width = 65
Height = 21
TabOrder = 0
Text = '0'
end
object EditHiLevel: TEdit
Left = 176
Top = 56
Width = 65
Height = 21
TabOrder = 1
Text = '256'
end
object CheckAuto: TCheckBox
Left = 144
Top = 88
Width = 97
Height = 17
Caption = #1040#1074#1090#1086#1087#1086#1076#1073#1086#1088
TabOrder = 2
OnClick = CheckAutoClick
end
end
object OpenPictureDialog: TOpenDialog
Left = 56
Top = 176
end
end
8
Запустить просмотрщик
Перейти к окну конвертации
Перейти к окну просмотра изображения с нецелочисленными пикселями
Указать файл для конвертации
Сохранить файл в виде изображения с нецелочисленными пикелями
Выбрать необходимую функцию
Указать высоту изображения
Указать ширину изображения
Указать нижнюю границу яркости
ИЛИ
Указать верхнюю границу яркости
Включить автоподбор яркости
Указать файл для загрузки
Загрузка файла
Указать файл для сохранения
Файл в формате BMP
Цветовая карта изображения
TImage.Picture.Bitmap.
Высота
Ширина
TImage.Picture
Преобразование в 256 градаций серого
Цветовая составляющая:
R:Byte
G:Byte
B:Byte
Picture.Bitmap.Canvas.Pixels
Перевод в нецелочисленные значения
Сохранение в файл
Picture.Bitmap.Canvas.Pixels
Вывод на экран
Преобразование в формат RGB
Перевод значений в byte в соответствии с настройками яркости
Считывание данных из файла
3
2
Файл значений типа Double
1
1
2
3
4
5
6
13
9
7
2
1
3
4
5
6
8
10
11
12
1.Режим градаций серого. http://photoshop.demiart.ru/book-CS3/help.html?content=WSfd1234e1c4b69f30ea53e41001031ab64-73e8.html
2.Статья «Глубина цвета» в энциклопедии Wikipedia. http://ru.wikipedia.org/wiki/Глубина_цвета
3.Сколько оттенков способен различать человеческий глаз? http://www.websib.ru/noos/it/bank_it/quest.php?id=44
4.Статья «HDR» в энциклопедии Wikipedia. http://ru.wikipedia.org/wiki/High_Dynamic_Range_Imaging
5.http://www.codingrus.ru/readarticle.php?article_id=1846
6.Контекстная справка Delphi 7.0
7.Хомоненко А., Гофман В., Мещеряков Е. Delphi 7. СПб.: БХВ-Петербург, 2004.
Вопрос-ответ:
Какая функциональная модель у программы просмотра изображений с нецелочисленными пикселями?
Функциональная модель программы включает такие основные компоненты, как сохранение данных, вывод изображения на форму, цветовые составляющие и просмотр размеров изображения.
Какие структуры данных используются в программе?
В программе используются структуры данных для сохранения изображений, вывода изображения на форму, хранения цветовых составляющих и определения размеров изображения.
Как осуществляется вывод изображения на форму?
Для вывода изображения на форму используются соответствующие компоненты программы, которые обеспечивают отображение пикселей с нецелочисленными значениями на экране.
Какие основные компоненты программы использовались?
Основными компонентами программы являются компоненты для сохранения данных, вывода изображения на форму, определения цветовых составляющих и просмотра размеров изображения.
Каковы основные свойства и методы компонентов программы?
Основные свойства и методы компонентов программы включают функции сохранения данных, вывода изображения на форму, определения цветовых составляющих и просмотра размеров изображения.
Что такое программа просмотра изображений с нецелочисленными пикселями?
Программа просмотра изображений с нецелочисленными пикселями - это программное обеспечение, которое позволяет отображать изображения, где пиксели могут иметь нецелочисленные значения, такие как дробные числа.
Какая функциональная модель используется в программе просмотра изображений с нецелочисленными пикселями?
В программе просмотра изображений с нецелочисленными пикселями используется функциональная модель, которая включает в себя сохранение данных изображения, вывод изображения на форму, работу с цветовыми составляющими, изменение размеров изображения и его просмотр.
Какие структуры данных используются в программе просмотра изображений с нецелочисленными пикселями?
В программе просмотра изображений с нецелочисленными пикселями используются следующие структуры данных: сохраненные данные изображения, форма для вывода изображения, цветовые составляющие пикселей, размеры изображения и функции для просмотра.