Стартовый пул

This commit is contained in:
2024-04-02 08:46:59 +03:00
parent fd57fffd3a
commit 3bb34d000b
5591 changed files with 3291734 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="12"/>
<General>
<Flags>
<CompatibilityMode Value="True"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<Scaled Value="True"/>
<ResourceType Value="res"/>
<UseXPManifest Value="True"/>
<XPManifest>
<DpiAware Value="True"/>
</XPManifest>
<Icon Value="0"/>
</General>
<i18n>
<EnableI18N LFM="False"/>
</i18n>
<VersionInfo>
<UseVersionInfo Value="True"/>
<MinorVersionNr Value="2"/>
</VersionInfo>
<BuildModes Count="2">
<Item1 Name="Debug" Default="True"/>
<Item2 Name="Release">
<CompilerOptions>
<Version Value="11"/>
<Target>
<Filename Value="ProjectBGRAImageManipulationDemo"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<Optimizations>
<OptimizationLevel Value="3"/>
<VariablesInRegisters Value="True"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="False"/>
<StripSymbols Value="True"/>
</Debugging>
<LinkSmart Value="True"/>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
</CompilerOptions>
</Item2>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
</PublishOptions>
<RunParams>
<local>
<LaunchingApplication PathPlusParams="/usr/bin/xterm -T &apos;Lazarus Run Output&apos; -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default">
<local>
<LaunchingApplication PathPlusParams="/usr/bin/xterm -T &apos;Lazarus Run Output&apos; -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</Mode0>
</Modes>
</RunParams>
<RequiredPackages Count="2">
<Item1>
<PackageName Value="bgracontrols"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
</Item2>
</RequiredPackages>
<Units Count="2">
<Unit0>
<Filename Value="ProjectBGRAImageManipulationDemo.lpr"/>
<IsPartOfProject Value="True"/>
</Unit0>
<Unit1>
<Filename Value="unitbgraimagemanipulationdemo.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="FormBGRAImageManipulationDemo"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="UnitBGRAImageManipulationDemo"/>
</Unit1>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<Target>
<Filename Value="ProjectBGRAImageManipulationDemo"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<IncludeAssertionCode Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<Checks>
<IOChecks Value="True"/>
<RangeChecks Value="True"/>
<OverflowChecks Value="True"/>
<StackChecks Value="True"/>
</Checks>
<Optimizations>
<VariablesInRegisters Value="True"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf2Set"/>
<UseHeaptrc Value="True"/>
<StripSymbols Value="True"/>
<UseExternalDbgSyms Value="True"/>
</Debugging>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
</Item1>
<Item2>
<Name Value="ECodetoolError"/>
</Item2>
<Item3>
<Name Value="EFOpenError"/>
</Item3>
</Exceptions>
</Debugging>
</CONFIG>

View File

