Урок 10 - Вывод графики на экранDelphi , Технологии , KOL и MCKУрок 10 - Вывод графики на экран
Ведущий раздела KOL и MCK: Анатолий aka XVeL Полную версию библиотеки KOL и MCK можно скачать здесь. Расскажем про основы вывода графических изображений с помощью KOL. А основы (в моем понимании) - это обычный вывод растровой картинки :) C помощью КOL вы сможете выводить на экран только bmp. Для того чтобы выводить jpg и gif вы должны подключить JpegObj и KolGif. Благодаря этим дополнительным библиотекам ваша программа конечно станет большего размера, но зато сможет показывать картинки этих двух форматов. Для того чтобы работать с изображениями вы должны создать объекты типа
pBitmap, pGif , pJpeg. Для каждого формата изображения свой тип
объекта. Ниже привожу конструкторы этих объектов.
После создания объекта вы можете загрузить изображения. Все эти объекты поддерживают загрузку из файла и из потока (через свойства LoadFromFile и LoadFromStream). PBitmap может кроме этого загружать изображения из ресурсов. Теперь про то, где будет отображаться рисунок. Фактически можно рисовать почти на любом компоненте, но все таки предпочтительней Paintbox. Поэтому далее говоря про PaintBox, я буду подразумевать и другие поверхности. PaintBox имеет следующей конструктор: function NewPaintbox( AParent: PControl ): PControl; Создав PaintBox, вам надо указать процедуру обрабатывающую событие
OnPaint.
Draw - обычная прорисовка с сохранением размера
рисунка. При рисование через Draw или DrawTransparent размер PaintBox должен быть равен размеру рисунка. Если этого не произойдет (например PaintBox больше) то часть PaintBox которая "выпирает" не будет прорисовывается и будет прозрачной. А "дырка" в окне программы - это как то не эстетично :) Хватит философствовать, пора и показать пример. В нем мы будем использовать ScrollBox для более удобного просмотра выходящих за пределы окна больших картинок. program Primer_4; uses windows, messages, kol, JpegObj, KOLGIF; {$R *.RES} var Form, pTop, PB, buOpen, SBox : pControl; ext : string; bmp : pBitmap; Gif : pGif; Jpg : pJpeg; dlgOpen : pOpenSaveDialog; /////////////////////////////////////////////////////////// procedure DrawPaint( Dummy: Pointer; Sender: PControl; DC: HDC ); begin if AnsiCompareText(ext, '.bmp') = 0 then Bmp.Draw(PB.Canvas.Handle, 0, 0); if AnsiCompareText(ext, '.gif') = 0 then Gif.Draw(PB.Canvas.Handle, 0, 0); if AnsiCompareText(ext, '.jpg') = 0 then jpg.Draw(PB.Canvas.Handle, 0, 0); end; /////////////////////////////////////////////////////////// procedure OpenPic ( Dummy : Pointer; Sender : PControl ); begin if dlgOpen = nil then dlgOpen := NewOpenSaveDialog('Открыть рисунок', '', []); if PB = nil then begin PB := NewPaintBox(SBox); PB.OnPaint := TOnPaint( MakeMethod( nil, @DrawPaint ) ); end; dlgOpen.Filter := 'Рисунки (bmp,gif,jpg)|*.bmp;*.gif;*.jpg'; if dlgOpen.Execute then begin ext := ExtractFileExt(dlgOpen.Filename); if AnsiCompareText(ext, '.bmp') = 0 then begin if BMP = nil then Bmp := NewBitmap( 0, 0 ); Bmp.LoadFromFile(dlgOpen.Filename); PB.Width := Bmp.Width ; PB.Height:= Bmp.Height; end; if AnsiCompareText(ext, '.gif') = 0 then begin if Gif = nil then Gif := NewGif; Gif.LoadFromFile(dlgOpen.Filename); PB.Width := Gif.Width ; PB.Height:= Gif.Height; end; if AnsiCompareText(ext, '.jpg') = 0 then begin if jpg = nil then jpg := NewJpeg; jpg.LoadFromFile(dlgOpen.Filename); PB.Width := jpg.Width ; PB.Height:= jpg.Height; end; Form.StatusText[0] := PChar(ExtractFileName(dlgOpen.Filename)); end; end; ////////////////////////////////////////////////////////// begin Applet := NewApplet('Пример # 4 (Работа с графикой)'); Form := NewForm(Applet, 'Пример # 4').SetSize(640, 450); Form.CenterOnParent; // размещаем наше окно посередине экрана Form.Font.FontName := 'MS Sans Serif'; Form.Font.FontHeight := 9; // -------- рисуем интерфейс ----------------------------- pTop := NewPanel(Form, esRaised).SetAlign(caTop); pTop.Height := 35; buOpen := NewButton(pTop, 'Открыть').SetAlign(caLeft); buOpen.OnClick := TOnEvent( MakeMethod( nil, @OpenPic ) ); SBox := NewScrollBoxEx(Form, esLowered).SetAlign(caClient); // ------------------------------------------------------- run(Applet); end. Исходный текст : 2,48 Кб ; размер программы: 102Кб(без сжатия и замены
System)
Статья «Урок 10 - Вывод графики на экран» рассказывает о том, как использовать библиотеку KOL для вывода растровых и векторных изображений на экран. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |