Вход

Программа просмотра изображений с нецелочисленными пикселями

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 170739
Дата создания 2013
Страниц 40
Источников 7
Мы сможем обработать ваш заказ (!) 22 апреля в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
1 820руб.
КУПИТЬ

Содержание

ОГЛАВЛЕНИЕ
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<min then min:=fl; //Если это значение больше максимума, то передаем его в максимсальное значение
end
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

Список литературы [ всего 7]

Использованные источники информации
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.

Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00485
© Рефератбанк, 2002 - 2024