git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@26 05c56307-c608-d34a-929d-697000501d7a
311 lines
9.3 KiB
ObjectPascal
311 lines
9.3 KiB
ObjectPascal
unit EditorsStylesDemoConvert;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, EditorsStylesDemoBase, cxHint, cxLookAndFeelPainters, StdCtrls,
|
|
cxButtons, cxImage, cxDropDownEdit, cxCheckBox, cxLabel, cxTextEdit,
|
|
cxMaskEdit, cxSpinEdit, cxContainer, cxEdit, cxTrackBar,
|
|
cxControls, cxGroupBox, cxSpinButton, cxProgressBar, ComCtrls, ExtCtrls,
|
|
cxSplitter, cxPropertiesStore, Menus, jpeg, EditorsStylesDemoUtils, cxMemo,
|
|
ImgList, cxGraphics;
|
|
|
|
type
|
|
TEditorsStylesDemoConvertFrame = class(TEditorsStylesDemoBaseFrame)
|
|
OpenDialog: TOpenDialog;
|
|
pnlImage: TPanel;
|
|
ScrollBox: TScrollBox;
|
|
cxImage: TcxImage;
|
|
Panel2: TPanel;
|
|
cxSplitter1: TcxSplitter;
|
|
gbConvertingOptions: TcxGroupBox;
|
|
gbImageQuality: TcxGroupBox;
|
|
lbBestQuality: TcxLabel;
|
|
cxBestComp: TcxLabel;
|
|
tbImageQuality: TcxTrackBar;
|
|
cbGrayScale: TcxCheckBox;
|
|
lbProgressive: TcxCheckBox;
|
|
sbImageQuality: TcxSpinButton;
|
|
Panel4: TPanel;
|
|
btnLoadImage: TcxButton;
|
|
cxGroupBox1: TcxGroupBox;
|
|
cxProgressBar: TcxProgressBar;
|
|
cxLabel1: TcxLabel;
|
|
cxLabel3: TcxLabel;
|
|
cxTrackBar: TcxTrackBar;
|
|
cxTextEdit: TcxTextEdit;
|
|
cxSplitter2: TcxSplitter;
|
|
SaveDialog: TSaveDialog;
|
|
Panel3: TPanel;
|
|
bntConvert: TcxButton;
|
|
cxLabel2: TcxLabel;
|
|
ScrollBox1: TScrollBox;
|
|
imgPreview: TcxImage;
|
|
btnPreview: TcxButton;
|
|
gbDisplayOptions: TcxGroupBox;
|
|
lbScale: TcxLabel;
|
|
cbScale: TcxComboBox;
|
|
sbScale: TcxSpinButton;
|
|
meCompressionQuality: TcxMaskEdit;
|
|
procedure btnLoadImageClick(Sender: TObject);
|
|
procedure cxTrackBarPropertiesChange(Sender: TObject);
|
|
procedure cxTextEditPropertiesChange(Sender: TObject);
|
|
procedure bntConvertClick(Sender: TObject);
|
|
procedure tbImageQualityPropertiesChange(Sender: TObject);
|
|
procedure sbImageQualityPropertiesChange(Sender: TObject);
|
|
procedure btnPreviewClick(Sender: TObject);
|
|
procedure btnGetDrawParams(Sender: TcxCustomButton;
|
|
AState: TcxButtonState; var AColor: TColor; AFont: TFont);
|
|
procedure cbScalePropertiesChange(Sender: TObject);
|
|
procedure sbScalePropertiesEditValueChanged(Sender: TObject);
|
|
procedure cxTrackBarPropertiesGetThumbRect(Sender: TObject;
|
|
var ARect: TRect);
|
|
procedure cxTrackBarPropertiesDrawThumb(Sender: TObject;
|
|
ACanvas: TcxCanvas; const ARect: TRect);
|
|
private
|
|
FBitmap: TBitmap;
|
|
procedure AdjustTrackBarThumb(AStyleSheetType: TcxStyleSheetType;
|
|
ATrackBar: TcxTrackBar; ABitmap: TBitmap);
|
|
function GetJpegOptions: TJPEGOptions;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure ChangeDisplayStyle(ADisplayStyle: TcxStyleSheetType); override;
|
|
function GetStyleBackgroundColor: TColor; override;
|
|
function Name: string; override;
|
|
function BriefName: string; override;
|
|
function StylesIniPath: string; override;
|
|
function MenuOpenFileVisible: Boolean; override;
|
|
procedure OpenFile(Sender: TObject); override;
|
|
function Description: String; override;
|
|
end;
|
|
|
|
var
|
|
EditorsStylesDemoConvertFrame: TEditorsStylesDemoConvertFrame;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
const
|
|
AThumbImagesPath = 'StylesFrmStylePalette\';
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.btnLoadImageClick(Sender: TObject);
|
|
begin
|
|
if OpenDialog.Execute then
|
|
begin
|
|
cxImage.Picture.LoadFromFile(OpenDialog.FileName);
|
|
FFileName := OpenDialog.FileName;
|
|
DoOnFileNameChanged;
|
|
cxImage.Width := cxImage.Picture.Width;
|
|
cxImage.Height := cxImage.Picture.Height;
|
|
end;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.cxTrackBarPropertiesChange(Sender: TObject);
|
|
begin
|
|
cxImage.Width := (cxImage.Picture.Width * cxTrackBar.Position) div 100;
|
|
cxImage.Height := (cxImage.Picture.Height * cxTrackBar.Position) div 100;
|
|
cxProgressBar.Position := cxTrackBar.Position;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.cxTextEditPropertiesChange(
|
|
Sender: TObject);
|
|
var
|
|
Val: Integer;
|
|
begin
|
|
if cxTextEdit.Text <> '' then
|
|
begin
|
|
Val := StrToInt(cxTextEdit.Text);
|
|
cxTrackBar.Properties.Max := Val;
|
|
cxProgressBar.Properties.Max := Val;
|
|
cxProgressBar.Properties.OverloadValue := 100;
|
|
cxProgressBar.Properties.PeakValue := 100;
|
|
end;
|
|
end;
|
|
|
|
constructor TEditorsStylesDemoConvertFrame.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FBitmap := TBitmap.Create;
|
|
FBitmap.TransparentColor := clFuchsia;
|
|
FBitmap.Transparent := True;
|
|
if cxImage.Picture <> nil then
|
|
begin
|
|
cxImage.Width := cxImage.Picture.Width;
|
|
cxImage.Height := cxImage.Picture.Height;
|
|
end;
|
|
HintStyle := hcstLightSlideLeft;
|
|
FFileName := 'Untitled';
|
|
FDisplayStyle := shtBrick;
|
|
FTempDisplayStyle := shtBrick;
|
|
btnPreviewClick(Self);
|
|
end;
|
|
|
|
destructor TEditorsStylesDemoConvertFrame.Destroy;
|
|
begin
|
|
FBitmap.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TEditorsStylesDemoConvertFrame.GetJpegOptions: TJPEGOptions;
|
|
begin
|
|
Result.CompressionQuality := meCompressionQuality.EditValue;
|
|
Result.Grayscale := cbGrayScale.Checked;
|
|
Result.ProgressiveEncoding := lbProgressive.Checked;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.bntConvertClick(Sender: TObject);
|
|
begin
|
|
if SaveDialog.Execute then
|
|
ConvertBitmapToJPEG(cxImage.Picture.Bitmap, SaveDialog.FileName, GetJpegOptions());
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.tbImageQualityPropertiesChange(
|
|
Sender: TObject);
|
|
begin
|
|
sbImageQuality.Value := tbImageQuality.Position;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.sbImageQualityPropertiesChange(
|
|
Sender: TObject);
|
|
begin
|
|
tbImageQuality.Position := sbImageQuality.Value;
|
|
end;
|
|
|
|
function TEditorsStylesDemoConvertFrame.Name: string;
|
|
begin
|
|
Result := 'Image Processing';
|
|
end;
|
|
|
|
function TEditorsStylesDemoConvertFrame.BriefName: string;
|
|
begin
|
|
Result := 'Image';
|
|
end;
|
|
|
|
function TEditorsStylesDemoConvertFrame.StylesIniPath: string;
|
|
begin
|
|
Result := 'StylesFrmConvert\';
|
|
end;
|
|
|
|
function TEditorsStylesDemoConvertFrame.MenuOpenFileVisible: Boolean;
|
|
begin
|
|
Result := True
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.OpenFile(Sender: TObject);
|
|
begin
|
|
btnLoadImageClick(nil);
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.btnPreviewClick(Sender: TObject);
|
|
var
|
|
J: TJPEGImage;
|
|
AJPEGOptions: TJPEGOptions;
|
|
begin
|
|
J := TJPEGImage.Create;
|
|
ScrollBox1.Visible := False;
|
|
try
|
|
J.Assign(cxImage.Picture.Graphic);
|
|
AJPEGOptions := GetJPEGOptions;
|
|
J.CompressionQuality := AJPEGOptions.CompressionQuality;
|
|
J.ProgressiveEncoding := AJPEGOptions.ProgressiveEncoding;
|
|
J.ProgressiveDisplay := True;
|
|
J.Compress;
|
|
J.Smoothing := not J.Smoothing;
|
|
imgPreview.Picture.Assign(J);
|
|
TJpegImage(imgPreview.Picture.Graphic).Grayscale := AJPEGOptions.Grayscale;
|
|
TJpegImage(imgPreview.Picture.Graphic).ProgressiveDisplay := True;
|
|
cbScalePropertiesChange(cbScale);
|
|
finally
|
|
ScrollBox1.Visible := True;
|
|
J.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.btnGetDrawParams(
|
|
Sender: TcxCustomButton; AState: TcxButtonState; var AColor: TColor;
|
|
AFont: TFont);
|
|
begin
|
|
AFont.Color := Sender.Font.Color;
|
|
end;
|
|
|
|
function TEditorsStylesDemoConvertFrame.GetStyleBackgroundColor: TColor;
|
|
begin
|
|
Result := gbConvertingOptions.Color;
|
|
end;
|
|
|
|
function TEditorsStylesDemoConvertFrame.Description: String;
|
|
begin
|
|
Result := 'Image Processing Notes';
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.cbScalePropertiesChange(
|
|
Sender: TObject);
|
|
var
|
|
JPEGScale: TJPEGScale;
|
|
begin
|
|
JPEGScale := jsFullSize;
|
|
if TcxComboBox(Sender).EditValue = 'Full Size' then
|
|
JPEGScale := jsFullSize else
|
|
if TcxComboBox(Sender).EditValue = 'Half' then
|
|
JPEGScale := jsHalf else
|
|
if TcxComboBox(Sender).EditValue = 'Quarter' then
|
|
JPEGScale := jsQuarter else
|
|
if TcxComboBox(Sender).EditValue = 'Eighth' then
|
|
JPEGScale := jsEighth;
|
|
TJpegImage(imgPreview.Picture.Graphic).Scale := JPEGScale;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.sbScalePropertiesEditValueChanged(
|
|
Sender: TObject);
|
|
begin
|
|
cbScale.ItemIndex := sbScale.Value;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.cxTrackBarPropertiesGetThumbRect(
|
|
Sender: TObject; var ARect: TRect);
|
|
begin
|
|
ARect := FBitmap.Canvas.ClipRect;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.cxTrackBarPropertiesDrawThumb(
|
|
Sender: TObject; ACanvas: TcxCanvas; const ARect: TRect);
|
|
begin
|
|
ACanvas.Draw(ARect.Left, ARect.Top, FBitmap);
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.ChangeDisplayStyle(
|
|
ADisplayStyle: TcxStyleSheetType);
|
|
begin
|
|
inherited ChangeDisplayStyle(ADisplayStyle);
|
|
AdjustTrackBarThumb(ADisplayStyle, cxTrackBar, FBitmap);
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoConvertFrame.AdjustTrackBarThumb(
|
|
AStyleSheetType: TcxStyleSheetType; ATrackBar: TcxTrackBar;
|
|
ABitmap: TBitmap);
|
|
begin
|
|
case AStyleSheetType of
|
|
shtWood:
|
|
begin
|
|
ABitmap.LoadFromFile(AThumbImagesPath + 'Wood.bmp');
|
|
ATrackBar.Properties.ThumbType := cxttCustom;
|
|
end;
|
|
shtDeepSea:
|
|
begin
|
|
ABitmap.LoadFromFile(AThumbImagesPath + 'DeepSea.bmp');
|
|
ATrackBar.Properties.ThumbType := cxttCustom;
|
|
end;
|
|
else
|
|
ATrackBar.Properties.ThumbType := cxttRegular;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
EditorsStylesDemoFrameManager.RegisterFrameClass(TEditorsStylesDemoConvertFrame);
|
|
|
|
end.
|
|
|