import
This commit is contained in:
92
DSTexCompress/FreeImage/Wrapper/Delphi/WhatsNew_Delphi.txt
Normal file
92
DSTexCompress/FreeImage/Wrapper/Delphi/WhatsNew_Delphi.txt
Normal file
@@ -0,0 +1,92 @@
|
||||
What's New for FreeImage Delphi Wrapper
|
||||
|
||||
* : fixed
|
||||
- : removed
|
||||
! : changed
|
||||
+ : added
|
||||
|
||||
July 29, 2010
|
||||
+ [Lorenzo Monti] added Free Pascal / Lazarus 32 bit support
|
||||
|
||||
July 14, 2010
|
||||
+ [Lorenzo Monti] updated wrapper for FreeImage 3.13.1
|
||||
* [Lorenzo Monti] fixed declaration of FreeImageIO functions (FI_ReadProc, FI_WriteProc, FI_SeekProc, FI_TellProc)
|
||||
! [Lorenzo Monti] renamed structure PluginStruct to Plugin, according to FreeImage.h
|
||||
* [Lorenzo Monti] fixed declaration of JPEG_CMYK constant
|
||||
* [Lorenzo Monti] fixed declaration of type FreeImage_OutputMessageFunction
|
||||
* [Lorenzo Monti] fixed declaration of FreeImage_OutputMessageProc
|
||||
+ [Lorenzo Monti] added wrapper for FreeImage_OutputMessageProc for older Delphi compilers (<6) not supporting varargs
|
||||
* [Lorenzo Monti] fixed declaration of FreeImage_LookupX11Color and FreeImage_LookupSVGColor
|
||||
! [Lorenzo Monti] changed declaration of FreeImage_GetPixelIndex, FreeImage_GetPixelColor, FreeImage_SetPixelIndex, FreeImage_SetPixelColor
|
||||
! [Lorenzo Monti] changed declaration of FreeImage_GetInfo
|
||||
! [Lorenzo Monti] changed declaration of FreeImage_GetICCProfile, FreeImage_CreateICCProfile, FreeImage_DestroyICCProfile
|
||||
* [Lorenzo Monti] fixed declaration of FreeImage_SetComplexChannel
|
||||
+ [Lorenzo Monti] added Delphi 2010 support
|
||||
+ [Lorenzo Monti] added Version.inc to determine compiler version
|
||||
! [Lorenzo Monti] moved all "external" definitions to implementation section
|
||||
! [Lorenzo Monti] changed FreeBitmap.pas, FreeUtils.pas and TargaImage.pas to reflect changes in the FreeImage.pas unit
|
||||
|
||||
July 17, 2006
|
||||
+ [Herv<72> Drolon] added FIF_FAXG3 and FIF_SGI definitions, added FreeImage_MakeThumbnail definition.
|
||||
|
||||
January 20, 2006
|
||||
! [Anatoliy Pulyaevskiy] updated WinBitmap demo
|
||||
* [Anatoliy Pulyaevskiy] fixed TFreeBitmap.ConvertToStandartType renamed to TFreeBitmap.ConvertToStandardType
|
||||
* [Anatoliy Pulyaevskiy] fixed using of SetFreeImageMarker (only for HDR dib)
|
||||
|
||||
October 19, 2005
|
||||
+ [Anatoliy Pulyaevskiy] updated wrapper for FreeImage 3.8.0
|
||||
+ [Anatoliy Pulyaevskiy] added Delphi 5 support
|
||||
+ [Anatoliy Pulyaevskiy] added TFreeBitmap.OnChanging event
|
||||
! [Anatoliy Pulyaevskiy] changed declaration of TFreeBitmap.Assign method
|
||||
+ [Anatoliy Pulyaevskiy] added TFreeBitmap.CanSave function
|
||||
! [Anatoliy Pulyaevskiy] property TFreeBitmap.Dib now have read/write access
|
||||
+ [Anatoliy Pulyaevskiy] added TFreeTag class incapsulating FreeImage FITAG type
|
||||
|
||||
August 5, 2005
|
||||
* [kaare-nysite] fixed the prototype of FreeImage_ConvertFromRawBits
|
||||
|
||||
June 21, 2005
|
||||
* [Maarten Veerman] fixed the prototype of FreeImage_OpenMultiBitmap
|
||||
|
||||
February 17, 2005 - Version 1.3.0
|
||||
+ [Anatoliy Pulyaevskiy] updated the wrapper for FreeImage 3.6.0
|
||||
! [Anatoliy Pulyaevskiy] FreeImage.pas unit has been reworked
|
||||
|
||||
January 14, 2005 - Version 1.2.1
|
||||
+ [Anatoliy Pulyaevskiy] updated the wrapper for FreeImage 3.5.3
|
||||
+ [Anatoliy Pulyaevskiy] added TFreeBitmap.SetHorizontalResolution and TFreeBitmap.SetVerticalResolution
|
||||
+ [Anatoliy Pulyaevskiy] added TFreeBitmap.MakeThumbnail procedure ( an adapted version of function given by Enzo Costantini)
|
||||
+ [Enzo Costantini] added FIU_GetFIFType utility function
|
||||
+ [Enzo Costantini] added TFreeWinBitmap.CopyToBitmapH function
|
||||
* [Anatoliy Pulyaevskiy] fixed TFreeBitmap.Rotate (fix from FreeImage CVS)
|
||||
+ [Anatoliy Pulyaevskiy] added TFreeBitmap.ConvertToStandartType
|
||||
|
||||
December 20, 2004 - Version 1.2.0
|
||||
+ [Anatoliy Pulyaevskiy] added MultiBitmap Demo
|
||||
* [Anatoliy Pulyaevskiy] fixed TFreeMultiBitmap.LockPage due to error with Locking/Unlocking pages
|
||||
+ [Anatoliy Pulyaevskiy] added TFreeBitmap.ConvertTo4Bits
|
||||
* [Anatoliy Pulyaevskiy] TFreeBitmap.ConvertToGrayScale fixed converting bitmaps with FIC_MINISWHITE color type
|
||||
* [Anatoliy Pulyaevskiy] fixed TFreeWinBitmap.DrawEx FDisplayDib deleting
|
||||
+ [Anatoliy Pulyaevskiy] updated the wrapper for FreeImage 3.5.2
|
||||
|
||||
November 12, 2004 - Version 1.1.0
|
||||
+ [Anatoliy Pulyaevskiy] added TFreeBitmap.Assign(Source: PFIBITMAP)
|
||||
- [Anatoliy Pulyaevskiy] removed TFreeBitmap.SetDib
|
||||
! [Anatoliy Pulyaevskiy] TFreeBitmap.Dib property now read-only
|
||||
* [Anatoliy Pulyaevskiy] TFreeMultiBitmap.UnlockPage implemented
|
||||
* [Anatoliy Pulyaevskiy] fixed TFreeBitmap.Rescale not applies changes
|
||||
|
||||
November 8, 2004 - Version 1.0.0
|
||||
+ [Anatoliy Pulyaevskiy] added Delphi version of FreeImagePlus
|
||||
+ [Anatoliy Pulyaevskiy] updated the wrapper for FreeImage 3.5.0
|
||||
|
||||
January 7, 2004
|
||||
+ [Tommy] added TargaImage unit
|
||||
|
||||
October 28, 2003
|
||||
+ [Peter Bystr<74>m] updated the wrapper for FreeImage 3.0.2
|
||||
|
||||
August 9, 2003
|
||||
+ [Simon Beavis] added a wrapper for FreeImage 2.6.1
|
||||
|
||||
13
DSTexCompress/FreeImage/Wrapper/Delphi/_clean.bat
Normal file
13
DSTexCompress/FreeImage/Wrapper/Delphi/_clean.bat
Normal file
@@ -0,0 +1,13 @@
|
||||
del /S *.~*
|
||||
del /S *.dcu
|
||||
del /S *.dsk
|
||||
del /S *.cfg
|
||||
del /S *.dof
|
||||
del /S *.obj
|
||||
del /S *.hpp
|
||||
del /S *.ddp
|
||||
del /S *.mps
|
||||
del /S *.mpt
|
||||
del /S *.bak
|
||||
del /S *.exe
|
||||
del /S *.stat
|
||||
@@ -0,0 +1,13 @@
|
||||
program ImagePreview;
|
||||
|
||||
uses
|
||||
Forms,
|
||||
MainFrm in 'MainFrm.pas' {MainForm};
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
Binary file not shown.
@@ -0,0 +1,135 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 304
|
||||
Top = 165
|
||||
Width = 467
|
||||
Height = 405
|
||||
Caption = 'Image Preview'
|
||||
Color = clWhite
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
KeyPreview = True
|
||||
OldCreateOrder = False
|
||||
Position = poDesktopCenter
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnKeyUp = FormKeyUp
|
||||
OnMouseWheel = ScrollBoxMouseWheel
|
||||
OnShow = FormShow
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object ImgView32: TImgView32
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 459
|
||||
Height = 371
|
||||
Align = alClient
|
||||
ParentShowHint = False
|
||||
PopupMenu = PopupMenu
|
||||
Scale = 1
|
||||
ScrollBars.Color = clScrollBar
|
||||
ScrollBars.ShowHandleGrip = True
|
||||
ScrollBars.Style = rbsDefault
|
||||
ShowHint = True
|
||||
SizeGrip = sgAuto
|
||||
TabOrder = 0
|
||||
OnScroll = ImgView32Scroll
|
||||
object AlphaView: TImgView32
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 161
|
||||
Height = 145
|
||||
Scale = 1
|
||||
ScrollBars.Color = clScrollBar
|
||||
ScrollBars.ShowHandleGrip = True
|
||||
ScrollBars.Style = rbsDefault
|
||||
SizeGrip = sgAuto
|
||||
TabOrder = 2
|
||||
Visible = False
|
||||
end
|
||||
end
|
||||
object PopupMenu: TPopupMenu
|
||||
Left = 304
|
||||
Top = 28
|
||||
object ZoomInItem: TMenuItem
|
||||
Caption = 'Zoom In'
|
||||
OnClick = ZoomInItemClick
|
||||
end
|
||||
object ZoomOutItem: TMenuItem
|
||||
Caption = 'Zoom Out'
|
||||
OnClick = ZoomOutItemClick
|
||||
end
|
||||
object ActualSizeItem: TMenuItem
|
||||
Caption = 'Actual Size'
|
||||
OnClick = ActualSizeItemClick
|
||||
end
|
||||
object N1: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object RotateClockwiseItem: TMenuItem
|
||||
Caption = 'Rotate Clockwise'
|
||||
OnClick = RotateClockwiseItemClick
|
||||
end
|
||||
object RotateAntiClockwiseItem: TMenuItem
|
||||
Caption = 'Rotate Anti-Clockwise'
|
||||
OnClick = RotateAntiClockwiseItemClick
|
||||
end
|
||||
object N4: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object FlipHorizontalItem: TMenuItem
|
||||
Caption = 'Flip Horizontal'
|
||||
OnClick = FlipHorizontalItemClick
|
||||
end
|
||||
object FilpVerticalItem: TMenuItem
|
||||
Caption = 'Filp Vertical'
|
||||
OnClick = FilpVerticalItemClick
|
||||
end
|
||||
object N3: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object ShowAlphaItem: TMenuItem
|
||||
Caption = 'Show Just Alpha Channel'
|
||||
OnClick = ShowAlphaItemClick
|
||||
end
|
||||
object ShowWithAlphaItem: TMenuItem
|
||||
Caption = 'Show With Alpha Channel'
|
||||
OnClick = ShowWithAlphaItemClick
|
||||
end
|
||||
object N2: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object OpenImageItem: TMenuItem
|
||||
Caption = 'Open New Image'
|
||||
OnClick = OpenImageItemClick
|
||||
end
|
||||
end
|
||||
object FilterTimer: TTimer
|
||||
Interval = 500
|
||||
OnTimer = FilterTimerTimer
|
||||
Left = 308
|
||||
Top = 84
|
||||
end
|
||||
object OpenDialog: TOpenDialog
|
||||
Filter =
|
||||
'All image files|*.bmp;*.cut;*.ico;*.iff;*.lbm;*.jng;*.jpg;*.jpeg' +
|
||||
';*.koa;*.mng;*.pbm;*.pcd;*.pcx;*.pgm;*.png;*.ppm;*.psd;*.ras;*.t' +
|
||||
'ga;*.tif;*.tiff;.wbmp;*.xbm;*.xpm)|Windows or OS/2 Bitmap File (' +
|
||||
'*.BMP)|*.BMP|Dr. Halo (*.CUT)|*.CUT|Windows Icon (*.ICO)|*.ICO|A' +
|
||||
'miga IFF (*.IFF, *.LBM)|*.IFF;*.LBM|JPEG Network Graphics (*.JNG' +
|
||||
')|*.JNG|Independent JPEG Group (*.JPG)|*.JPG|Commodore 64 Koala ' +
|
||||
'(*.KOA)|*.KOA|Multiple Network Graphics (*.MNG)|*.MNG|Portable B' +
|
||||
'itmap (*.PBM)|*.PBM|Kodak PhotoCD (*.PCD)|*.PCD|PCX bitmap forma' +
|
||||
't (*.PCX)|*.PCX|Portable Graymap (*.PGM)|*.PGM|Portable Network ' +
|
||||
'Graphics (*.PNG)|*.PNG|Portable Pixelmap (*.PPM)|*.PPM|Photoshop' +
|
||||
' (*.PSD)|*.PSD|Sun Rasterfile (*.RAS)|*.RAS|Targa files (*.TGA)|' +
|
||||
'*.TGA|Tagged Image File Format (*.TIF)|*.TIF;*.TIFF|Wireless Bit' +
|
||||
'map (*.WBMP)|*.WBMP|X11 Bitmap Format (*.XBM)|*.XBM|X11 Pixmap F' +
|
||||
'ormat (*.XPM)|*.XPM'
|
||||
Title = 'Open Image File'
|
||||
Left = 328
|
||||
Top = 228
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,518 @@
|
||||
unit MainFrm;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, Menus, ExtCtrls, Math, GR32, GR32_Image, GR32_Transforms,
|
||||
ExtDlgs;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
PopupMenu: TPopupMenu;
|
||||
ZoomInItem: TMenuItem;
|
||||
ZoomOutItem: TMenuItem;
|
||||
ActualSizeItem: TMenuItem;
|
||||
ImgView32: TImgView32;
|
||||
N1: TMenuItem;
|
||||
AlphaView: TImgView32;
|
||||
ShowAlphaItem: TMenuItem;
|
||||
RotateClockwiseItem: TMenuItem;
|
||||
RotateAntiClockwiseItem: TMenuItem;
|
||||
N3: TMenuItem;
|
||||
ShowWithAlphaItem: TMenuItem;
|
||||
N4: TMenuItem;
|
||||
FlipHorizontalItem: TMenuItem;
|
||||
FilpVerticalItem: TMenuItem;
|
||||
FilterTimer: TTimer;
|
||||
OpenImageItem: TMenuItem;
|
||||
N2: TMenuItem;
|
||||
OpenDialog: TOpenDialog;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure ZoomInItemClick(Sender: TObject);
|
||||
procedure ZoomOutItemClick(Sender: TObject);
|
||||
procedure ActualSizeItemClick(Sender: TObject);
|
||||
procedure ScrollBoxMouseWheel(Sender: TObject; Shift: TShiftState;
|
||||
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
||||
procedure FormKeyUp(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
procedure ShowAlphaItemClick(Sender: TObject);
|
||||
procedure RotateClockwiseItemClick(Sender: TObject);
|
||||
procedure RotateAntiClockwiseItemClick(Sender: TObject);
|
||||
procedure ShowWithAlphaItemClick(Sender: TObject);
|
||||
procedure FlipHorizontalItemClick(Sender: TObject);
|
||||
procedure FilpVerticalItemClick(Sender: TObject);
|
||||
procedure FilterTimerTimer(Sender: TObject);
|
||||
procedure ImgView32Scroll(Sender: TObject);
|
||||
procedure OpenImageItemClick(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
OrigWidth : integer;
|
||||
OrigHeight : integer;
|
||||
BPP : longword;
|
||||
|
||||
procedure LoadImage( Name : string);
|
||||
procedure RecalcWindowSize;
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses FreeImage;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
AlphaView.Visible := False;
|
||||
AlphaView.Align := alClient;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
// ...
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.FormShow(Sender: TObject);
|
||||
begin
|
||||
ImgView32.Bitmap.StretchFilter := sfSPline;
|
||||
if ParamCount = 1 then
|
||||
LoadImage(ParamStr(1));
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.LoadImage( Name : string);
|
||||
var
|
||||
dib : PFIBITMAP;
|
||||
PBH : PBITMAPINFOHEADER;
|
||||
PBI : PBITMAPINFO;
|
||||
t : FREE_IMAGE_FORMAT;
|
||||
Ext : string;
|
||||
BM : TBitmap;
|
||||
x, y : integer;
|
||||
BP : PLONGWORD;
|
||||
DC : HDC;
|
||||
begin
|
||||
try
|
||||
t := FreeImage_GetFileType(PChar(Name), 16);
|
||||
|
||||
if t = FIF_UNKNOWN then
|
||||
begin
|
||||
// Check for types not supported by GetFileType
|
||||
Ext := UpperCase(ExtractFileExt(Name));
|
||||
if (Ext = '.TGA') or(Ext = '.TARGA') then
|
||||
t := FIF_TARGA
|
||||
else if Ext = '.MNG' then
|
||||
t := FIF_MNG
|
||||
else if Ext = '.PCD' then
|
||||
t := FIF_PCD
|
||||
else if Ext = '.WBMP' then
|
||||
t := FIF_WBMP
|
||||
else if Ext = '.CUT' then
|
||||
t := FIF_CUT
|
||||
else
|
||||
raise Exception.Create('The file "' + Name + '" cannot be displayed because SFM does not recognise the file type.');
|
||||
end;
|
||||
|
||||
dib := FreeImage_Load(t, PChar(name), 0);
|
||||
if Dib = nil then
|
||||
Close;
|
||||
PBH := FreeImage_GetInfoHeader(dib);
|
||||
PBI := FreeImage_GetInfo(dib^);
|
||||
|
||||
BPP := FreeImage_GetBPP(dib);
|
||||
|
||||
ShowWithAlphaItem.Enabled := BPP = 32;
|
||||
ShowAlphaItem.Enabled := BPP = 32;
|
||||
|
||||
if BPP = 32 then
|
||||
begin
|
||||
ImgView32.Bitmap.SetSize(FreeImage_GetWidth(dib), FreeImage_GetHeight(dib));
|
||||
|
||||
BP := PLONGWORD(FreeImage_GetBits(dib));
|
||||
for y := ImgView32.Bitmap.Height - 1 downto 0 do
|
||||
for x := 0 to ImgView32.Bitmap.Width - 1 do
|
||||
begin
|
||||
ImgView32.Bitmap.Pixel[x, y] := BP^;
|
||||
inc(BP);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
BM := TBitmap.Create;
|
||||
|
||||
BM.Assign(nil);
|
||||
DC := GetDC(Handle);
|
||||
|
||||
BM.handle := CreateDIBitmap(DC,
|
||||
PBH^,
|
||||
CBM_INIT,
|
||||
PChar(FreeImage_GetBits(dib)),
|
||||
PBI^,
|
||||
DIB_RGB_COLORS);
|
||||
|
||||
ImgView32.Bitmap.Assign(BM);
|
||||
AlphaView.Bitmap.Assign(BM);
|
||||
|
||||
BM.Free;
|
||||
ReleaseDC(Handle, DC);
|
||||
end;
|
||||
FreeImage_Unload(dib);
|
||||
|
||||
OrigWidth := ImgView32.Bitmap.Width;
|
||||
OrigHeight := ImgView32.Bitmap.Height;
|
||||
|
||||
Caption := ExtractFileName( Name ) + ' (' + IntToStr(OrigWidth) +
|
||||
' x ' + IntToStr(OrigHeight) + ')';
|
||||
if BPP = 32 then
|
||||
Caption := Caption + ' + Alpha';
|
||||
|
||||
AlphaView.Bitmap.SetSize(OrigWidth, OrigWidth);
|
||||
|
||||
ImgView32.Hint := 'Name: ' + Name + #13 +
|
||||
'Width: ' + IntToStr(OrigWidth) + #13 +
|
||||
'Height: ' + IntToStr(OrigHeight) + #13 +
|
||||
'BPP: ' + IntToStr(BPP);
|
||||
|
||||
RecalcWindowSize;
|
||||
|
||||
Show;
|
||||
except
|
||||
on e:exception do
|
||||
begin
|
||||
Application.BringToFront;
|
||||
MessageDlg(e.message, mtInformation, [mbOK], 0);
|
||||
Close;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.ZoomInItemClick(Sender: TObject);
|
||||
begin
|
||||
FilterTimer.Enabled := False;
|
||||
if ImgView32.Bitmap.StretchFilter <> sfNearest then
|
||||
ImgView32.Bitmap.StretchFilter := sfNearest;
|
||||
FilterTimer.Enabled := True;
|
||||
|
||||
ImgView32.Scale := ImgView32.Scale * 2.0;
|
||||
RecalcWindowSize;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.ZoomOutItemClick(Sender: TObject);
|
||||
begin
|
||||
FilterTimer.Enabled := False;
|
||||
if ImgView32.Bitmap.StretchFilter <> sfNearest then
|
||||
ImgView32.Bitmap.StretchFilter := sfNearest;
|
||||
FilterTimer.Enabled := True;
|
||||
|
||||
ImgView32.Scale := ImgView32.Scale / 2.0;
|
||||
RecalcWindowSize;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.ActualSizeItemClick(Sender: TObject);
|
||||
begin
|
||||
FilterTimer.Enabled := False;
|
||||
if ImgView32.Bitmap.StretchFilter <> sfNearest then
|
||||
ImgView32.Bitmap.StretchFilter := sfNearest;
|
||||
FilterTimer.Enabled := True;
|
||||
|
||||
ImgView32.Scale := 1.0;
|
||||
|
||||
RecalcWindowSize;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.RecalcWindowSize;
|
||||
var
|
||||
Rect : TRect;
|
||||
CW, CH : integer;
|
||||
WSH, WSW : integer;
|
||||
TitleH : integer;
|
||||
BorderY : integer;
|
||||
BorderX : integer;
|
||||
begin
|
||||
CW := ImgView32.Bitmap.Width + GetSystemMetrics(SM_CXVSCROLL);
|
||||
CH := ImgView32.Bitmap.Height + GetSystemMetrics(SM_CYVSCROLL);
|
||||
|
||||
SystemParametersInfo( SPI_GETWORKAREA, 0, @Rect, 0);
|
||||
|
||||
WSH := Rect.Bottom - Rect.Top;
|
||||
WSW := Rect.Right - Rect.Left;
|
||||
TitleH := GetSystemMetrics(SM_CYCAPTION);
|
||||
BorderY := GetSystemMetrics(SM_CYSIZEFRAME) * 2;
|
||||
BorderX := GetSystemMetrics(SM_CXSIZEFRAME) * 2;
|
||||
|
||||
if (Top + CH + TitleH + BorderY > WSH) or (CH + TitleH + BorderY > WSH) then
|
||||
begin
|
||||
Top := Rect.Bottom - CH - BorderY;
|
||||
if Top < 0 then
|
||||
begin
|
||||
Top := 0;
|
||||
CH := WSH - TitleH - BorderY;
|
||||
CW := CW + GetSystemMetrics(SM_CXVSCROLL);
|
||||
|
||||
if CW + BorderX > WSW then
|
||||
CH := CH - GetSystemMetrics(SM_CYVSCROLL);
|
||||
end;
|
||||
end;
|
||||
|
||||
if (Left + CW + BorderX > WSW) or (CW + BorderX > WSW) then
|
||||
begin
|
||||
Left := Rect.Right - CW - BorderX;
|
||||
if Left < 0 then
|
||||
begin
|
||||
Left := 0;
|
||||
CW := WSW - BorderX;
|
||||
CH := CH + GetSystemMetrics(SM_CYVSCROLL);
|
||||
|
||||
if CH + TitleH + BorderY > WSH then
|
||||
CW := CW + GetSystemMetrics(SM_CXVSCROLL);
|
||||
end
|
||||
end;
|
||||
|
||||
ClientWidth := CW;
|
||||
ClientHeight := CH;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.ScrollBoxMouseWheel(Sender: TObject;
|
||||
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
|
||||
var Handled: Boolean);
|
||||
begin
|
||||
FilterTimer.Enabled := False;
|
||||
if ImgView32.Bitmap.StretchFilter <> sfNearest then
|
||||
ImgView32.Bitmap.StretchFilter := sfNearest;
|
||||
FilterTimer.Enabled := True;
|
||||
|
||||
if WheelDelta < 0 then
|
||||
ImgView32.Scroll(0, 20)
|
||||
else
|
||||
ImgView32.Scroll(0, -20);
|
||||
Handled := True;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.FormKeyUp(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
var
|
||||
Amount : integer;
|
||||
begin
|
||||
FilterTimer.Enabled := False;
|
||||
if ImgView32.Bitmap.StretchFilter <> sfNearest then
|
||||
ImgView32.Bitmap.StretchFilter := sfNearest;
|
||||
FilterTimer.Enabled := True;
|
||||
|
||||
if ssShift in Shift then
|
||||
Amount := 20 * 2
|
||||
else
|
||||
Amount := 20;
|
||||
|
||||
case Key of
|
||||
VK_ESCAPE:
|
||||
Close;
|
||||
VK_UP:
|
||||
ImgView32.Scroll(0, -Amount);
|
||||
VK_DOWN:
|
||||
ImgView32.Scroll(0, Amount);
|
||||
VK_LEFT:
|
||||
ImgView32.Scroll(-Amount, 0);
|
||||
VK_RIGHT:
|
||||
ImgView32.Scroll(Amount, 0);
|
||||
VK_HOME:
|
||||
ImgView32.ScrollToCenter(0, 0);
|
||||
VK_END:
|
||||
ImgView32.ScrollToCenter(ImgView32.Bitmap.Width, ImgView32.Bitmap.Height);
|
||||
VK_NEXT:
|
||||
ImgView32.Scroll(0, (Trunc(ImgView32.Bitmap.Height div 4)));
|
||||
VK_PRIOR:
|
||||
ImgView32.Scroll(0, -(Trunc(ImgView32.Bitmap.Height div 4)));
|
||||
end;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.ShowAlphaItemClick(Sender: TObject);
|
||||
var
|
||||
x, y : integer;
|
||||
Col : TColor32;
|
||||
Alpha : TColor;
|
||||
begin
|
||||
if ShowAlphaItem.Checked then
|
||||
begin
|
||||
AlphaView.Visible := False;
|
||||
AlphaView.Bitmap.Delete;
|
||||
end
|
||||
else
|
||||
begin
|
||||
AlphaView.Bitmap.Width := ImgView32.Bitmap.Width;
|
||||
AlphaView.Bitmap.Height := ImgView32.Bitmap.Height;
|
||||
|
||||
for x := 0 to AlphaView.Bitmap.Width - 1 do
|
||||
for y := 0 to AlphaView.Bitmap.Height - 1 do
|
||||
begin
|
||||
Col := ImgView32.Bitmap.Pixel[x, y];
|
||||
Alpha := Col shr 24;
|
||||
AlphaView.Bitmap.Pixel[x, y] := Alpha + (Alpha shl 8) + (Alpha shl 16);
|
||||
end;
|
||||
AlphaView.Visible := True;
|
||||
end;
|
||||
ShowAlphaItem.Checked := not ShowAlphaItem.Checked;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.RotateClockwiseItemClick(Sender: TObject);
|
||||
var
|
||||
x : integer;
|
||||
y : integer;
|
||||
DestX : integer;
|
||||
DestY : integer;
|
||||
C : TColor32;
|
||||
begin
|
||||
AlphaView.Bitmap.Assign(ImgView32.Bitmap);
|
||||
|
||||
ImgView32.BeginUpdate;
|
||||
ImgView32.Bitmap.Width := AlphaView.Bitmap.Height;
|
||||
ImgView32.Bitmap.Height := AlphaView.Bitmap.Width;
|
||||
|
||||
for x := 0 to AlphaView.Bitmap.Width - 1 do
|
||||
for y := 0 to AlphaView.Bitmap.Height - 1 do
|
||||
begin
|
||||
C := AlphaView.Bitmap.Pixel[x, y];
|
||||
|
||||
DestX := (ImgView32.Bitmap.Width - 1) - Y;
|
||||
DestY := X;
|
||||
|
||||
ImgView32.Bitmap.Pixels[DestX, DestY] := C;
|
||||
end;
|
||||
|
||||
ImgView32.EndUpdate;
|
||||
ImgView32.Refresh;
|
||||
end;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.RotateAntiClockwiseItemClick(Sender: TObject);
|
||||
var
|
||||
x : integer;
|
||||
y : integer;
|
||||
DestX : integer;
|
||||
DestY : integer;
|
||||
C : TColor32;
|
||||
begin
|
||||
AlphaView.Bitmap.Assign(ImgView32.Bitmap);
|
||||
|
||||
ImgView32.BeginUpdate;
|
||||
ImgView32.Bitmap.Width := AlphaView.Bitmap.Height;
|
||||
ImgView32.Bitmap.Height := AlphaView.Bitmap.Width;
|
||||
|
||||
for x := 0 to AlphaView.Bitmap.Width - 1 do
|
||||
for y := 0 to AlphaView.Bitmap.Height - 1 do
|
||||
begin
|
||||
C := AlphaView.Bitmap.Pixel[x, y];
|
||||
|
||||
DestX := Y;
|
||||
DestY := (ImgView32.Bitmap.Height - 1) -X;
|
||||
|
||||
ImgView32.Bitmap.Pixels[DestX, DestY] := C;
|
||||
end;
|
||||
|
||||
ImgView32.EndUpdate;
|
||||
ImgView32.Refresh;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.ShowWithAlphaItemClick(Sender: TObject);
|
||||
begin
|
||||
if ShowWithAlphaItem.Checked then
|
||||
ImgView32.Bitmap.DrawMode := dmOpaque
|
||||
else
|
||||
ImgView32.Bitmap.DrawMode := dmBlend;
|
||||
ShowWithAlphaItem.Checked := not ShowWithAlphaItem.Checked;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.FlipHorizontalItemClick(Sender: TObject);
|
||||
var
|
||||
x : integer;
|
||||
y : integer;
|
||||
DestX : integer;
|
||||
DestY : integer;
|
||||
C : TColor32;
|
||||
begin
|
||||
AlphaView.Bitmap.Assign(ImgView32.Bitmap);
|
||||
|
||||
ImgView32.BeginUpdate;
|
||||
ImgView32.Bitmap.Width := AlphaView.Bitmap.Width;
|
||||
ImgView32.Bitmap.Height := AlphaView.Bitmap.Height;
|
||||
|
||||
for x := 0 to AlphaView.Bitmap.Width - 1 do
|
||||
for y := 0 to AlphaView.Bitmap.Height - 1 do
|
||||
begin
|
||||
C := AlphaView.Bitmap.Pixel[x, y];
|
||||
|
||||
DestX := (ImgView32.Bitmap.Width - 1) -X;
|
||||
DestY := Y;
|
||||
|
||||
ImgView32.Bitmap.Pixels[DestX, DestY] := C;
|
||||
end;
|
||||
|
||||
ImgView32.EndUpdate;
|
||||
ImgView32.Refresh;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.FilpVerticalItemClick(Sender: TObject);
|
||||
var
|
||||
x : integer;
|
||||
y : integer;
|
||||
DestX : integer;
|
||||
DestY : integer;
|
||||
C : TColor32;
|
||||
begin
|
||||
AlphaView.Bitmap.Assign(ImgView32.Bitmap);
|
||||
|
||||
ImgView32.BeginUpdate;
|
||||
ImgView32.Bitmap.Width := AlphaView.Bitmap.Width;
|
||||
ImgView32.Bitmap.Height := AlphaView.Bitmap.Height;
|
||||
|
||||
for x := 0 to AlphaView.Bitmap.Width - 1 do
|
||||
for y := 0 to AlphaView.Bitmap.Height - 1 do
|
||||
begin
|
||||
C := AlphaView.Bitmap.Pixel[x, y];
|
||||
|
||||
DestX := X;
|
||||
DestY := (ImgView32.Bitmap.Height - 1) - Y;
|
||||
|
||||
ImgView32.Bitmap.Pixels[DestX, DestY] := C;
|
||||
end;
|
||||
|
||||
ImgView32.EndUpdate;
|
||||
ImgView32.Refresh;
|
||||
end;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.FilterTimerTimer(Sender: TObject);
|
||||
begin
|
||||
FilterTimer.Enabled := False;
|
||||
ImgView32.Bitmap.StretchFilter := sfSPline;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.ImgView32Scroll(Sender: TObject);
|
||||
begin
|
||||
FilterTimer.Enabled := False;
|
||||
if ImgView32.Bitmap.StretchFilter <> sfNearest then
|
||||
ImgView32.Bitmap.StretchFilter := sfNearest;
|
||||
FilterTimer.Enabled := True;
|
||||
end;
|
||||
// -----------------------------------------------------------------------------
|
||||
procedure TMainForm.OpenImageItemClick(Sender: TObject);
|
||||
begin
|
||||
if OpenDialog.Execute then
|
||||
begin
|
||||
try
|
||||
Screen.Cursor := crHourGlass;
|
||||
LoadImage(OpenDialog.FileName);
|
||||
finally
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,8 @@
|
||||
This is a simple image viewing application that uses the FreeImage library to display images in many different formats.
|
||||
|
||||
The app displays the image whose name is passed in as a command line argument.
|
||||
|
||||
|
||||
To compile the app you will also need the Graphics32 library available from www.g32.org. It has been tested with version 1.5.1 of Graphics32.
|
||||
|
||||
SJB.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
@@ -0,0 +1,13 @@
|
||||
program MultiBitmap;
|
||||
|
||||
uses
|
||||
Forms,
|
||||
mbMainForm in 'mbMainForm.pas' {MainForm};
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
Binary file not shown.
@@ -0,0 +1,10 @@
|
||||
[Stats]
|
||||
EditorSecs=82
|
||||
DesignerSecs=5
|
||||
InspectorSecs=1
|
||||
CompileSecs=850
|
||||
OtherSecs=5
|
||||
StartTime=20.12.2004 11:40:22
|
||||
RealKeys=0
|
||||
EffectiveKeys=0
|
||||
DebugSecs=19
|
||||
@@ -0,0 +1,89 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 203
|
||||
Top = 192
|
||||
Width = 696
|
||||
Height = 480
|
||||
Caption = 'MultiBitmap Demo'
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Shell Dlg 2'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
OnPaint = FormPaint
|
||||
OnResize = FormResize
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object ToolBar: TToolBar
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 688
|
||||
Height = 25
|
||||
AutoSize = True
|
||||
ButtonHeight = 21
|
||||
ButtonWidth = 33
|
||||
Caption = 'ToolBar'
|
||||
EdgeBorders = [ebLeft, ebTop, ebRight, ebBottom]
|
||||
Flat = True
|
||||
Indent = 3
|
||||
ShowCaptions = True
|
||||
TabOrder = 0
|
||||
object tbLoad: TToolButton
|
||||
Left = 3
|
||||
Top = 0
|
||||
Caption = 'Load'
|
||||
ImageIndex = 0
|
||||
OnClick = tbLoadClick
|
||||
end
|
||||
object ToolButton1: TToolButton
|
||||
Left = 36
|
||||
Top = 0
|
||||
Width = 8
|
||||
Caption = 'ToolButton1'
|
||||
ImageIndex = 1
|
||||
Style = tbsSeparator
|
||||
end
|
||||
object tbClose: TToolButton
|
||||
Left = 44
|
||||
Top = 0
|
||||
Caption = 'Close'
|
||||
ImageIndex = 1
|
||||
OnClick = tbCloseClick
|
||||
end
|
||||
object ToolButton2: TToolButton
|
||||
Left = 77
|
||||
Top = 0
|
||||
Width = 8
|
||||
Caption = 'ToolButton2'
|
||||
ImageIndex = 2
|
||||
Style = tbsSeparator
|
||||
end
|
||||
object Label1: TLabel
|
||||
Left = 85
|
||||
Top = 0
|
||||
Width = 36
|
||||
Height = 21
|
||||
Caption = 'Pages: '
|
||||
Layout = tlCenter
|
||||
end
|
||||
object cbPages: TComboBox
|
||||
Left = 121
|
||||
Top = 0
|
||||
Width = 60
|
||||
Height = 21
|
||||
Style = csDropDownList
|
||||
DropDownCount = 15
|
||||
ItemHeight = 13
|
||||
TabOrder = 0
|
||||
OnChange = cbPagesChange
|
||||
end
|
||||
end
|
||||
object OD: TOpenDialog
|
||||
Filter = 'TIFF multibitmap (*.tiff, *.tif)|*.tiff; *.tif|ICO|*.ico'
|
||||
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing]
|
||||
Title = 'Open multibitmap..'
|
||||
Left = 64
|
||||
Top = 96
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,150 @@
|
||||
unit mbMainForm;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, ComCtrls, ToolWin, StdCtrls, FreeBitmap;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
ToolBar: TToolBar;
|
||||
tbLoad: TToolButton;
|
||||
ToolButton1: TToolButton;
|
||||
tbClose: TToolButton;
|
||||
ToolButton2: TToolButton;
|
||||
cbPages: TComboBox;
|
||||
Label1: TLabel;
|
||||
OD: TOpenDialog;
|
||||
procedure tbLoadClick(Sender: TObject);
|
||||
procedure FormPaint(Sender: TObject);
|
||||
procedure tbCloseClick(Sender: TObject);
|
||||
procedure cbPagesChange(Sender: TObject);
|
||||
procedure FormResize(Sender: TObject);
|
||||
private
|
||||
FMultiBitmap: TFreeMultiBitmap;
|
||||
FPage: TFreeWinBitmap;
|
||||
|
||||
procedure PageBitmapChangeHandler(Sender: TObject);
|
||||
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
|
||||
procedure OpenMultiBitmap(const FileName: string);
|
||||
procedure CloseMultiBitmap;
|
||||
procedure OpenPage(Number: Integer);
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
{ TMainForm }
|
||||
|
||||
procedure TMainForm.CloseMultiBitmap;
|
||||
begin
|
||||
if FPage.IsValid then
|
||||
FMultiBitmap.UnlockPage(Fpage, False);
|
||||
FMultiBitmap.Close;
|
||||
cbPages.Clear;
|
||||
end;
|
||||
|
||||
constructor TMainForm.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
FMultiBitmap := TFreeMultiBitmap.Create;
|
||||
FPage := TFreeWinBitmap.Create;
|
||||
FPage.OnChange := PageBitmapChangeHandler;
|
||||
end;
|
||||
|
||||
destructor TMainForm.Destroy;
|
||||
begin
|
||||
if FMultiBitmap.IsValid then
|
||||
CloseMultiBitmap;
|
||||
FMultiBitmap.Free;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TMainForm.OpenMultiBitmap(const FileName: string);
|
||||
var
|
||||
I, Cnt: Integer;
|
||||
begin
|
||||
if FMultiBitmap.IsValid then CloseMultiBitmap;
|
||||
|
||||
FMultiBitmap.Open(FileName, False, True);
|
||||
|
||||
Cnt := FMultiBitmap.GetPageCount;
|
||||
cbPages.OnChange := nil;
|
||||
cbPages.Clear;
|
||||
for I := 0 to Cnt - 1 do
|
||||
cbPages.Items.Add(IntToStr(I));
|
||||
cbPages.OnChange := cbPagesChange;
|
||||
end;
|
||||
|
||||
procedure TMainForm.OpenPage(Number: Integer);
|
||||
begin
|
||||
if not FMultiBitmap.IsValid then Exit;
|
||||
|
||||
if FPage.IsValid then
|
||||
FMultiBitmap.UnlockPage(FPage, False);
|
||||
|
||||
FMultiBitmap.LockPage(Number, FPage);
|
||||
end;
|
||||
|
||||
procedure TMainForm.PageBitmapChangeHandler(Sender: TObject);
|
||||
begin
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TMainForm.tbLoadClick(Sender: TObject);
|
||||
begin
|
||||
if OD.Execute then
|
||||
begin
|
||||
try
|
||||
OpenMultiBitmap(OD.FileName);
|
||||
except
|
||||
raise Exception.CreateFmt('Can not load file %s', [OD.FileName]);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.WMEraseBkgnd(var Message: TWMEraseBkgnd);
|
||||
begin
|
||||
Message.Result := 1;
|
||||
end;
|
||||
|
||||
procedure TMainForm.FormPaint(Sender: TObject);
|
||||
begin
|
||||
if not FPage.IsValid then
|
||||
begin
|
||||
Canvas.Brush.Color := clBtnFace;
|
||||
Canvas.FillRect(ClientRect);
|
||||
end
|
||||
else
|
||||
FPage.Draw(Canvas.Handle, ClientRect);
|
||||
end;
|
||||
|
||||
procedure TMainForm.tbCloseClick(Sender: TObject);
|
||||
begin
|
||||
if FMultiBitmap.IsValid then
|
||||
CloseMultiBitmap;
|
||||
end;
|
||||
|
||||
procedure TMainForm.cbPagesChange(Sender: TObject);
|
||||
var
|
||||
Page: Integer;
|
||||
begin
|
||||
Page := StrToInt(cbPages.Text);
|
||||
OpenPage(Page);
|
||||
end;
|
||||
|
||||
procedure TMainForm.FormResize(Sender: TObject);
|
||||
begin
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,22 @@
|
||||
TargaImage.pas is a TGraphic descendant for Delphi. Installing it
|
||||
will allow Delphi TImage and TDBImage components to read Targa files
|
||||
just like BMP & WMF files with no coding on your part.
|
||||
|
||||
It also adds the TGA file type to the Delphi Open/Save Picture dialog
|
||||
boxes.
|
||||
|
||||
To install this unit, place it in your one of your library folders
|
||||
and make it available to all your Delphi projects by using
|
||||
Component>Install Component from the Delphi menus.
|
||||
|
||||
NOTE: any Delphi applications using this *must* have FreeImage.dll
|
||||
installed in your application's folder, or somewhere in the path.
|
||||
|
||||
-----------------------
|
||||
|
||||
Tommy
|
||||
Edinburgh, Scotland
|
||||
LeTene@battlefieldeurope.org
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,212 @@
|
||||
unit TargaImage;
|
||||
|
||||
// ==========================================================
|
||||
//
|
||||
// This file is part of FreeImage 3
|
||||
//
|
||||
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
|
||||
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
|
||||
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
|
||||
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
|
||||
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
|
||||
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
|
||||
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
|
||||
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
|
||||
// THIS DISCLAIMER.
|
||||
//
|
||||
// Use at your own risk!
|
||||
//
|
||||
// ==========================================================
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows,
|
||||
Classes,
|
||||
FreeImage,
|
||||
Graphics,
|
||||
Types;
|
||||
|
||||
type
|
||||
TTargaImage = class(TGraphic)
|
||||
private
|
||||
fImage: PFIBITMAP;
|
||||
fWidth: Integer;
|
||||
fHeight: Integer;
|
||||
protected
|
||||
procedure Draw(ACanvas: TCanvas; const ARect: TRect); override;
|
||||
function GetEmpty: Boolean; override;
|
||||
function GetHeight: Integer; override;
|
||||
function GetWidth: Integer; override;
|
||||
procedure SetHeight(Value: Integer); override;
|
||||
procedure SetWidth(Value: Integer); override;
|
||||
public
|
||||
constructor Create; override;
|
||||
destructor Destroy; override;
|
||||
procedure Assign(Source: TPersistent); override;
|
||||
procedure LoadFromClipboardFormat(AFormat: Word; AData: THandle; APalette: HPALETTE); override;
|
||||
procedure LoadFromStream(Stream: TStream); override;
|
||||
procedure SaveToClipboardFormat(var AFormat: Word; var AData: THandle; var APalette: HPALETTE); override;
|
||||
procedure SaveToStream(Stream: TStream); override;
|
||||
end;
|
||||
|
||||
procedure Register;
|
||||
|
||||
implementation
|
||||
|
||||
{ Design-time registration }
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
TPicture.RegisterFileFormat('tga', 'TARGA Files', TTargaImage);
|
||||
end;
|
||||
|
||||
{ IO functions }
|
||||
|
||||
function FI_ReadProc(buffer : pointer; size : Cardinal; count : Cardinal; handle : fi_handle) : UInt; stdcall;
|
||||
var
|
||||
stream: TStream;
|
||||
bytesToRead: Cardinal;
|
||||
begin
|
||||
stream := TStream(handle);
|
||||
bytesToRead := size*count;
|
||||
Result := stream.Read(buffer^, bytesToRead);
|
||||
end;
|
||||
|
||||
function FI_WriteProc(buffer : pointer; size, count : Cardinal; handle : fi_handle) : UInt; stdcall;
|
||||
var
|
||||
stream: TStream;
|
||||
bytesToWrite: Cardinal;
|
||||
begin
|
||||
stream := TStream(handle);
|
||||
bytesToWrite := size*count;
|
||||
Result := stream.Write(buffer^, bytesToWrite);
|
||||
end;
|
||||
|
||||
function FI_SeekProc(handle : fi_handle; offset : longint; origin : integer) : Integer; stdcall;
|
||||
begin
|
||||
TStream(handle).Seek(offset, origin);
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
function FI_TellProc(handle : fi_handle) : LongInt; stdcall;
|
||||
begin
|
||||
Result := TStream(handle).Position;
|
||||
end;
|
||||
|
||||
{ TTargaImage }
|
||||
|
||||
constructor TTargaImage.Create;
|
||||
begin
|
||||
fImage := nil;
|
||||
fWidth := 0;
|
||||
fHeight := 0;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
destructor TTargaImage.Destroy;
|
||||
begin
|
||||
if Assigned(fImage) then
|
||||
FreeImage_Unload(fImage);
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TTargaImage.Assign(Source: TPersistent);
|
||||
begin
|
||||
if Source is TTargaImage then begin
|
||||
fImage := FreeImage_Clone(TTargaImage(Source).fImage);
|
||||
fWidth := FreeImage_GetWidth(fImage);
|
||||
fHeight := FreeImage_GetHeight(fImage);
|
||||
Changed(Self);
|
||||
end else
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TTargaImage.Draw(ACanvas: TCanvas; const ARect: TRect);
|
||||
var
|
||||
pbi: PBitmapInfo;
|
||||
begin
|
||||
if Assigned(fImage) then begin
|
||||
pbi := FreeImage_GetInfo(fImage);
|
||||
SetStretchBltMode(ACanvas.Handle, COLORONCOLOR);
|
||||
StretchDIBits(ACanvas.Handle, ARect.left, ARect.top,
|
||||
ARect.right-ARect.left, ARect.bottom-ARect.top,
|
||||
0, 0, fWidth, fHeight,
|
||||
FreeImage_GetBits(fImage), pbi^, DIB_RGB_COLORS, SRCCOPY);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TTargaImage.GetEmpty: Boolean;
|
||||
begin
|
||||
Result := Assigned(fImage);
|
||||
end;
|
||||
|
||||
function TTargaImage.GetHeight: Integer;
|
||||
begin
|
||||
Result := fHeight;
|
||||
end;
|
||||
|
||||
function TTargaImage.GetWidth: Integer;
|
||||
begin
|
||||
Result := fWidth;
|
||||
end;
|
||||
|
||||
procedure TTargaImage.LoadFromClipboardFormat(AFormat: Word; AData: THandle; APalette: HPALETTE);
|
||||
begin
|
||||
if Assigned(fImage) then begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTargaImage.LoadFromStream(Stream: TStream);
|
||||
var
|
||||
io: FreeImageIO;
|
||||
begin
|
||||
with io do begin
|
||||
read_proc := FI_ReadProc;
|
||||
write_proc := FI_WriteProc;
|
||||
seek_proc := FI_SeekProc;
|
||||
tell_proc := FI_TellProc;
|
||||
end;
|
||||
fImage := FreeImage_LoadFromHandle(FIF_TARGA, @io, Stream);
|
||||
if Assigned(fImage) then begin
|
||||
fWidth := FreeImage_GetWidth(fImage);
|
||||
fHeight := FreeImage_GetHeight(fImage);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTargaImage.SaveToClipboardFormat(var AFormat: Word; var AData: THandle; var APalette: HPALETTE);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TTargaImage.SaveToStream(Stream: TStream);
|
||||
var
|
||||
io: FreeImageIO;
|
||||
begin
|
||||
with io do begin
|
||||
read_proc := FI_ReadProc;
|
||||
write_proc := FI_WriteProc;
|
||||
seek_proc := FI_SeekProc;
|
||||
tell_proc := FI_TellProc;
|
||||
end;
|
||||
FreeImage_SaveToHandle(FIF_TARGA, fImage, @io, Stream);
|
||||
end;
|
||||
|
||||
procedure TTargaImage.SetHeight(Value: Integer);
|
||||
begin
|
||||
if Assigned(fImage) then begin
|
||||
fHeight := Value;
|
||||
FreeImage_Rescale(fImage, fWidth, fHeight, FILTER_BICUBIC);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTargaImage.SetWidth(Value: Integer);
|
||||
begin
|
||||
if Assigned(fImage) then begin
|
||||
fWidth := Value;
|
||||
FreeImage_Rescale(fImage, fWidth, fHeight, FILTER_BICUBIC);
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
TPicture.RegisterFileFormat('tga', 'TARGA Files', TTargaImage);
|
||||
end.
|
||||
@@ -0,0 +1,13 @@
|
||||
program MainDemo;
|
||||
|
||||
uses
|
||||
Forms,
|
||||
MainForm in 'MainForm.pas' {fwbMainForm};
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TfwbMainForm, fwbMainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
Binary file not shown.
@@ -0,0 +1,607 @@
|
||||
object fwbMainForm: TfwbMainForm
|
||||
Left = 205
|
||||
Top = 206
|
||||
Width = 696
|
||||
Height = 480
|
||||
Caption = 'FreeWinBitmap - MainDemo'
|
||||
Color = clCaptionText
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
Menu = MainMenu
|
||||
OldCreateOrder = False
|
||||
ShowHint = True
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnPaint = FormPaint
|
||||
OnResize = FormResize
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object StatusBar: TStatusBar
|
||||
Left = 0
|
||||
Top = 411
|
||||
Width = 688
|
||||
Height = 23
|
||||
Panels = <
|
||||
item
|
||||
Alignment = taCenter
|
||||
Width = 120
|
||||
end
|
||||
item
|
||||
Alignment = taCenter
|
||||
Width = 80
|
||||
end
|
||||
item
|
||||
Width = 50
|
||||
end>
|
||||
end
|
||||
object tbTools: TToolBar
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 688
|
||||
Height = 29
|
||||
Caption = 'ToolBar'
|
||||
Color = clBtnFace
|
||||
EdgeBorders = [ebTop, ebBottom]
|
||||
Flat = True
|
||||
Images = ImageList1
|
||||
ParentColor = False
|
||||
TabOrder = 1
|
||||
object ToolButton1: TToolButton
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 8
|
||||
Caption = 'ToolButton1'
|
||||
ImageIndex = 1
|
||||
Style = tbsSeparator
|
||||
end
|
||||
object btnOpen: TToolButton
|
||||
Left = 8
|
||||
Top = 0
|
||||
Hint = 'Open image file...'
|
||||
Caption = 'Open...'
|
||||
ImageIndex = 0
|
||||
OnClick = mnuFileOpenClick
|
||||
end
|
||||
object ToolButton4: TToolButton
|
||||
Left = 31
|
||||
Top = 0
|
||||
Width = 8
|
||||
Caption = 'ToolButton4'
|
||||
ImageIndex = 4
|
||||
Style = tbsSeparator
|
||||
end
|
||||
object btnCopy: TToolButton
|
||||
Left = 39
|
||||
Top = 0
|
||||
Hint = 'Copy to clipboard'
|
||||
Caption = 'Copy'
|
||||
ImageIndex = 1
|
||||
OnClick = btnCopyClick
|
||||
end
|
||||
object btnPaste: TToolButton
|
||||
Left = 62
|
||||
Top = 0
|
||||
Hint = 'Paste from from clipboard'
|
||||
Caption = 'Paste'
|
||||
ImageIndex = 2
|
||||
OnClick = btnPasteClick
|
||||
end
|
||||
object ToolButton3: TToolButton
|
||||
Left = 85
|
||||
Top = 0
|
||||
Width = 8
|
||||
Caption = 'ToolButton3'
|
||||
ImageIndex = 4
|
||||
Style = tbsSeparator
|
||||
end
|
||||
object btnClear: TToolButton
|
||||
Left = 93
|
||||
Top = 0
|
||||
Caption = 'Clear'
|
||||
ImageIndex = 3
|
||||
OnClick = btnClearClick
|
||||
end
|
||||
end
|
||||
object MainMenu: TMainMenu
|
||||
Left = 120
|
||||
Top = 48
|
||||
object mnuFile: TMenuItem
|
||||
Caption = '&File'
|
||||
object mnuFileOpen: TMenuItem
|
||||
Caption = '&Open'
|
||||
OnClick = mnuFileOpenClick
|
||||
end
|
||||
object mnuExit: TMenuItem
|
||||
Caption = 'E&xit'
|
||||
OnClick = mnuExitClick
|
||||
end
|
||||
end
|
||||
object mnuImage: TMenuItem
|
||||
Caption = 'Image'
|
||||
object mnuImageFlip: TMenuItem
|
||||
Caption = 'Flip'
|
||||
object mnuFlipHorz: TMenuItem
|
||||
Caption = 'Horizontal'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuFlipVert: TMenuItem
|
||||
Caption = 'Vertical'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
end
|
||||
object mnuConvert: TMenuItem
|
||||
Caption = 'Convert'
|
||||
object mnuTo4Bits: TMenuItem
|
||||
Caption = 'To 4 Bits'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuTo8Bits: TMenuItem
|
||||
Caption = 'To 8 Bits'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuTo16Bits555: TMenuItem
|
||||
Caption = 'To 16 Bits (555)'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuTo16Bits565: TMenuItem
|
||||
Caption = 'To 16 Bits (565)'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuTo24Bits: TMenuItem
|
||||
Caption = 'To 24 Bits'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuTo32Bits: TMenuItem
|
||||
Caption = 'To 32 Bits'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuDither: TMenuItem
|
||||
Caption = 'Dither'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuQuantize: TMenuItem
|
||||
Caption = 'Quantize'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuGrayScale: TMenuItem
|
||||
Caption = 'GrayScale'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
end
|
||||
object mnuRotate: TMenuItem
|
||||
Caption = 'Rotate'
|
||||
object mnuClockwise: TMenuItem
|
||||
Caption = 'Clockwise'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuAntiClockwise: TMenuItem
|
||||
Caption = 'AntiClockwise'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
end
|
||||
object mnuInvert: TMenuItem
|
||||
Caption = 'Invert'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
object mnuClear: TMenuItem
|
||||
Caption = 'Clear'
|
||||
OnClick = mnuFlipHorzClick
|
||||
end
|
||||
end
|
||||
end
|
||||
object OD: TOpenDialog
|
||||
Title = 'Open file ...'
|
||||
Left = 152
|
||||
Top = 48
|
||||
end
|
||||
object ImageList1: TImageList
|
||||
Left = 184
|
||||
Top = 48
|
||||
Bitmap = {
|
||||
494C010104000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
|
||||
0000000000003600000028000000400000003000000001002000000000000030
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000007088900060809000607880005070
|
||||
8000506070004058600040485000303840002030300020203000101820001010
|
||||
1000101020000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000080685000203040002030400020304000203040002030
|
||||
4000203040002030400020304000203040000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000DFE2F700EFF0FB0000000000000000007088900090A0B00070B0D0000090
|
||||
D0000090D0000090D0000090C0001088C0001080B0001080B0002078A0002070
|
||||
900020486000B9BEBE0000000000000000000000000000000000000000000000
|
||||
00000000000000000000C0704000B0583000B0583000A0502000A05020009048
|
||||
2000904820009040200080402000000000007086900060809000506070004050
|
||||
6000304050002030400090706000F0E0D000B0A09000B0A09000B0A09000B0A0
|
||||
9000B0A09000B0A09000B0A0900020304000000000000000000000000000EFF1
|
||||
FF001F3BF100EFF1FF000000000000000000000000000000000000000000CFD3
|
||||
F3001F2DB900CFD2F30000000000000000008088900080C0D00090A8B00080E0
|
||||
FF0060D0FF0050C8FF0050C8FF0040C0F00030B0F00030A8F00020A0E0001090
|
||||
D00020688000656A700000000000000000000000000000000000000000000000
|
||||
00000000000000000000C0785000FFF8F000D0B0A000D0B0A000D0B0A000C0B0
|
||||
A000C0A8A000C0A8900090402000000000007080900020B8F0000090D0000090
|
||||
D0000090D0000090D00090786000F0E8E000F0D8D000E0D0C000E0C8C000D0C0
|
||||
B000D0B8B000D0B8B000B0A09000203040000000000000000000F0F2FF00576F
|
||||
FF001030FF001E34FF00EFF1FF00000000000000000000000000DFE2F7003F51
|
||||
CF000018C0000F1EB400DFE2F700000000008090A00080D0F00090A8B00090C0
|
||||
D00070D8FF0060D0FF0060D0FF0050C8FF0050C0FF0040B8F00030B0F00030A8
|
||||
F0001088D00020486000E1E4E500000000000000000000000000000000000000
|
||||
00000000000000000000D0886000FFFFFF00E0906000D0805000D0805000D080
|
||||
5000D0805000C0A8A00090482000000000007088900070C8F00010B8F00010B0
|
||||
F00000A8E0000098D000A0807000F0F0F000C0B0A000C0B0A000C0A8A000B0A0
|
||||
9000D0C0B000B0A09000B0A0900020304000000000000000000000000000F1F2
|
||||
FF002D52FF001030FF000028FF00CFD5FF0000000000CFD3F3001F34C7000018
|
||||
D0000F25C300BFC5EF0000000000000000008090A00080D8F00080C8E00090A8
|
||||
B00080E0FF0070D0FF0060D8FF0060D0FF0060D0FF0050C8FF0040C0F00040B8
|
||||
F00030B0F000206880007897A50000000000B0A0900060483000604830006048
|
||||
30006048300060483000D0907000FFFFFF00FFFFFF00FFF0F000F0E0D000F0D0
|
||||
C000F0C0B000C0B0A00090482000000000008088900070D0F00030C0F00010B8
|
||||
F00000A8F00000A0E000A0888000FFF8FF00F0F0F000F0E8E000F0D8D000E0D0
|
||||
C000705850006050400050484000404040000000000000000000000000000000
|
||||
0000F1F2FF002D52FF001030FF000F2DFF00CFD3F6001F34D5000020E0000F25
|
||||
D200DFE2F7000000000000000000000000008098A00090E0F00090E0FF0090A8
|
||||
B00090B8C00070D8FF0060D8FF0060D8FF0060D8FF0060D0FF0050D0FF0050C8
|
||||
FF0040B8F00030A0E0004B697800DEE1E400B0A09000FFF0F000F0E0D000E0D8
|
||||
D000E0D0C000E0C8C000E0A08000FFFFFF00F0A88000E0987000E0906000D080
|
||||
5000D0805000D0B0A000A0482000000000008090A00080D8F00040C8F00030C0
|
||||
F00010B8F00000A0E000B0908000FFFFFF00C0B0A000C0B0A000C0A8A000F0E0
|
||||
D00080605000D0C8C00060504000000000000000000000000000000000000000
|
||||
000000000000E3E6FF005669FF001038FF000020F0000F2DF0002F42D800DFE2
|
||||
F700000000000000000000000000000000008098A00090E0F000A0E8FF0080C8
|
||||
E00090A8B00080E0FF0080E0FF0080E0FF0080E0FF0080E0FF0080E0FF0080E0
|
||||
FF0070D8FF0070D8FF0050A8D000919BA500B0A09000FFF8F000E0B08000E0A0
|
||||
7000E0A07000D0987000E0A89000FFFFFF00FFFFFF00FFFFFF00FFF8F000F0E8
|
||||
E000F0D0C000D0B0A000A0502000000000008098A00090E0F00060D8F00050C8
|
||||
F00030C0F00010B0F000B0989000FFFFFF00FFFFFF00FFF8FF00F0F0F000F0E8
|
||||
E000806850008060500000000000000000000000000000000000000000000000
|
||||
00000000000000000000C3CAFF002048FF001030FF000F2DF000CFD3F6000000
|
||||
00000000000000000000000000000000000090A0A000A0E8F000A0E8FF00A0E8
|
||||
FF0090B0C00090B0C00090A8B00090A8B00080A0B00080A0B0008098A0008098
|
||||
A0008090A0008090A0008088900070889000C0A89000FFFFFF00FFF8F000F0F0
|
||||
F000F0E8E000F0E0D000E0B8A000FFFFFF00FFB09000FFB09000F0D8D000E090
|
||||
6000B0583000B0583000A0502000000000008098A000A0E8F00080E0F00070D8
|
||||
F00050D0F00010B0F000B0A09000B0989000B0908000A0888000A08070009078
|
||||
6000907060000000000000000000000000000000000000000000000000000000
|
||||
000000000000CFD7FF004060FF003050FF002D4BFF001038FF000020F000DFE3
|
||||
FD000000000000000000000000000000000090A0B000A0E8F000A0F0FF00A0E8
|
||||
FF00A0E8FF0080D8FF0060D8FF0060D8FF0060D8FF0060D8FF0060D8FF0060D8
|
||||
FF0070889000000000000000000000000000C0A8A000FFFFFF00FFC8A000F0B8
|
||||
9000E0B08000E0A07000F0C0A000FFFFFF00FFFFFF00FFFFFF00FFFFFF00F098
|
||||
7000F0C8B000B0583000EBD5CB000000000090A0A000B0F0FF00A0E8FF0090E0
|
||||
F00070D0F00010A0D00010A0D00010A0D0001098D0000090D0000090D0000090
|
||||
D000303840000000000000000000000000000000000000000000000000000000
|
||||
0000DBE1FF004060FF004058FF004B70FF00CFD5FF004B69FF002040FF000020
|
||||
F000CFD5FC0000000000000000000000000090A0B000A0F0F000B0F0F000A0F0
|
||||
FF00A0E8FF00A0E8FF0070D8FF0090A0A0008098A0008098A0008090A0008090
|
||||
900070889000000000000000000000000000C0B0A000FFFFFF00FFFFFF00FFF8
|
||||
FF00FFF0F000F0E8E000F0C8B000FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0A8
|
||||
8000C0683000EFD9CB00000000000000000090A0B000B0F0FF00A0F0FF006080
|
||||
9000607080005070800050687000506870005060700040587000207090000090
|
||||
D00040486000000000000000000000000000000000000000000000000000E7EB
|
||||
FF005070FF005078FF00708AFF00E7EBFF0000000000DBDFFF004B69FF003048
|
||||
FF000020F000CFD5FC00000000000000000090A8B000A0D0E000B0F0F000B0F0
|
||||
F000A0F0FF00A0E8FF0090A0B000B3C7CB000000000000000000000000000000
|
||||
000000000000906850009068500090685000D0B8B000FFFFFF00FFD8C000FFD0
|
||||
B000F0E0D000B0A09000F0C8B000F0C0B000F0C0B000F0B8A000F0B09000F0B0
|
||||
9000F7E3D70000000000000000000000000090A8B000B0F0FF00B0F0FF006088
|
||||
900090C8D00090E8F00080D8E00060C8E0005098B000405860002080A0000090
|
||||
D000505870000000000000000000000000000000000000000000F3F5FF006078
|
||||
FF006078FF00697FFF00F3F5FF00000000000000000000000000E7EAFF004B69
|
||||
FF003050FF000028FF00DFE3FD0000000000DCE3E60090A8B00090A8B00090A8
|
||||
B00090A8B00090A8B000AAB3B400000000000000000000000000000000000000
|
||||
000000000000E1D4D2009068500090685000D0C0B000FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00C0A89000D0C8C00090706000E1DCD80000000000000000000000
|
||||
00000000000000000000000000000000000090A8B000B0F0F000B0F0FF00A0F0
|
||||
F0007098A000A0F0F00060757C0080C8D000507080003060800060C0F00020B8
|
||||
F00050607000000000000000000000000000000000000000000000000000E7EB
|
||||
FF006987FF00F3F5FF000000000000000000000000000000000000000000E7EA
|
||||
FF005773FF00E1E5FF0000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000090786000B7A498000000
|
||||
0000F9F6F600A0908000E1D9D20090786000E0C0B000FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00C0B0A000A0806000E1DCD8000000000000000000000000000000
|
||||
000000000000000000000000000000000000CED8DC0090A8B00090A8B00090A8
|
||||
B0006090A000A0E8F000A0E8F00090D8E0004068700070889000808890007088
|
||||
9000D7DADC000000000000000000000000000000000000000000000000000000
|
||||
0000F3F5FF000000000000000000000000000000000000000000000000000000
|
||||
0000E7EAFF000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000000000000000D1CFC900A0908000A088
|
||||
8000B0988000CFC7BF000000000000000000E0C0B000E0C0B000D0C0B000D0C0
|
||||
B000D0B8B000D0B0A000E6DEDC00000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000080B0C00080B0C00080A0B000DEE1E40000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000424D3E000000000000003E000000
|
||||
2800000040000000300000000100010000000000800100000000000000000000
|
||||
000000000000000000000000FFFFFF0000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000FFFFFFFFFFFFFFFF0007FFFFFC00FFF3
|
||||
0003FC010000E3E30003FC010000C1C10001FC010000E083000100010000F007
|
||||
000000010001F80F000000010003FC1F000000010007F80F000700010007F007
|
||||
000700030007E08300F800070007C1C101F8007F0007E3E3FF9000FF0007F7F7
|
||||
FF8301FFF87FFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
|
||||
000000000000}
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,227 @@
|
||||
unit MainForm;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, Menus, FreeBitmap, ComCtrls, ImgList, ToolWin;
|
||||
|
||||
type
|
||||
TfwbMainForm = class(TForm)
|
||||
MainMenu: TMainMenu;
|
||||
mnuFile: TMenuItem;
|
||||
mnuFileOpen: TMenuItem;
|
||||
mnuExit: TMenuItem;
|
||||
OD: TOpenDialog;
|
||||
StatusBar: TStatusBar;
|
||||
mnuImage: TMenuItem;
|
||||
mnuImageFlip: TMenuItem;
|
||||
mnuFlipHorz: TMenuItem;
|
||||
mnuFlipVert: TMenuItem;
|
||||
mnuConvert: TMenuItem;
|
||||
mnuTo8Bits: TMenuItem;
|
||||
mnuTo16Bits555: TMenuItem;
|
||||
mnuTo16Bits565: TMenuItem;
|
||||
mnuTo24Bits: TMenuItem;
|
||||
mnuTo32Bits: TMenuItem;
|
||||
mnuDither: TMenuItem;
|
||||
mnuQuantize: TMenuItem;
|
||||
mnuGrayScale: TMenuItem;
|
||||
mnuRotate: TMenuItem;
|
||||
mnuClockwise: TMenuItem;
|
||||
mnuAntiClockwise: TMenuItem;
|
||||
mnuInvert: TMenuItem;
|
||||
mnuClear: TMenuItem;
|
||||
mnuTo4Bits: TMenuItem;
|
||||
tbTools: TToolBar;
|
||||
btnCopy: TToolButton;
|
||||
ImageList1: TImageList;
|
||||
ToolButton1: TToolButton;
|
||||
btnPaste: TToolButton;
|
||||
btnClear: TToolButton;
|
||||
btnOpen: TToolButton;
|
||||
ToolButton3: TToolButton;
|
||||
ToolButton4: TToolButton;
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure FormPaint(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure mnuExitClick(Sender: TObject);
|
||||
procedure mnuFileOpenClick(Sender: TObject);
|
||||
procedure FormResize(Sender: TObject);
|
||||
procedure mnuFlipHorzClick(Sender: TObject);
|
||||
procedure btnCopyClick(Sender: TObject);
|
||||
procedure btnClearClick(Sender: TObject);
|
||||
procedure btnPasteClick(Sender: TObject);
|
||||
private
|
||||
FBitmap: TFreeWinBitmap;
|
||||
procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND;
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
fwbMainForm: TfwbMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses
|
||||
FreeUtils, FreeImage, Math;
|
||||
|
||||
procedure TfwbMainForm.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
if Assigned(FBitmap) then
|
||||
FBitmap.Free;
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.FormPaint(Sender: TObject);
|
||||
var
|
||||
dx, dy, w, h: Integer;
|
||||
r1, r2: Double;
|
||||
R: TRect;
|
||||
begin
|
||||
if FBitmap.IsValid then // draw the bitmap
|
||||
begin
|
||||
// determine paint rect
|
||||
r1 := FBitmap.GetWidth / FBitmap.GetHeight;
|
||||
r2 := ClientWidth / ClientHeight;
|
||||
if r1 > r2 then // fit by width
|
||||
begin
|
||||
w := ClientWidth;
|
||||
h := Floor(w / r1);
|
||||
dx := 0;
|
||||
dy := (ClientHeight - h) div 2;
|
||||
end
|
||||
else // fit by height
|
||||
begin
|
||||
h := ClientHeight;
|
||||
w := Floor(h * r1);
|
||||
dy := 0;
|
||||
dx := (ClientWidth - w) div 2;
|
||||
end;
|
||||
with ClientRect do
|
||||
R := Bounds(Left + dx, Top + dy, w, h);
|
||||
FBitmap.Draw(Canvas.Handle, R);
|
||||
|
||||
// erase area around the image
|
||||
Canvas.Brush.Color := Color;
|
||||
if dx > 0 then
|
||||
begin
|
||||
with ClientRect do
|
||||
R := Bounds(Left, Top, dx, ClientHeight);
|
||||
Canvas.FillRect(R);
|
||||
with ClientRect do
|
||||
R := Bounds(Right - dx, Top, dx, ClientHeight);
|
||||
Canvas.FillRect(R);
|
||||
end else
|
||||
if dy > 0 then
|
||||
begin
|
||||
with ClientRect do
|
||||
R := Bounds(Left, Top, ClientWidth, dy);
|
||||
Canvas.FillRect(R);
|
||||
with ClientRect do
|
||||
R := Bounds(Left, Bottom - dy, ClientWidth, dy);
|
||||
Canvas.FillRect(R);
|
||||
end
|
||||
end
|
||||
else // clear
|
||||
begin
|
||||
Canvas.Brush.Color := Color;
|
||||
Canvas.FillRect(ClientRect);
|
||||
end
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FBitmap := TFreeWinBitmap.Create;
|
||||
|
||||
mnuImage.Enabled := FBitmap.IsValid;
|
||||
OD.Filter := FIU_GetAllFilters;
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.mnuExitClick(Sender: TObject);
|
||||
begin
|
||||
Close;
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.mnuFileOpenClick(Sender: TObject);
|
||||
var
|
||||
t: Cardinal;
|
||||
begin
|
||||
if OD.Execute then
|
||||
begin
|
||||
t := GetTickCount;
|
||||
FBitmap.Load(OD.FileName);
|
||||
t := GetTickCount - t;
|
||||
mnuImage.Enabled := FBitmap.IsValid;
|
||||
StatusBar.Panels[0].Text := 'Loaded in ' + IntToStr(t) + ' msec.';
|
||||
StatusBar.Panels[1].Text := Format('%dx%d', [FBitmap.GetWidth, FBitmap.GetHeight]);
|
||||
Invalidate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.FormResize(Sender: TObject);
|
||||
begin
|
||||
Invalidate
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.WMEraseBkgnd(var Message: TMessage);
|
||||
begin
|
||||
Message.Result := 1;
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.mnuFlipHorzClick(Sender: TObject);
|
||||
begin
|
||||
with FBitmap do
|
||||
if Sender = mnuFlipHorz then
|
||||
FLipHorizontal else
|
||||
if Sender = mnuFlipVert then
|
||||
FlipVertical else
|
||||
if Sender = mnuTo4Bits then
|
||||
ConvertTo4Bits else
|
||||
if Sender = mnuTo8Bits then
|
||||
ConvertTo8Bits else
|
||||
if Sender = mnuTo16Bits555 then
|
||||
ConvertTo16Bits555 else
|
||||
if Sender = mnuTo16Bits565 then
|
||||
ConvertTo16Bits565 else
|
||||
if Sender = mnuTo24Bits then
|
||||
ConvertTo24Bits else
|
||||
if Sender = mnuTo32Bits then
|
||||
ConvertTo32Bits else
|
||||
if Sender = mnuDither then
|
||||
Dither(FID_FS) else
|
||||
if Sender = mnuQuantize then
|
||||
ColorQuantize(FIQ_WUQUANT) else
|
||||
if Sender = mnuGrayScale then
|
||||
ConvertToGrayscale else
|
||||
if Sender = mnuClockwise then
|
||||
Rotate(-90) else
|
||||
if Sender = mnuAntiClockwise then
|
||||
Rotate(90) else
|
||||
if Sender = mnuInvert then
|
||||
Invert else
|
||||
if Sender = mnuClear then
|
||||
Clear;
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.btnCopyClick(Sender: TObject);
|
||||
begin
|
||||
if FBitmap.IsValid then FBitmap.CopyToClipBoard(Handle);
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.btnClearClick(Sender: TObject);
|
||||
begin
|
||||
FBitmap.Clear;
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TfwbMainForm.btnPasteClick(Sender: TObject);
|
||||
begin
|
||||
FBitmap.PasteFromClipBoard;
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
end.
|
||||
3
DSTexCompress/FreeImage/Wrapper/Delphi/license.txt
Normal file
3
DSTexCompress/FreeImage/Wrapper/Delphi/license.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
The contents of FreeImageDW package are subject to the FreeImage Public License Version 1.0 (the "License"); you may not use this package except in compliance with the License. You may obtain a copy of the License at http://home.wxs.nl/~flvdberg/freeimage-license.txt
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
|
||||
2131
DSTexCompress/FreeImage/Wrapper/Delphi/src/FreeBitmap.pas
Normal file
2131
DSTexCompress/FreeImage/Wrapper/Delphi/src/FreeBitmap.pas
Normal file
File diff suppressed because it is too large
Load Diff
1398
DSTexCompress/FreeImage/Wrapper/Delphi/src/FreeImage.pas
Normal file
1398
DSTexCompress/FreeImage/Wrapper/Delphi/src/FreeImage.pas
Normal file
File diff suppressed because it is too large
Load Diff
186
DSTexCompress/FreeImage/Wrapper/Delphi/src/FreeUtils.pas
Normal file
186
DSTexCompress/FreeImage/Wrapper/Delphi/src/FreeUtils.pas
Normal file
@@ -0,0 +1,186 @@
|
||||
unit FreeUtils;
|
||||
|
||||
// ==========================================================
|
||||
//
|
||||
// Delphi wrapper for FreeImage 3
|
||||
//
|
||||
// Design and implementation by
|
||||
// - Anatoliy Pulyaevskiy (xvel84@rambler.ru)
|
||||
//
|
||||
// Contributors:
|
||||
// - Enzo Costantini (enzocostantini@libero.it)
|
||||
// - Armindo (tech1.yxendis@wanadoo.fr)
|
||||
// - Lorenzo Monti (LM) lomo74@gmail.com
|
||||
//
|
||||
// Revision history
|
||||
// When Who What
|
||||
// ----------- ----- -----------------------------------------------------------
|
||||
// 2010-07-14 LM made RAD2010 compliant (unicode)
|
||||
//
|
||||
// This file is part of FreeImage 3
|
||||
//
|
||||
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
|
||||
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
|
||||
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
|
||||
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
|
||||
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
|
||||
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
|
||||
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
|
||||
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
|
||||
// THIS DISCLAIMER.
|
||||
//
|
||||
// Use at your own risk!
|
||||
//
|
||||
// ==========================================================
|
||||
|
||||
interface
|
||||
|
||||
{$I 'Version.inc'}
|
||||
|
||||
uses
|
||||
{$IFDEF DELPHI2010}AnsiStrings,{$ENDIF} SysUtils, Classes, FreeImage;
|
||||
|
||||
function FIU_GetFIFType(filename: AnsiString): FREE_IMAGE_FORMAT;
|
||||
|
||||
// returns FIF (plugin) description string
|
||||
function FIU_GetFIFDescription(fif: FREE_IMAGE_FORMAT): AnsiString;
|
||||
|
||||
procedure FIU_GetAllDescriptions(var Descriptions: TStringList);
|
||||
|
||||
// returns file extentions for FIF (e.g. '*.tif;*.tiff)
|
||||
function FIU_GetFIFExtList(fif: FREE_IMAGE_FORMAT): AnsiString;
|
||||
|
||||
// returns file extentions for all plugins
|
||||
function FIU_GetFullExtList: AnsiString;
|
||||
|
||||
// returns "Description + | + ExtList" for specified FIF
|
||||
function FIU_GetFIFFilter(fif: FREE_IMAGE_FORMAT): AnsiString;
|
||||
|
||||
// All supported formats + Full filter list for FIFs
|
||||
function FIU_GetAllFilters: AnsiString;
|
||||
|
||||
//Filter for OpenDialogs
|
||||
function FIU_GetAllOpenFilters: AnsiString;
|
||||
|
||||
//Filter for SaveDialogs
|
||||
function FIU_GetAllSaveFilters: AnsiString;
|
||||
|
||||
implementation
|
||||
|
||||
const
|
||||
FIF_START = FIF_UNKNOWN;
|
||||
FIF_END = FIF_XPM;
|
||||
|
||||
function FIU_GetFIFType(filename: AnsiString): FREE_IMAGE_FORMAT;
|
||||
begin
|
||||
Result := FreeImage_GetFileType(PAnsiChar(filename), 0);
|
||||
end;
|
||||
|
||||
function FIU_GetFIFDescription(fif: FREE_IMAGE_FORMAT): AnsiString;
|
||||
begin
|
||||
Result := FreeImage_GetFIFDescription(fif)
|
||||
end;
|
||||
|
||||
procedure FIU_GetAllDescriptions(var Descriptions: TStringList);
|
||||
var
|
||||
fif: FREE_IMAGE_FORMAT;
|
||||
begin
|
||||
Descriptions.Clear;
|
||||
for fif := FIF_START to FIF_END do
|
||||
Descriptions.Add(string(FreeImage_GetFIFDescription(fif)) + ' (' +
|
||||
string(FIu_GetFIFExtList(fif)) + ')');
|
||||
end;
|
||||
|
||||
function FIU_GetFIFExtList(fif: FREE_IMAGE_FORMAT): AnsiString;
|
||||
var
|
||||
ExtList: AnsiString;
|
||||
I: Smallint;
|
||||
C: AnsiChar;
|
||||
begin
|
||||
Result := '*.';
|
||||
ExtList := FreeImage_GetFIFExtensionList(fif);
|
||||
for I := 1 to Length(ExtList) do
|
||||
begin
|
||||
C := ExtList[i];
|
||||
if C <> ',' then
|
||||
Result := Result + C
|
||||
else
|
||||
Result := Result + ';*.';
|
||||
end
|
||||
end;
|
||||
|
||||
function FIU_GetFullExtList: AnsiString;
|
||||
var
|
||||
fif: FREE_IMAGE_FORMAT;
|
||||
begin
|
||||
Result := FIU_GetFIFExtList(FIF_START);
|
||||
for fif := FIF_START to FIF_END do
|
||||
Result := Result + ';' + FIU_GetFIFExtList(fif)
|
||||
end;
|
||||
|
||||
function FIU_GetFIFFilter(fif: FREE_IMAGE_FORMAT): AnsiString;
|
||||
var
|
||||
Text, ExtList: AnsiString;
|
||||
begin
|
||||
Result := '';
|
||||
if fif <> FIF_UNKNOWN then
|
||||
begin
|
||||
Text := {$IFDEF DELPHI2010}AnsiStrings.{$ENDIF}Trim(FreeImage_GetFIFDescription(fif));
|
||||
ExtList := FIU_GetFIFExtList(fif);
|
||||
Result := Text + '(' + ExtList + ')' + '|' + ExtList
|
||||
end
|
||||
end;
|
||||
|
||||
function FIU_GetAllFilters: AnsiString;
|
||||
var
|
||||
fif: FREE_IMAGE_FORMAT;
|
||||
begin
|
||||
Result := 'All supported formats|' + FIU_GetFullExtList;
|
||||
for fif := FIF_START to FIF_END do
|
||||
begin
|
||||
Result := Result + '|' + FIU_GetFIFFilter(fif)
|
||||
end;
|
||||
end;
|
||||
|
||||
function FIU_GetAllOpenFilters: AnsiString;
|
||||
var
|
||||
fif: FREE_IMAGE_FORMAT;
|
||||
begin
|
||||
Result := 'All supported formats|' + FIU_GetFullExtList;
|
||||
for fif := FIF_START to FIF_END do
|
||||
if FreeImage_FIFSupportsReading(fif) then
|
||||
begin
|
||||
Result := Result + '|' + FIU_GetFIFFilter(fif)
|
||||
end;
|
||||
end;
|
||||
|
||||
function FIU_GetAllSaveFilters: AnsiString;
|
||||
var
|
||||
ExtList: AnsiString;
|
||||
I: Smallint;
|
||||
C: AnsiChar;
|
||||
fif: FREE_IMAGE_FORMAT;
|
||||
s: AnsiString;
|
||||
begin
|
||||
result := '';
|
||||
for fif := FIF_START to FIF_END do
|
||||
if FreeImage_FIFSupportsWriting(fif) then
|
||||
begin
|
||||
ExtList := FreeImage_GetFIFExtensionList(fif);
|
||||
s := '';
|
||||
for I := 1 to Length(ExtList) do
|
||||
begin
|
||||
C := ExtList[i];
|
||||
if C <> ',' then
|
||||
S := S + C
|
||||
else
|
||||
begin
|
||||
result := Result + FreeImage_GetFIFDescription(fif) + ' (' + UpperCase(s) + ')|*.' + s + '|';
|
||||
s := '';
|
||||
end;
|
||||
end;
|
||||
result := Result + FreeImage_GetFIFDescription(fif) + ' (' + UpperCase(s) + ')|*.' + s + '|';
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
186
DSTexCompress/FreeImage/Wrapper/Delphi/src/Version.inc
Normal file
186
DSTexCompress/FreeImage/Wrapper/Delphi/src/Version.inc
Normal file
@@ -0,0 +1,186 @@
|
||||
// ==========================================================
|
||||
// Delphi wrapper for FreeImage 3
|
||||
//
|
||||
// Design and implementation by
|
||||
// - Simon Beavis
|
||||
// - Peter Bystr<74>m
|
||||
// - Anatoliy Pulyaevskiy (xvel84@rambler.ru)
|
||||
//
|
||||
// Contributors:
|
||||
// - Lorenzo Monti (LM) lomo74@gmail.com
|
||||
//
|
||||
// Revision history
|
||||
// When Who What
|
||||
// ----------- ----- -----------------------------------------------------------
|
||||
// 2010-07-29 LM Added Free Pascal / Lazarus 32 bit support
|
||||
//
|
||||
// This file is part of FreeImage 3
|
||||
//
|
||||
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
|
||||
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
|
||||
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
|
||||
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
|
||||
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
|
||||
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
|
||||
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
|
||||
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
|
||||
// THIS DISCLAIMER.
|
||||
//
|
||||
// Use at your own risk!
|
||||
// ==========================================================
|
||||
|
||||
//some older Delphi version will define WIN32 but not MSWINDOWS
|
||||
{$IFNDEF MSWINDOWS}
|
||||
{$IFDEF WIN32}
|
||||
{$DEFINE MSWINDOWS}
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
|
||||
//test for compiler
|
||||
{$IFDEF FPC}
|
||||
//Free pascal
|
||||
{$IFNDEF CPU32}
|
||||
{$ERROR "64 bit platforms not tested yet. Remove this line if you feel brave."}
|
||||
{$ENDIF}
|
||||
{$IFNDEF ENDIAN_LITTLE}
|
||||
{$ERROR "Big endian CPUs not tested yet. Remove this line if you feel brave."}
|
||||
{$ENDIF}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$DEFINE DELPHI7}
|
||||
{$ELSE}
|
||||
//Delphi
|
||||
{$IFDEF VER80}
|
||||
{$DEFINE DELPHI1}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER90}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER100}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER120}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER130}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER140}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER150}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$DEFINE DELPHI7}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER160}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$DEFINE DELPHI7}
|
||||
{$DEFINE DELPHI8}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER170}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$DEFINE DELPHI7}
|
||||
{$DEFINE DELPHI8}
|
||||
{$DEFINE DELPHI2005}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER180}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$DEFINE DELPHI7}
|
||||
{$DEFINE DELPHI8}
|
||||
{$DEFINE DELPHI2005}
|
||||
{$DEFINE DELPHI2006}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER185}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$DEFINE DELPHI7}
|
||||
{$DEFINE DELPHI8}
|
||||
{$DEFINE DELPHI2005}
|
||||
{$DEFINE DELPHI2006}
|
||||
{$DEFINE DELPHI2007}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER200}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$DEFINE DELPHI7}
|
||||
{$DEFINE DELPHI8}
|
||||
{$DEFINE DELPHI2005}
|
||||
{$DEFINE DELPHI2006}
|
||||
{$DEFINE DELPHI2007}
|
||||
{$DEFINE DELPHI2009}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER210}
|
||||
{$DEFINE DELPHI1}
|
||||
{$DEFINE DELPHI2}
|
||||
{$DEFINE DELPHI3}
|
||||
{$DEFINE DELPHI4}
|
||||
{$DEFINE DELPHI5}
|
||||
{$DEFINE DELPHI6}
|
||||
{$DEFINE DELPHI7}
|
||||
{$DEFINE DELPHI8}
|
||||
{$DEFINE DELPHI2005}
|
||||
{$DEFINE DELPHI2006}
|
||||
{$DEFINE DELPHI2007}
|
||||
{$DEFINE DELPHI2009}
|
||||
{$DEFINE DELPHI2010}
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
Reference in New Issue
Block a user