@@ -0,0 +1,21 @@
program ProjectBGRAImageManipulationDemo;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, UnitBGRAImageManipulationDemo, bgracontrols;
{$R *.res}
begin
Application.Scaled:=True;
Application.Title:='';
Application.Initialize;
Application.CreateForm(TFormBGRAImageManipulationDemo, FormBGRAImageManipulationDemo);
Application.Run;
end.

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<CONFIG>
<BGRAImageManipulation.CropAreas Count="3" Selected="2">
<Item0 Name="Left" Rotate="0" AspectRatio="3:4" KeepAspectRatio="2">
<Area Top="45" Left="110" Width="273" Height="365"/>
</Item0>
<Item1 Name="Right Top" Rotate="0" AspectRatio="16:9" KeepAspectRatio="1">
<Area Top="45" Left="400" Width="300" Height="168"/>
</Item1>
<Item2 Name="Right Bottom" Rotate="0" AspectRatio="3:4" KeepAspectRatio="0">
<Area Top="260" Left="400" Width="250" Height="150"/>
</Item2>
</BGRAImageManipulation.CropAreas>
</CONFIG>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,835 @@
unit UnitBGRAImageManipulationDemo;
{ ============================================================================
BGRAImageManipulation Demon Unit
originally written in 2011 by - Emerson Cavalcanti
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
for more details.
You should have received a copy of the GNU Library General Public License
along with this library; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
============================================================================
Description:
TFormBGRAImageManipulationDemo is a sample form to use the component
TBGRAImageManipulation.
============================================================================
History:
2011-05-06 - Emerson Cavalcanti
- Initial version
2011-06-01 - Emerson Cavalcanti
- Relayout of form.
- Add control to toggle the option 'Keep Aspect Ratio' in
component
2011-06-18 - Emerson Cavalcanti
- Relayout of form for expand component on resize.
- Add control to rotate image
2013-10-13 - Massimo Magnano
- Add multi crop demo
2023-08 - Resolution, Save in various formats, Z Order
============================================================================
}
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
Buttons, ExtDlgs, ComCtrls, ExtCtrls, Menus, Spin,
{$IFDEF FPC} FPImage,{$ENDIF} BGRAImageManipulation,
BGRABitmap, BGRABitmapTypes, BCPanel, BCButton, BGRASpeedButton, BCLabel, Laz2_XMLCfg;
type
{ TFormBGRAImageManipulationDemo }
TFormBGRAImageManipulationDemo = class(TForm)
Background: TBCPanel;
BCLabel1: TBCLabel;
BCLabel2: TBCLabel;
BCLabel3: TBCLabel;
BCLabel4: TBCLabel;
BCLabel5: TBCLabel;
BCLabel6: TBCLabel;
BCLabel7: TBCLabel;
BCPanelCropAreaLoad: TBCPanel;
BCPanelCropArea: TBCPanel;
BCPanelCropAreas: TBCPanel;
btApplyAspectRatio: TSpeedButton;
btBox_Add: TBGRASpeedButton;
btBox_Del: TBGRASpeedButton;
btCFlipHLeft: TSpeedButton;
btCFlipHRight: TSpeedButton;
btCFlipVUp: TSpeedButton;
btCFlipVDown: TSpeedButton;
btCropDuplicate: TSpeedButton;
btnEmptyImage: TBCButton;
btnLoadCropList: TBCButton;
btnSaveCropList: TBCButton;
btnSavePictureAll: TBCButton;
btnShape: TBCButton;
btnOpenPicture: TBCButton;
BGRAImageManipulation: TBGRAImageManipulation;
btnGetAspectRatioFromImage: TBCButton;
btnSavePicture: TBCButton;
btnSetAspectRatio: TBCButton;
btnRotateLeft: TBCButton;
btnRotateRight: TBCButton;
btCRotateRight: TSpeedButton;
btCRotateLeft: TSpeedButton;
cbBoxList: TComboBox;
chkFullSize: TCheckBox;
cbSaveFormat: TComboBox;
chkCopyProperties: TCheckBox;
edAspectPersonal: TEdit;
edAspectRatio: TEdit;
edHeight: TFloatSpinEdit;
edLeft: TFloatSpinEdit;
edName: TEdit;
edTop: TFloatSpinEdit;
edUnit_Type: TComboBox;
edWidth: TFloatSpinEdit;
KeepAspectRatio: TCheckBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
lbResolution: TLabel;
lbAspectRatio: TLabel;
lbOptions: TLabel;
lbCompression: TLabel;
lbOptions1: TLabel;
OpenCropList: TOpenDialog;
OpenPictureDialog: TOpenPictureDialog;
rgAspect: TRadioGroup;
SaveCropList: TSaveDialog;
SavePictureDialog: TSavePictureDialog;
RateCompression: TTrackBar;
SelectDirectoryDialog1: TSelectDirectoryDialog;
SpeedButton1: TSpeedButton;
btZFront: TSpeedButton;
btZBack: TSpeedButton;
btZDown: TSpeedButton;
btZUp: TSpeedButton;
btCropDuplicateOp: TSpeedButton;
procedure btCFlipHLeftClick(Sender: TObject);
procedure btCFlipHRightClick(Sender: TObject);
procedure btCFlipVDownClick(Sender: TObject);
procedure btCFlipVUpClick(Sender: TObject);
procedure btCropDuplicateClick(Sender: TObject);
procedure btCRotateLeftClick(Sender: TObject);
procedure btCRotateRightClick(Sender: TObject);
procedure btnEmptyImageClick(Sender: TObject);
procedure btnGetAspectRatioFromImageClick(Sender: TObject);
procedure btnLoadCropListClick(Sender: TObject);
procedure btnOpenPictureClick(Sender: TObject);
procedure btnRotateLeftClick(Sender: TObject);
procedure btnRotateRightClick(Sender: TObject);
procedure btnSaveCropListClick(Sender: TObject);
procedure btnSavePictureAllClick(Sender: TObject);
procedure btnSavePictureClick(Sender: TObject);
procedure btnSetAspectRatioClick(Sender: TObject);
procedure btZBackClick(Sender: TObject);
procedure btZDownClick(Sender: TObject);
procedure btZFrontClick(Sender: TObject);
procedure btZUpClick(Sender: TObject);
procedure edNameChange(Sender: TObject);
procedure edUnit_TypeChange(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure KeepAspectRatioClick(Sender: TObject);
procedure btBox_AddClick(Sender: TObject);
procedure btBox_DelClick(Sender: TObject);
procedure cbBoxListChange(Sender: TObject);
procedure edHeightChange(Sender: TObject; AByUser: boolean);
procedure edLeftChange(Sender: TObject; AByUser: boolean);
procedure edTopChange(Sender: TObject; AByUser: boolean);
procedure edWidthChange(Sender: TObject; AByUser: boolean);
procedure FormCreate(Sender: TObject);
procedure rgAspectSelectionChanged(Sender: TObject);
procedure btApplyAspectRatioClick(Sender: TObject);
procedure AddedCrop(Sender: TBGRAImageManipulation; CropArea: TCropArea);
procedure DeletedCrop(Sender: TBGRAImageManipulation; CropArea: TCropArea);
procedure ChangedCrop(Sender: TBGRAImageManipulation; CropArea: TCropArea);
procedure SelectedChangedCrop(Sender: TBGRAImageManipulation; CropArea: TCropArea);
procedure SpeedButton1Click(Sender: TObject);
private
{ private declarations }
lastNewBoxNum :Word;
changingAspect, closing,
inFillBoxUI :Boolean;
function GetCurrentCropArea: TCropArea;
procedure FillBoxUI(ABox :TCropArea);
procedure SaveCallBack(Bitmap :TBGRABitmap; CropArea: TCropArea; AUserData:Integer);
procedure UpdateBoxList;
public
{ public declarations }
end;
var
FormBGRAImageManipulationDemo: TFormBGRAImageManipulationDemo;
implementation
{$R *.lfm}
uses BGRAWriteBMP, BGRAReadWriteConfig;
const
ResUnitStr :array[TResolutionUnit] of String = ('ruNone', 'ruPixelsPerInch', 'ruPixelsPerCentimeter');
{ TFormBGRAImageManipulationDemo }
procedure TFormBGRAImageManipulationDemo.btnOpenPictureClick(Sender: TObject);
var
Bitmap: TBGRABitmap;
test:Integer;
// reader:TFPCustomImageReader;
begin
// To put a new image in the component, you will simply need execute open
// picture dialog to locate an image...
if OpenPictureDialog.Execute then
begin
// ...and create a new TBGRABitmap and load to it
Bitmap := TBGRABitmap.Create;
Bitmap.LoadFromFile(OpenPictureDialog.FileName);
// Finally, associate the image into component
BGRAImageManipulation.Bitmap := Bitmap;
Bitmap.Free;
lbResolution.Caption:='Resolution : '+#13#10+' '+
FloatToStrF(BGRAImageManipulation.Bitmap.ResolutionX, ffFixed, 15, 3)+' x '+
FloatToStrF(BGRAImageManipulation.Bitmap.ResolutionY, ffFixed, 15, 3)+' '+ResUnitStr[BGRAImageManipulation.Bitmap.ResolutionUnit]+#13#10+
' '+FloatToStr(BGRAImageManipulation.Bitmap.ResolutionWidth)+' x '+FloatToStr(BGRAImageManipulation.Bitmap.ResolutionHeight)+#13#10+
' pixels '+IntToStr(BGRAImageManipulation.Bitmap.Width)+' x '+IntToStr(BGRAImageManipulation.Bitmap.Height);
if (BGRAImageManipulation.SelectedCropArea=nil)
then begin
edUnit_Type.ItemIndex:=Integer(BGRAImageManipulation.Bitmap.ResolutionUnit);
edLeft.MaxValue:=BGRAImageManipulation.Bitmap.ResolutionWidth;
edTop.MaxValue:=BGRAImageManipulation.Bitmap.ResolutionHeight;
edWidth.MaxValue:=BGRAImageManipulation.Bitmap.ResolutionWidth;
edHeight.MaxValue:=BGRAImageManipulation.Bitmap.ResolutionHeight;
end
else FillBoxUI(BGRAImageManipulation.SelectedCropArea);
end;
end;
procedure TFormBGRAImageManipulationDemo.btnRotateLeftClick(Sender: TObject);
begin
BGRAImageManipulation.rotateLeft;
end;
procedure TFormBGRAImageManipulationDemo.btnRotateRightClick(Sender: TObject);
begin
BGRAImageManipulation.rotateRight;
end;
procedure TFormBGRAImageManipulationDemo.btnGetAspectRatioFromImageClick(
Sender: TObject);
begin
if not (BGRAImageManipulation.Empty) then
begin
edAspectRatio.Text := BGRAImageManipulation.getAspectRatioFromImage(
BGRAImageManipulation.Bitmap);
end;
end;
procedure TFormBGRAImageManipulationDemo.btnEmptyImageClick(Sender: TObject);
var
emptyImg :TBGRABitmap;
begin
try
emptyImg :=TBGRABitmap.Create(0, 0);
BGRAImageManipulation.Bitmap :=emptyImg;
finally
emptyImg.Free;
end;
end;
procedure TFormBGRAImageManipulationDemo.btCRotateLeftClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil then
begin
if btCropDuplicateOp.Down then
begin
CropArea :=TCropArea.Create(BGRAImageManipulation, CropArea, True);
BGRAImageManipulation.SelectedCropArea :=CropArea;
end;
CropArea.RotateLeft;
end;
end;
procedure TFormBGRAImageManipulationDemo.btCFlipVDownClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil then
begin
if btCropDuplicateOp.Down then
begin
CropArea :=TCropArea.Create(BGRAImageManipulation, CropArea, True);
BGRAImageManipulation.SelectedCropArea :=CropArea;
end;
CropArea.FlipVDown;
end;
end;
procedure TFormBGRAImageManipulationDemo.btCFlipHLeftClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil then
begin
if btCropDuplicateOp.Down then
begin
CropArea :=TCropArea.Create(BGRAImageManipulation, CropArea, True);
BGRAImageManipulation.SelectedCropArea :=CropArea;
end;
CropArea.FlipHLeft;
end;
end;
procedure TFormBGRAImageManipulationDemo.btCFlipHRightClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil then
begin
if btCropDuplicateOp.Down then
begin
CropArea :=TCropArea.Create(BGRAImageManipulation, CropArea, True);
BGRAImageManipulation.SelectedCropArea :=CropArea;
end;
CropArea.FlipHRight;
end;
end;
procedure TFormBGRAImageManipulationDemo.btCFlipVUpClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil then
begin
if btCropDuplicateOp.Down then
begin
CropArea :=TCropArea.Create(BGRAImageManipulation, CropArea, True);
BGRAImageManipulation.SelectedCropArea :=CropArea;
end;
CropArea.FlipVUp;
end;
end;
procedure TFormBGRAImageManipulationDemo.btCropDuplicateClick(Sender: TObject);
var
newCropArea :TCropArea;
begin
if BGRAImageManipulation.SelectedCropArea<>nil then
begin
newCropArea :=TCropArea.Create(BGRAImageManipulation, BGRAImageManipulation.SelectedCropArea, True);
BGRAImageManipulation.SelectedCropArea :=newCropArea;
newCropArea.BorderColor :=VGALime;
end;
end;
procedure TFormBGRAImageManipulationDemo.btCRotateRightClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil then
begin
if btCropDuplicateOp.Down then
begin
CropArea :=TCropArea.Create(BGRAImageManipulation, CropArea, True);
BGRAImageManipulation.SelectedCropArea :=CropArea;
end;
CropArea.RotateRight;
end;
end;
procedure TFormBGRAImageManipulationDemo.btnLoadCropListClick(Sender: TObject);
begin
try
if OpenCropList.Execute
then BGRAImageManipulation.CropAreas.LoadFromFile(OpenCropList.FileName);
except
end;
end;
procedure TFormBGRAImageManipulationDemo.btnSaveCropListClick(Sender: TObject);
begin
try
if SaveCropList.Execute
then BGRAImageManipulation.CropAreas.SaveToFile(SaveCropList.FileName);
except
end;
end;
procedure TFormBGRAImageManipulationDemo.btnSavePictureClick(Sender: TObject);
var
curBitmap :TBGRABitmap;
begin
if SavePictureDialog.Execute then
begin
try
if (chkFullSize.Checked)
then curBitmap :=BGRAImageManipulation.getBitmap(Nil, chkCopyProperties.Checked)
else curBitmap :=BGRAImageManipulation.getResampledBitmap(Nil, chkCopyProperties.Checked);
curBitmap.SaveToFile(SavePictureDialog.FileName);
finally
curBitmap.Free;
end;
end;
end;
procedure TFormBGRAImageManipulationDemo.SaveCallBack(Bitmap: TBGRABitmap; CropArea: TCropArea; AUserData: Integer);
var
ext:String;
i:Integer;
begin
ext:=ImageHandlers.Extensions[cbSaveFormat.Items[cbSaveFormat.ItemIndex]];
i :=Pos(';', ext);
if (i>0) then ext :=Copy(ext, 1, i-1);
Bitmap.SaveToFile(SelectDirectoryDialog1.FileName+DirectorySeparator+CropArea.Name+'.'+ext);
end;
procedure TFormBGRAImageManipulationDemo.UpdateBoxList;
var
i :Integer;
CropArea,
SelArea:TCropArea;
begin
cbBoxList.OnChange:=nil;
//SelArea :=BGRAImageManipulation.SelectedCropArea;
cbBoxList.Clear;
for i:=0 to BGRAImageManipulation.CropAreas.Count-1 do
begin
CropArea :=BGRAImageManipulation.CropAreas.items[i];
cbBoxList.AddItem(CropArea.Name, CropArea);
end;
//BGRAImageManipulation.SelectedCropArea :=SelArea;
cbBoxList.ItemIndex:=cbBoxList.Items.IndexOfObject(BGRAImageManipulation.SelectedCropArea);
cbBoxList.OnChange:=@cbBoxListChange;
end;
procedure TFormBGRAImageManipulationDemo.btnSavePictureAllClick(Sender: TObject);
begin
if SelectDirectoryDialog1.Execute then
begin
if (chkFullSize.Checked)
then Self.BGRAImageManipulation.getAllBitmaps(@SaveCallBack, 0, chkCopyProperties.Checked)
else Self.BGRAImageManipulation.getAllResampledBitmaps(@SaveCallBack, 0, chkCopyProperties.Checked);
end;
end;
procedure TFormBGRAImageManipulationDemo.btnSetAspectRatioClick(Sender: TObject);
begin
try
BGRAImageManipulation.AspectRatio := edAspectRatio.Text;
except
on E: Exception do
begin
ShowMessage('This aspect ratio is invalid');
end;
end;
end;
procedure TFormBGRAImageManipulationDemo.btZBackClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil
then begin
CropArea.BringToBack;
UpdateBoxList;
end;
end;
procedure TFormBGRAImageManipulationDemo.btZDownClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil
then begin
CropArea.BringBackward;
UpdateBoxList;
end;
end;
procedure TFormBGRAImageManipulationDemo.btZFrontClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil
then begin
CropArea.BringToFront;
UpdateBoxList;
end;
end;
procedure TFormBGRAImageManipulationDemo.btZUpClick(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil
then begin
CropArea.BringForward;
UpdateBoxList;
end;
end;
procedure TFormBGRAImageManipulationDemo.edNameChange(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil
then CropArea.Name :=edName.Text;
end;
procedure TFormBGRAImageManipulationDemo.edUnit_TypeChange(Sender: TObject);
var
CropArea :TCropArea;
begin
CropArea :=GetCurrentCropArea;
if CropArea<>nil then
begin
CropArea.AreaUnit:=TResolutionUnit(edUnit_Type.ItemIndex);
FillBoxUI(CropArea);
end;
end;
procedure TFormBGRAImageManipulationDemo.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
closing :=True;
end;
procedure TFormBGRAImageManipulationDemo.KeepAspectRatioClick(Sender: TObject);
begin
BGRAImageManipulation.KeepAspectRatio := KeepAspectRatio.Checked;
edAspectRatio.Enabled := KeepAspectRatio.Checked;
btnSetAspectRatio.Enabled := KeepAspectRatio.Checked;
end;
procedure TFormBGRAImageManipulationDemo.btBox_AddClick(Sender: TObject);
var
newCropArea :TCropArea;
begin
if edUnit_Type.ItemIndex=0
then newCropArea :=BGRAImageManipulation.addCropArea(RectF(50, 50, 100, 100))
else newCropArea :=BGRAImageManipulation.addCropArea(RectF(1, 1, 2, 2), TResolutionUnit(edUnit_Type.ItemIndex));
newCropArea.BorderColor :=VGALime;
end;
procedure TFormBGRAImageManipulationDemo.btBox_DelClick(Sender: TObject);
var
CropArea :TCropArea;
curIndex :Integer;
begin
curIndex :=cbBoxList.ItemIndex;
if (curIndex>-1) then
begin
CropArea :=TCropArea(cbBoxList.Items.Objects[curIndex]);
BGRAImageManipulation.delCropArea(CropArea);
cbBoxList.ItemIndex:=cbBoxList.Items.IndexOfObject(BGRAImageManipulation.SelectedCropArea);
end;
FillBoxUI(BGRAImageManipulation.SelectedCropArea);
end;
procedure TFormBGRAImageManipulationDemo.cbBoxListChange(Sender: TObject);
begin
BGRAImageManipulation.SelectedCropArea :=TCropArea(cbBoxList.Items.Objects[cbBoxList.ItemIndex]);
end;
procedure TFormBGRAImageManipulationDemo.edHeightChange(Sender: TObject; AByUser: boolean);
var
CropArea :TCropArea;
begin
if inFillBoxUI then exit;
CropArea :=GetCurrentCropArea;
if (CropArea<>nil)
then CropArea.Height:=edHeight.Value;
end;
procedure TFormBGRAImageManipulationDemo.edLeftChange(Sender: TObject; AByUser: boolean);
var
CropArea :TCropArea;
begin
if inFillBoxUI then exit;
CropArea :=GetCurrentCropArea;
if (CropArea<>nil)
then CropArea.Left :=edLeft.Value;
end;
procedure TFormBGRAImageManipulationDemo.edTopChange(Sender: TObject; AByUser: boolean);
var
CropArea :TCropArea;
begin
if inFillBoxUI then exit;
CropArea :=GetCurrentCropArea;
if (CropArea<>nil)
then CropArea.Top :=edTop.Value;
end;
procedure TFormBGRAImageManipulationDemo.edWidthChange(Sender: TObject; AByUser: boolean);
var
CropArea :TCropArea;
begin
if inFillBoxUI then exit;
CropArea :=GetCurrentCropArea;
if (CropArea<>nil)
then CropArea.Width:=edWidth.Value;
end;
procedure TFormBGRAImageManipulationDemo.FormCreate(Sender: TObject);
var
i,j :Integer;
t,e:String;
begin
closing :=False;
changingAspect :=False;
inFillBoxUI :=False;
lastNewBoxNum :=0;
TStringList(cbBoxList.Items).OwnsObjects:=False;
j:=0;
for i :=0 to ImageHandlers.Count-1 do
begin
t :=ImageHandlers.TypeNames[i];
e :=ImageHandlers.Extensions[t];
if (ImageHandlers.ImageWriter[t]<>nil) then
begin
cbSaveFormat.Items.Add(t);
if (Pos('jpg', e)>0) then j:=i;
end;
end;
cbSaveFormat.ItemIndex:=j-1;
end;
procedure TFormBGRAImageManipulationDemo.rgAspectSelectionChanged(Sender: TObject);
begin
if changingAspect then Exit;
Case rgAspect.ItemIndex of
0 : BGRAImageManipulation.SelectedCropArea.KeepAspectRatio:=bParent;
1 : BGRAImageManipulation.SelectedCropArea.KeepAspectRatio:=bFalse;
2 : begin
BGRAImageManipulation.SelectedCropArea.KeepAspectRatio:=bTrue;
BGRAImageManipulation.SelectedCropArea.AspectRatio:=edAspectPersonal.Text;
end;
end;
end;
procedure TFormBGRAImageManipulationDemo.btApplyAspectRatioClick(Sender: TObject);
begin
if BGRAImageManipulation.SelectedCropArea.KeepAspectRatio=bTrue
then BGRAImageManipulation.SelectedCropArea.AspectRatio:=edAspectPersonal.Text
else begin
BGRAImageManipulation.SelectedCropArea.KeepAspectRatio:=bTrue;
BGRAImageManipulation.SelectedCropArea.AspectRatio:=edAspectPersonal.Text;
changingAspect :=True;
rgAspect.ItemIndex :=2;
changingAspect :=False;
end;
end;
procedure TFormBGRAImageManipulationDemo.AddedCrop(Sender: TBGRAImageManipulation; CropArea: TCropArea);
var
curIndex :Integer;
begin
curIndex :=BGRAImageManipulation.CropAreas.IndexOf(CropArea);
if (CropArea.Name='')
then CropArea.Name:='Name '+IntToStr(curIndex);
cbBoxList.AddItem(CropArea.Name, CropArea);
cbBoxList.ItemIndex:=cbBoxList.Items.IndexOfObject(CropArea);
//CropArea.AreaUnit:=BGRAImageManipulation.Bitmap.ResolutionUnit;
FillBoxUI(CropArea);
end;
procedure TFormBGRAImageManipulationDemo.DeletedCrop(Sender: TBGRAImageManipulation; CropArea: TCropArea);
var
delIndex :Integer;
begin
try
if not(closing) then
begin
delIndex :=cbBoxList.Items.IndexOfObject(CropArea);
if (delIndex<>-1)
then cbBoxList.Items.Delete(delIndex);
BCPanelCropArea.Enabled:=(cbBoxList.Items.Count>0);
end;
except
end;
//MessageDlg('Deleting Crop Area', 'Deleting '+CropArea.Name, mtInformation, [mbOk], 0);
end;
procedure TFormBGRAImageManipulationDemo.ChangedCrop(Sender: TBGRAImageManipulation; CropArea: TCropArea);
begin
if (cbBoxList.Items.Objects[cbBoxList.ItemIndex] = CropArea) then
begin
FillBoxUI(CropArea);
//if the Name is Changed change in the comboListbox
if (CropArea.Name<>cbBoxList.Items.Strings[cbBoxList.ItemIndex])
then cbBoxList.Items.Strings[cbBoxList.ItemIndex] :=CropArea.Name;
end;
end;
procedure TFormBGRAImageManipulationDemo.SelectedChangedCrop(Sender: TBGRAImageManipulation; CropArea: TCropArea);
var
newIndex :Integer;
begin
if (BGRAImageManipulation.SelectedCropArea <> nil)
then newIndex :=cbBoxList.Items.IndexOfObject(BGRAImageManipulation.SelectedCropArea) //BGRAImageManipulation.SelectedCropArea.Index;
else newIndex :=-1;
cbBoxList.ItemIndex:=newIndex;
FillBoxUI(BGRAImageManipulation.SelectedCropArea);
end;
procedure TFormBGRAImageManipulationDemo.SpeedButton1Click(Sender: TObject);
var
img, img2:TBGRABitmap;
wr:TBGRAWriterBMP;
wp:TFPPalette;
ReadWriteConfig, ReadWriteConfig2: TBGRAReadWriteConfig;
begin
//BGRAImageManipulation.SetEmptyImageSizeToCropAreas(False);
(*
img:=TBGRABitmap.Create('c:\Programming\Lazarus\tmp\test_0_gray.bmp');
wp:=img.Palette;
wr:=TBGRAWriterBMP.Create;
wr.BitsPerPixel:=8;
img2 :=img.GetPart(Rect(0,0,1176,1176));
wp:=img2.Palette;
img2.SaveToFile('test_a.bmp', wr);
wr.Free;
img.Free;
img2.Free;
*)
end;
function TFormBGRAImageManipulationDemo.GetCurrentCropArea: TCropArea;
begin
if (cbBoxList.ItemIndex<0)
then Result :=nil
else Result :=TCropArea(cbBoxList.Items.Objects[cbBoxList.ItemIndex]);
end;
procedure TFormBGRAImageManipulationDemo.FillBoxUI(ABox: TCropArea);
begin
if (ABox<>nil)
then begin
inFillBoxUI :=True;
BCPanelCropArea.Enabled :=True;
edName.Text :=ABox.Name;
edUnit_Type.ItemIndex :=Integer(ABox.AreaUnit);
if (ABox.AreaUnit=ruNone)
then begin
edLeft.DecimalPlaces:=0;
edTop.DecimalPlaces:=0;
edWidth.DecimalPlaces:=0;
edHeight.DecimalPlaces:=0;
end
else begin
edLeft.DecimalPlaces:=3;
edTop.DecimalPlaces:=3;
edWidth.DecimalPlaces:=3;
edHeight.DecimalPlaces:=3;
end;
edLeft.MaxValue:=ABox.MaxWidth;
edTop.MaxValue:=ABox.MaxHeight;
edWidth.MaxValue:=edLeft.MaxValue;
edHeight.MaxValue:=edTop.MaxValue;
edLeft.Value :=ABox.Left;
edTop.Value :=ABox.Top;
edWidth.Value :=ABox.Width;
edHeight.Value :=ABox.Height;
//Aspect Ratio
changingAspect :=True;
Case ABox.KeepAspectRatio of
bParent :rgAspect.ItemIndex:=0;
bFalse :rgAspect.ItemIndex:=1;
bTrue :rgAspect.ItemIndex:=2;
end;
edAspectPersonal.Text:=ABox.AspectRatio;
changingAspect:=False;
inFillBoxUI :=False;
end
else BCPanelCropArea.Enabled :=False;
end;
end.