Проект состоит из двух форм. Главная форма - FormMain содержит компоненты для настройки свойств картинки и кнопку - чтобы открыть файл с картинкой. Цель - показать основные возможности Делфи при работе с картинками JPEG. (В последне время появились файлы с расширением .jpe - после переименования в .jpg их тоже можно смотреть). Файлы .bmp тоже просматриваются, но настройки для них не работают.
Для картинок JPEG сделаны настройки:
Другая форма - FKart содержит компонент Image1 и служит для показа картинки. Форма прячется при
щелчке по картинке.
Текст обоих модулей и проекта:
{ ************** ShowJpeg.dpr *****************} program ShowJpeg; uses Forms, ServerMain in 'ServerMain.pas' {FormMain}, UKarta in 'UKarta.pas' {FKarta}; {$R *.res} begin Application.Initialize; Application.CreateForm(TFormMain, FormMain); Application.CreateForm(TFKarta, FKarta); Application.Run; end. { ************** ServerMain.pas *****************} unit ServerMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls, ComCtrls, ExtCtrls, ExtDlgs; type TFormMain = class(TForm) OPD1: TOpenPictureDialog; btnSelect: TButton; gray: TCheckBox; gbPerformance: TGroupBox; rbBestSpeed: TRadioButton; rbBestQuality: TRadioButton; gbPixelFormat: TGroupBox; rb24Bit: TRadioButton; rb8Bit: TRadioButton; gbScale: TGroupBox; rbFullSize: TRadioButton; rbHalf: TRadioButton; rbQuarter: TRadioButton; rbEighth: TRadioButton; cbSmooth: TCheckBox; procedure SetJPEGOptions2(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnSelectClick(Sender: TObject); procedure btnRepeatClick(Sender: TObject); procedure grayClick(Sender: TObject); procedure rbFullSizeClick(Sender: TObject); procedure rbHalfClick(Sender: TObject); procedure rbQuarterClick(Sender: TObject); procedure rbEighthClick(Sender: TObject); procedure rb8BitClick(Sender: TObject); procedure rb24BitClick(Sender: TObject); private { Private declarations TJPegImage } public { Public declarations } end; var FormMain: TFormMain; implementation uses JPeg, UKarta; {$R *.dfm} Var aJpeg:TJpegImage=nil; MStream: TMemoryStream=nil; procedure TFormMain.FormCreate(Sender: TObject); begin Top := 10; Left := 10; end; procedure TFormMain.btnSelectClick(Sender: TObject); var FName: string; begin if OPD1.Execute then FName := OPD1.FileName else exit; try FKarta.Image1.Picture.LoadFromFile(FName); except on EInvalidGraphic do FKarta.Image1.Picture.Graphic := nil; end; SetJPEGOptions2(self); FKarta.ClientHeight:= FKarta.Image1.Height; FKarta.ClientWidth:= FKarta.Image1.Width; FKarta.Show; end; procedure TFormMain.SetJPEGOptions2(Sender: TObject); var Temp: Boolean; begin Temp := FKarta.Image1.Picture.Graphic is TJPEGImage; if Temp then with TJPEGImage(FKarta.Image1.Picture.Graphic) do begin if Gray.Checked then Grayscale:= true else Grayscale:= false; if rbBestSpeed.Checked then Performance:= jpBestSpeed else if rbBestQuality.Checked then Performance:= jpBestQuality; if rb24Bit.Checked then PixelFormat:= jf24Bit else if rb8Bit.Checked then PixelFormat:= jf8Bit; if rbFullSize.Checked then Scale:= jsFullSize else if rbHalf.Checked then Scale:= jsHalf else if rbQuarter.Checked then Scale:= jsQuarter else if rbEighth.Checked then Scale:= jsEighth; ProgressiveDisplay := true; if cbSmooth.Checked then Smoothing:= true else Smoothing:= false; end; FKarta.Image1.IncrementalDisplay := true; end; procedure TFormMain.btnRepeatClick(Sender: TObject); begin // Эта кнопка уже не нужна, а процедура осталась (нужна)! if not (FKarta.Image1.Picture.Graphic is TJPEGImage) then exit; // т е если картинка не загружена или типа TBitMap, TIcon SetJPEGOptions2(Sender); FKarta.ClientHeight:= FKarta.Image1.Height; FKarta.ClientWidth:= FKarta.Image1.Width; FKarta.Show; end; { ****** СПРАВКА: TJPEGImage.Properties: ******* property Grayscale: Boolean; // серая картинка property Performance: TJPEGPerformance; type TJPEGPerformance = (jpBestQuality, jpBestSpeed); // наилучшее: качество или скорость property PixelFormat: TJPEGPixelFormat; type TJPEGPixelFormat = (jf24Bit, jf8Bit); property Scale: TJPEGScale; // Масштаб: 100%, 50%, 25%, 12,5% // (Масштаб мож быть меньше, если уменьшить окно, НО НЕ БОЛЬШЕ !! type TJPEGScale = (jsFullSize, jsHalf, jsQuarter, jsEighth); property Smoothing: Boolean; } procedure TFormMain.grayClick(Sender: TObject); begin btnRepeatClick(Sender); end; procedure TFormMain.rbFullSizeClick(Sender: TObject); begin btnRepeatClick(Sender); end; procedure TFormMain.rbHalfClick(Sender: TObject); begin btnRepeatClick(Sender); end; procedure TFormMain.rbQuarterClick(Sender: TObject); begin btnRepeatClick(Sender); end; procedure TFormMain.rbEighthClick(Sender: TObject); begin btnRepeatClick(Sender); end; procedure TFormMain.rb8BitClick(Sender: TObject); begin btnRepeatClick(Sender); end; procedure TFormMain.rb24BitClick(Sender: TObject); begin btnRepeatClick(Sender); end; end. { ************** UKarta.pas *****************} unit UKarta; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TFKarta = class(TForm) Image1: TImage; procedure Image1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FKarta: TFKarta; implementation {$R *.dfm} procedure TFKarta.Image1Click(Sender: TObject); begin Hide; end; end.(Имя ServerMain.pas - это след переделки из сетевого приложения, которое, возможно, будет представлено)