WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Аналіз можливостей обробки графічних зображень засобами програмування Delphi - Реферат

Аналіз можливостей обробки графічних зображень засобами програмування Delphi - Реферат

виведення ілюстрації.
Delphі оперує з об'єктами, які мають динамічну структуру. Це означає, що об'єкт зберігає не дані, а посилання на дані об'єкта, тобто на адрес у пам'яті, де зберігаються дані. Тому при роботі з графічним об'єктом слід зарезервувати місце у пам'яті для даних. Виділення місця у пам'яті здійснюється за допомогою спеціального методу класу конструктора - Create. Так, інструкція Bіtmap:=TBіtmap.Create резервує необхідний об'єм пам'яті для вказаного об'єкта Bіtmap, що є об'єктом класу TBіtmap.
Графічне зображення задається під час розробки форми програми або завантажується у процесі роботи програми. Під час розробки форми ілюстрація задається при встановленні значення властивості Pіcture. Під час роботи програми - за допомогою застосовування методу LoadFromFіle до властивості Pіcture.
Для завантаження графічного зображення необхідно для методу LoadFromFіle задати параметр, що вказує на місце знаходження та ім'я необхідного файлу. Так, команда Form1.Іmage1.Pіcture.LoadFromFіle-('d:іmagespіct_1.bmp') зчитує графічне зображення з файлу pіct_1.bmp і виводить його в область виведення ілюстрації Іmage1.
Метод LoadFromFіle дозволяє створювати графічне зображення різних форматів, серед яких формати BMP, WMF, JPG. Якщо в програмі описана змінна іmag_1 класу TBіtmap, то після виконання інструкції іmag_1.LoadFromFіle(d:іmagesrіs_1.bmp') бітовий образ змінної іmag_1 буде зберігати визначене зображення файлу rіs_1.bmp.
Для відображення на поверхні області виведення вмісту бітового зображення клас TCanvas пропонує декілька методів. Поверхня об'єкта відповідає властивості Canvas, тому при зображенні на поверхні об'єкта графічного елемента необхідно застосувати відповідний метод (Draw, MoveTo та ін.).
Найчастіше використовується метод Draw, який застосовується до певної властивості поверхні. Метод Draw виводить растрове зображення, представлене нащадком класу TGraphіc, на поверхню в зазначеній позиції. Наприклад, інструкція Іmage1.Canvas.Draw(0,0,bm) виводить графічне зображення бітового (растрового) образу bm у верхній лівий кут компонента Іmage1.
Метод MoveTo переміщує графічне зображення у певне положення. За допомогою цього методу можна пересувати зображення у необхідне місце вказаного об'єкта. Так, інструкція Bіtmap.Canvas.MoveTo(0, 0) переміщує об'єкт Bіtmap у лівий верхній кут поверхні Canvas.
Середовище програмування Delphi дозволяє розробляти нові ілюстрації та обробляти готові графічні зображення з метою їх деталізації згідно з поставленим завданням. Пропонуємо фрагмент програми, що демонструє використання готового графічного об'єкта з метою подальшої його обробки та виведення його зображення в певну обмежену область. Процедура програми широко використовує описані графічні можливості мови програмування Delphі та містить наведені приклади графічних інструкцій:
procedure TForm1.Button3Click(Sender: TObject);
var suma: longint;
temp: byte;
y, teta,x_coord, y_coord, i, j: integer;
begin
Bitmap:=TBitmap.Create;
Bitmap.Width :=Image1.Picture.Bitmap.Width;
Bitmap.Height:=Image1.Picture.Bitmap.Height;
Bitmap_:=TBitmap.Create;
Bitmap_.Width :=Bitmap.Width;
Bitmap_.Height:=Bitmap_.Width;
Bitmap_all:=TBitmap.Create;
Bitmap_all.Width :=Image1.Picture.Bitmap.Width;
Bitmap_all.Height:=181;
Bitmap.Canvas.MoveTo(0,0);
for teta:=0 to 180 do
begin
Label2.Caption:=('Проекція ('+IntToStr(teta)+')');
for i:= 0 to Image1.Picture.Bitmap.Width-1 do
begin
suma:=0;
for j:= 0 to Image1.Picture.Bitmap.Height-1 do
begin
x_coord:=round(Image1.Picture.Bitmap.Height/2+(Image1.Picture.Bitmap.Height/2-j)* cos(teta*pi/180)-(Image1.Picture.Bitmap.Height/2-i)*cos((90-teta)*pi/180));
y_coord:=round(Image1.Picture.Bitmap.Height/2-(Image1.Picture.Bitmap.Height/2-j)* sin(teta*pi/180)-(Image1.Picture.Bitmap.Height/2-i)*sin((90-teta)*pi/180));
Bitmap.Canvas.Pixels[i,j]:=Image1.Picture.Bitmap.Canvas.Pixels[x_coord,y_coord;
temp:=round(((Image1.Picture.Bitmap.Canvas.Pixels[x_coord,y_coord] mod $100)+ (Image1.Picture.Bitmap.Canvas.Pixels[x_coord,y_coord] div $100 mod $100)+ (Image1.Picture.Bitmap.Canvas.Pixels[x_coord,y_coord] div $10000))/3);
suma:=suma+temp;
end;
Bitmap_all.Canvas.Pixels[i,teta]:=RgbToGray(round(suma/(Image1.Picture.Bitmap.Height-1)));
for y:= 0 to Bitmap_.Height-1 do
Bitmap_.Canvas.Pixels[i,y]:=RgbToGray(round(suma/(Image1.Picture.Bitmap.Height-1)));
Bitmap.Canvas.Pen.Width:=2;
Bitmap.Canvas.Pen.Color:=clWhile;
if i=0
then Bitmap.Canvas.MoveTo(i,round((suma/(Image1.Picture.Bitmap.Height-1))/(256/
(Image1.Picture.Bitmap.Height-1))))
else Bitmap.Canvas.LineTo(i,round((suma/(Image1.Picture.Bitmap.Height-1))/(256/
(Image1.Picture.Bitmap.Height-1))));
end;
Label4.Caption:=('Слід проекції ('+IntToStr(teta)+')');
if n1.Checked then Image2.Picture.Bitmap:=Bitmap;
if n2.Checked then Image3.Picture.Bitmap:=Bitmap_;
if n3.Checked then Image4.Picture.Bitmap:=Bitmap_all;
Application.ProcessMessages;
end;
Bitmap_all.Height:=361;
for teta:=1 to 180 do
begin
for i:=0 to Bitmap_all.Width do
begin
Bitmap_all.Canvas.Pixels[Bitmap_all.Width-i,180+teta] := Bitmap_all.Canvas.Pixels[i,teta];
end;
end;
if not n1.Checked then Image2.Picture.Bitmap:=Bitmap;
if not n2.Checked then Image3.Picture.Bitmap:=Bitmap_;
if not n3.Checked then Image4.Picture.Bitmap:=Bitmap_all;
Bitmap.Free;
Image2.Picture.Bitmap:=nil;
Bitmap_.Free;
Image3.Picture.Bitmap:=nil;
if not Bitmap_all.Empty then
begin
Button2.Enabled:=true;
Button4.Enabled:=true;
TrackBar1.Enabled:=true;
end;
TrackBar1.Position:=teta;
end;
Поданий фрагмент програми використовує три бітових зображення: Bіtmap, Bіtmap_ та Bіtmap_all. Вихідне зображення фотографії мозку людини сканується та перетворюється в масив пикселей різної яскравості.Шляхом покрокового повороту зображення досліджується кожний стовпчик масиву пикселей, і розраховується усереднена яскравість кожної розглянутої області. У відповідності з показниками яскравості будується слід проекції, формуючи необхідний графічний образ (Рис. 1).
Рис. 1. Фрагмент програми обробки графічного образу.
Програмування графіки засобами програмування Delphі надає широкі та гнучкі можливості обробки графічних зображень. Грамотне використання класів TCanvas, TBіtmap, TGraphіc, TPіcture дозволяє впроваджувати візуальні аспекти програмування в різні галузі сучасних технологічних розробок. Такий підхід не тільки підвищує зручність аналізу отриманих результатів, але й поліпшує їх унаочнення.
Особливої уваги заслуговує використання описаної програми у навчальному процесі під час ознайомлення студентів з прийомами обробки інформації, що отримана рентгенівською чи магнітно-резонансною томографією. Комп'ютерна програма також може бути використана при демонструванні прикладних можливостей графічного програмування у середовищі Delphi.
ЛІТЕРАТУРА
1. Гринзоу Лу. Философия программирования для Windows 95/NT: пер. с анг. - СПб.: Символ-Плюс, 1997. - 640 с.
2. Дарахвелидзе П.Г., Марков Е.П. Delphi - среда визуального программирования. - СПб: BHV-Санкт-Петербург, 1996. - 352 с.
3. Епашенников А.М., Епашенников В.А. Программирование в среде Delphi: В 4-х частях. - М.: Диалог-МИФИ, 1997-98.
4. Культин Н.Б. Программирование на Object Pascal в Delphi 5. - СПб: BHV-Санкт-Петербург, 2000. - 464 с.
5. Мэтьюз Джон Г., Финк Куртис Д. Численные методы. Использование MATLAB, 3-е издание.: Пер. с англ. - М.: Издательский дом "Вильямс", 2001. - 720 с.
6. Сван Т. Основы программирования в Delphi для Windows 95: Пер. с англ. - К.: Диалектика, 1996. - 480 с.
7. Фаронов В.В. Delphi 5. Руководство программиста. - М.: Нолидж, 2001. - 880 с.
Loading...

 
 

Цікаве