2 $Id: ImagingExport.pas 173 2009-09-04 17:05:52Z galfar $
3 Vampyre Imaging Library
5 http://imaginglib.sourceforge.net
7 The contents of this file are used with permission, subject to the Mozilla
8 Public License Version 1.1 (the "License"); you may not use this file except
9 in compliance with the License. You may obtain a copy of the License at
10 http://www.mozilla.org/MPL/MPL-1.1.html
12 Software distributed under the License is distributed on an "AS IS" basis,
13 WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
14 the specific language governing rights and limitations under the License.
16 Alternatively, the contents of this file may be used under the terms of the
17 GNU Lesser General Public License (the "LGPL License"), in which case the
18 provisions of the LGPL License are applicable instead of those above.
19 If you wish to allow use of your version of this file only under the terms
20 of the LGPL License and not to allow others to use your version of this file
21 under the MPL, indicate your decision by deleting the provisions above and
22 replace them with the notice and other provisions required by the LGPL
23 License. If you do not delete the provisions above, a recipient may use
24 your version of this file under either the MPL or the LGPL License.
26 For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html
29 { This function contains functions exported from Imaging dynamic link library.
30 All string are exported as PChars and all var parameters are exported
31 as pointers. All posible exceptions getting out of dll are catched.}
34 {$I ImagingOptions.inc}
42 { Returns version of Imaging library. }
43 procedure ImGetVersion(var Major
, Minor
, Patch
: LongInt); cdecl;
44 { Look at InitImage for details.}
45 procedure ImInitImage(var Image
: TImageData
); cdecl;
46 { Look at NewImage for details.}
47 function ImNewImage(Width
, Height
: LongInt; Format
: TImageFormat
;
48 var Image
: TImageData
): Boolean; cdecl;
49 { Look at TestImage for details.}
50 function ImTestImage(var Image
: TImageData
): Boolean; cdecl;
51 { Look at FreeImage for details.}
52 function ImFreeImage(var Image
: TImageData
): Boolean; cdecl;
53 { Look at DetermineFileFormat for details. Ext should have enough space for
54 result file extension.}
55 function ImDetermineFileFormat(FileName
, Ext
: PAnsiChar): Boolean; cdecl;
56 { Look at DetermineMemoryFormat for details. Ext should have enough space for
57 result file extension.}
58 function ImDetermineMemoryFormat(Data
: Pointer; Size
: LongInt; Ext
: PAnsiChar): Boolean; cdecl;
59 { Look at IsFileFormatSupported for details.}
60 function ImIsFileFormatSupported(FileName
: PAnsiChar): Boolean; cdecl;
61 { Look at EnumFileFormats for details.}
62 function ImEnumFileFormats(var Index
: LongInt; Name
, DefaultExt
, Masks
: PAnsiChar;
63 var CanSave
, IsMultiImageFormat
: Boolean): Boolean; cdecl;
66 function ImInitImageList(Size
: LongInt; var ImageList
: TImageDataList
): Boolean; cdecl;
67 { Returns size of image list.}
68 function ImGetImageListSize(ImageList
: TImageDataList
): LongInt; cdecl;
69 { Returns image list's element at given index. Output image is not cloned it's
70 Bits point to Bits in list => do not free OutImage.}
71 function ImGetImageListElement(ImageList
: TImageDataList
; Index
: LongInt;
72 var OutImage
: TImageData
): Boolean; cdecl;
73 { Sets size of image list.}
74 function ImSetImageListSize(ImageList
: TImageDataList
; NewSize
: LongInt): Boolean; cdecl;
75 { Sets image list element at given index. Input image is not cloned - image in
76 list will point to InImage's Bits.}
77 function ImSetImageListElement(ImageList
: TImageDataList
; Index
: LongInt;
78 const InImage
: TImageData
): Boolean; cdecl;
79 { Returns True if all images in list pass ImTestImage test. }
80 function ImTestImagesInList(ImageList
: TImageDataList
): Boolean; cdecl;
81 { Frees image list and all images in it.}
82 function ImFreeImageList(var ImageList
: TImageDataList
): Boolean; cdecl;
84 { Look at LoadImageFromFile for details.}
85 function ImLoadImageFromFile(FileName
: PAnsiChar; var Image
: TImageData
): Boolean; cdecl;
86 { Look at LoadImageFromMemory for details.}
87 function ImLoadImageFromMemory(Data
: Pointer; Size
: LongInt; var Image
: TImageData
): Boolean; cdecl;
88 { Look at LoadMultiImageFromFile for details.}
89 function ImLoadMultiImageFromFile(FileName
: PAnsiChar; var ImageList
: TImageDataList
): Boolean; cdecl;
90 { Look at LoadMultiImageFromMemory for details.}
91 function ImLoadMultiImageFromMemory(Data
: Pointer; Size
: LongInt;
92 var ImageList
: TImageDataList
): Boolean; cdecl;
94 { Look at SaveImageToFile for details.}
95 function ImSaveImageToFile(FileName
: PAnsiChar; const Image
: TImageData
): Boolean; cdecl;
96 { Look at SaveImageToMemory for details.}
97 function ImSaveImageToMemory(Ext
: PAnsiChar; Data
: Pointer; var Size
: LongInt;
98 const Image
: TImageData
): Boolean; cdecl;
99 { Look at SaveMultiImageToFile for details.}
100 function ImSaveMultiImageToFile(FileName
: PAnsiChar; ImageList
: TImageDataList
): Boolean; cdecl;
101 { Look at SaveMultiImageToMemory for details.}
102 function ImSaveMultiImageToMemory(Ext
: PAnsiChar; Data
: Pointer; Size
: PLongInt;
103 ImageList
: TImageDataList
): Boolean; cdecl;
105 { Look at CloneImage for details.}
106 function ImCloneImage(const Image
: TImageData
; var Clone
: TImageData
): Boolean; cdecl;
107 { Look at ConvertImage for details.}
108 function ImConvertImage(var Image
: TImageData
; DestFormat
: TImageFormat
): Boolean; cdecl;
109 { Look at FlipImage for details.}
110 function ImFlipImage(var Image
: TImageData
): Boolean; cdecl;
111 { Look at MirrorImage for details.}
112 function ImMirrorImage(var Image
: TImageData
): Boolean; cdecl;
113 { Look at ResizeImage for details.}
114 function ImResizeImage(var Image
: TImageData
; NewWidth
, NewHeight
: LongInt;
115 Filter
: TResizeFilter
): Boolean; cdecl;
116 { Look at SwapChannels for details.}
117 function ImSwapChannels(var Image
: TImageData
; SrcChannel
, DstChannel
: LongInt): Boolean; cdecl;
118 { Look at ReduceColors for details.}
119 function ImReduceColors(var Image
: TImageData
; MaxColors
: LongInt): Boolean; cdecl;
120 { Look at GenerateMipMaps for details.}
121 function ImGenerateMipMaps(const Image
: TImageData
; Levels
: LongInt;
122 var MipMaps
: TImageDataList
): Boolean; cdecl;
123 { Look at MapImageToPalette for details.}
124 function ImMapImageToPalette(var Image
: TImageData
; Pal
: PPalette32
;
125 Entries
: LongInt): Boolean; cdecl;
126 { Look at SplitImage for details.}
127 function ImSplitImage(var Image
: TImageData
; var Chunks
: TImageDataList
;
128 ChunkWidth
, ChunkHeight
: LongInt; var XChunks
, YChunks
: LongInt;
129 PreserveSize
: Boolean; Fill
: Pointer): Boolean; cdecl;
130 { Look at MakePaletteForImages for details.}
131 function ImMakePaletteForImages(Images
: TImageDataList
; Pal
: PPalette32
;
132 MaxColors
: LongInt; ConvertImages
: Boolean): Boolean; cdecl;
133 { Look at RotateImage for details.}
134 function ImRotateImage(var Image
: TImageData
; Angle
: Single): Boolean; cdecl;
136 { Look at CopyRect for details.}
137 function ImCopyRect(const SrcImage
: TImageData
; SrcX
, SrcY
, Width
, Height
: LongInt;
138 var DstImage
: TImageData
; DstX
, DstY
: LongInt): Boolean; cdecl;
139 { Look at FillRect for details.}
140 function ImFillRect(var Image
: TImageData
; X
, Y
, Width
, Height
: LongInt;
141 Fill
: Pointer): Boolean; cdecl;
142 { Look at ReplaceColor for details.}
143 function ImReplaceColor(var Image
: TImageData
; X
, Y
, Width
, Height
: LongInt;
144 OldPixel
, NewPixel
: Pointer): Boolean; cdecl;
145 { Look at StretchRect for details.}
146 function ImStretchRect(const SrcImage
: TImageData
; SrcX
, SrcY
, SrcWidth
,
147 SrcHeight
: LongInt; var DstImage
: TImageData
; DstX
, DstY
, DstWidth
,
148 DstHeight
: LongInt; Filter
: TResizeFilter
): Boolean; cdecl;
149 { Look at GetPixelDirect for details.}
150 procedure ImGetPixelDirect(const Image
: TImageData
; X
, Y
: LongInt; Pixel
: Pointer); cdecl;
151 { Look at SetPixelDirect for details.}
152 procedure ImSetPixelDirect(const Image
: TImageData
; X
, Y
: LongInt; Pixel
: Pointer); cdecl;
153 { Look at GetPixel32 for details.}
154 function ImGetPixel32(const Image
: TImageData
; X
, Y
: LongInt): TColor32Rec
; cdecl;
155 { Look at SetPixel32 for details.}
156 procedure ImSetPixel32(const Image
: TImageData
; X
, Y
: LongInt; const Color
: TColor32Rec
); cdecl;
157 { Look at GetPixelFP for details.}
158 function ImGetPixelFP(const Image
: TImageData
; X
, Y
: LongInt): TColorFPRec
; cdecl;
159 { Look at SetPixelFP for details.}
160 procedure ImSetPixelFP(const Image
: TImageData
; X
, Y
: LongInt; const Color
: TColorFPRec
); cdecl;
162 { Look at NewPalette for details.}
163 function ImNewPalette(Entries
: LongInt; var Pal
: PPalette32
): Boolean; cdecl;
164 { Look at FreePalette for details.}
165 function ImFreePalette(var Pal
: PPalette32
): Boolean; cdecl;
166 { Look at CopyPalette for details.}
167 function ImCopyPalette(SrcPal
, DstPal
: PPalette32
; SrcIdx
, DstIdx
, Count
: LongInt): Boolean; cdecl;
168 { Look at FindColor for details.}
169 function ImFindColor(Pal
: PPalette32
; Entries
: LongInt; Color
: TColor32
): LongInt; cdecl;
170 { Look at FillGrayscalePalette for details.}
171 function ImFillGrayscalePalette(Pal
: PPalette32
; Entries
: LongInt): Boolean; cdecl;
172 { Look at FillCustomPalette for details.}
173 function ImFillCustomPalette(Pal
: PPalette32
; Entries
: LongInt; RBits
, GBits
,
174 BBits
: Byte; Alpha
: Byte): Boolean; cdecl;
175 { Look at SwapChannelsOfPalette for details.}
176 function ImSwapChannelsOfPalette(Pal
: PPalette32
; Entries
, SrcChannel
,
177 DstChannel
: LongInt): Boolean; cdecl;
179 { Look at SetOption for details.}
180 function ImSetOption(OptionId
, Value
: LongInt): Boolean; cdecl;
181 { Look at GetOption for details.}
182 function ImGetOption(OptionId
: LongInt): LongInt; cdecl;
183 { Look at PushOptions for details.}
184 function ImPushOptions
: Boolean; cdecl;
185 { Look at PopOptions for details.}
186 function ImPopOptions
: Boolean; cdecl;
188 { Look at GetImageFormatInfo for details.}
189 function ImGetImageFormatInfo(Format
: TImageFormat
; var Info
: TImageFormatInfo
): Boolean; cdecl;
190 { Look at GetPixelsSize for details.}
191 function ImGetPixelsSize(Format
: TImageFormat
; Width
, Height
: LongInt): LongInt; cdecl;
193 { Look at SetUserFileIO for details.}
194 procedure ImSetUserFileIO(OpenReadProc
: TOpenReadProc
; OpenWriteProc
:
195 TOpenWriteProc
; CloseProc
: TCloseProc
; EofProc
: TEofProc
; SeekProc
: TSeekProc
;
196 TellProc
: TTellProc
; ReadProc
: TReadProc
; WriteProc
: TWriteProc
); cdecl;
197 { Look at ResetFileIO for details.}
198 procedure ImResetFileIO
; cdecl;
200 { These are only for documentation generation reasons.}
201 { Loads Imaging functions from dll/so library.}
202 function ImLoadLibrary
: Boolean;
203 { Frees Imaging functions loaded from dll/so and releases library.}
204 function ImFreeLibrary
: Boolean;
212 function ImLoadLibrary
: Boolean; begin Result
:= True; end;
213 function ImFreeLibrary
: Boolean; begin Result
:= True; end;
216 TInternalList
= record
217 List
: TDynImageDataArray
;
219 PInternalList
= ^TInternalList
;
221 procedure ImGetVersion(var Major
, Minor
, Patch
: LongInt);
223 Major
:= ImagingVersionMajor
;
224 Minor
:= ImagingVersionMinor
;
225 Patch
:= ImagingVersionPatch
;
228 procedure ImInitImage(var Image
: TImageData
);
231 Imaging
.InitImage(Image
);
236 function ImNewImage(Width
, Height
: LongInt; Format
: TImageFormat
;
237 var Image
: TImageData
): Boolean;
240 Result
:= Imaging
.NewImage(Width
, Height
, Format
, Image
);
246 function ImTestImage(var Image
: TImageData
): Boolean;
249 Result
:= Imaging
.TestImage(Image
);
255 function ImFreeImage(var Image
: TImageData
): Boolean;
258 Imaging
.FreeImage(Image
);
265 function ImDetermineFileFormat(FileName
, Ext
: PAnsiChar): Boolean;
270 S
:= Imaging
.DetermineFileFormat(FileName
);
272 StrCopy(Ext
, PAnsiChar(AnsiString(S
)));
278 function ImDetermineMemoryFormat(Data
: Pointer; Size
: LongInt; Ext
: PAnsiChar): Boolean;
283 S
:= Imaging
.DetermineMemoryFormat(Data
, Size
);
285 StrCopy(Ext
, PAnsiChar(AnsiString(S
)));
291 function ImIsFileFormatSupported(FileName
: PAnsiChar): Boolean;
294 Result
:= Imaging
.IsFileFormatSupported(FileName
);
300 function ImEnumFileFormats(var Index
: LongInt; Name
, DefaultExt
, Masks
: PAnsiChar;
301 var CanSave
, IsMultiImageFormat
: Boolean): Boolean;
303 StrName
, StrDefaultExt
, StrMasks
: string;
306 Result
:= Imaging
.EnumFileFormats(Index
, StrName
, StrDefaultExt
, StrMasks
, CanSave
,
308 StrCopy(Name
, PAnsiChar(AnsiString(StrName
)));
309 StrCopy(DefaultExt
, PAnsiChar(AnsiString(StrDefaultExt
)));
310 StrCopy(Masks
, PAnsiChar(AnsiString(StrMasks
)));
316 function ImInitImageList(Size
: LongInt; var ImageList
: TImageDataList
): Boolean;
322 ImFreeImageList(ImageList
);
326 SetLength(Int
.List
, Size
);
327 ImageList
:= TImageDataList(Int
);
335 function ImGetImageListSize(ImageList
: TImageDataList
): LongInt;
338 Result
:= Length(PInternalList(ImageList
).List
);
344 function ImGetImageListElement(ImageList
: TImageDataList
; Index
: LongInt;
345 var OutImage
: TImageData
): Boolean;
348 Index
:= ClampInt(Index
, 0, Length(PInternalList(ImageList
).List
) - 1);
349 ImCloneImage(PInternalList(ImageList
).List
[Index
], OutImage
);
356 function ImSetImageListSize(ImageList
: TImageDataList
; NewSize
: LongInt):
362 OldSize
:= Length(PInternalList(ImageList
).List
);
363 if NewSize
< OldSize
then
364 for I
:= NewSize
to OldSize
- 1 do
365 Imaging
.FreeImage(PInternalList(ImageList
).List
[I
]);
366 SetLength(PInternalList(ImageList
).List
, NewSize
);
373 function ImSetImageListElement(ImageList
: TImageDataList
; Index
: LongInt;
374 const InImage
: TImageData
): Boolean;
377 Index
:= ClampInt(Index
, 0, Length(PInternalList(ImageList
).List
) - 1);
378 ImCloneImage(InImage
, PInternalList(ImageList
).List
[Index
]);
385 function ImTestImagesInList(ImageList
: TImageDataList
): Boolean;
388 Arr
: TDynImageDataArray
;
392 Arr
:= PInternalList(ImageList
).List
;
394 for I
:= 0 to Length(Arr
) - 1 do
396 Result
:= Result
and Imaging
.TestImage(Arr
[I
]);
397 if not Result
then Break
;
404 function ImFreeImageList(var ImageList
: TImageDataList
): Boolean;
409 if ImageList
<> nil then
411 Int
:= PInternalList(ImageList
);
412 FreeImagesInArray(Int
.List
);
422 function ImLoadImageFromFile(FileName
: PAnsiChar; var Image
: TImageData
): Boolean;
425 Result
:= Imaging
.LoadImageFromFile(FileName
, Image
);
431 function ImLoadImageFromMemory(Data
: Pointer; Size
: LongInt; var Image
: TImageData
): Boolean;
434 Result
:= Imaging
.LoadImageFromMemory(Data
, Size
, Image
);
440 function ImLoadMultiImageFromFile(FileName
: PAnsiChar; var ImageList
: TImageDataList
):
444 ImInitImageList(0, ImageList
);
445 Result
:= Imaging
.LoadMultiImageFromFile(FileName
,
446 PInternalList(ImageList
).List
);
452 function ImLoadMultiImageFromMemory(Data
: Pointer; Size
: LongInt;
453 var ImageList
: TImageDataList
): Boolean;
456 ImInitImageList(0, ImageList
);
457 Result
:= Imaging
.LoadMultiImageFromMemory(Data
, Size
, PInternalList(ImageList
).List
);
463 function ImSaveImageToFile(FileName
: PAnsiChar; const Image
: TImageData
): Boolean;
466 Result
:= Imaging
.SaveImageToFile(FileName
, Image
);
472 function ImSaveImageToMemory(Ext
: PAnsiChar; Data
: Pointer; var Size
: LongInt;
473 const Image
: TImageData
): Boolean;
476 Result
:= Imaging
.SaveImageToMemory(Ext
, Data
, Size
, Image
);
482 function ImSaveMultiImageToFile(FileName
: PAnsiChar;
483 ImageList
: TImageDataList
): Boolean;
486 Result
:= Imaging
.SaveMultiImageToFile(FileName
,
487 PInternalList(ImageList
).List
);
493 function ImSaveMultiImageToMemory(Ext
: PAnsiChar; Data
: Pointer; Size
: PLongInt;
494 ImageList
: TImageDataList
): Boolean;
497 Result
:= Imaging
.SaveMultiImageToMemory(Ext
, Data
, Size
^,
498 PInternalList(ImageList
).List
);
504 function ImCloneImage(const Image
: TImageData
; var Clone
: TImageData
): Boolean;
507 Result
:= Imaging
.CloneImage(Image
, Clone
);
513 function ImConvertImage(var Image
: TImageData
; DestFormat
: TImageFormat
): Boolean;
516 Result
:= Imaging
.ConvertImage(Image
, DestFormat
);
522 function ImFlipImage(var Image
: TImageData
): Boolean;
525 Result
:= Imaging
.FlipImage(Image
);
531 function ImMirrorImage(var Image
: TImageData
): Boolean;
534 Result
:= Imaging
.MirrorImage(Image
);
540 function ImResizeImage(var Image
: TImageData
; NewWidth
, NewHeight
: LongInt;
541 Filter
: TResizeFilter
): Boolean;
544 Result
:= Imaging
.ResizeImage(Image
, NewWidth
, NewHeight
, Filter
);
550 function ImSwapChannels(var Image
: TImageData
; SrcChannel
, DstChannel
: LongInt):
554 Result
:= Imaging
.SwapChannels(Image
, SrcChannel
, DstChannel
);
560 function ImReduceColors(var Image
: TImageData
; MaxColors
: LongInt): Boolean;
563 Result
:= Imaging
.ReduceColors(Image
, MaxColors
);
569 function ImGenerateMipMaps(const Image
: TImageData
; Levels
: LongInt;
570 var MipMaps
: TImageDataList
): Boolean;
573 ImInitImageList(0, MipMaps
);
574 Result
:= Imaging
.GenerateMipMaps(Image
, Levels
,
575 PInternalList(MipMaps
).List
);
581 function ImMapImageToPalette(var Image
: TImageData
; Pal
: PPalette32
;
582 Entries
: LongInt): Boolean;
585 Result
:= Imaging
.MapImageToPalette(Image
, Pal
, Entries
);
591 function ImSplitImage(var Image
: TImageData
; var Chunks
: TImageDataList
;
592 ChunkWidth
, ChunkHeight
: LongInt; var XChunks
, YChunks
: LongInt;
593 PreserveSize
: Boolean; Fill
: Pointer): Boolean;
596 ImInitImageList(0, Chunks
);
597 Result
:= Imaging
.SplitImage(Image
, PInternalList(Chunks
).List
,
598 ChunkWidth
, ChunkHeight
, XChunks
, YChunks
, PreserveSize
, Fill
);
604 function ImMakePaletteForImages(Images
: TImageDataList
; Pal
: PPalette32
;
605 MaxColors
: LongInt; ConvertImages
: Boolean): Boolean;
608 Result
:= Imaging
.MakePaletteForImages(PInternalList(Images
).List
,
609 Pal
, MaxColors
, ConvertImages
);
615 function ImRotateImage(var Image
: TImageData
; Angle
: Single): Boolean;
618 Result
:= Imaging
.RotateImage(Image
, Angle
);
624 function ImCopyRect(const SrcImage
: TImageData
; SrcX
, SrcY
, Width
, Height
: LongInt;
625 var DstImage
: TImageData
; DstX
, DstY
: LongInt): Boolean; cdecl;
628 Result
:= Imaging
.CopyRect(SrcImage
, SrcX
, SrcY
, Width
, Height
,
629 DstImage
, DstX
, DstY
);
635 function ImFillRect(var Image
: TImageData
; X
, Y
, Width
, Height
: LongInt;
636 Fill
: Pointer): Boolean;
639 Result
:= Imaging
.FillRect(Image
, X
, Y
, Width
, Height
, Fill
);
645 function ImReplaceColor(var Image
: TImageData
; X
, Y
, Width
, Height
: LongInt;
646 OldPixel
, NewPixel
: Pointer): Boolean;
649 Result
:= Imaging
.ReplaceColor(Image
, X
, Y
, Width
, Height
, OldPixel
, NewPixel
);
655 function ImStretchRect(const SrcImage
: TImageData
; SrcX
, SrcY
, SrcWidth
,
656 SrcHeight
: LongInt; var DstImage
: TImageData
; DstX
, DstY
, DstWidth
,
657 DstHeight
: LongInt; Filter
: TResizeFilter
): Boolean; cdecl;
660 Result
:= Imaging
.StretchRect(SrcImage
, SrcX
, SrcY
, SrcWidth
, SrcHeight
,
661 DstImage
, DstX
, DstY
, DstWidth
, DstHeight
, Filter
);
667 procedure ImGetPixelDirect(const Image
: TImageData
; X
, Y
: LongInt; Pixel
: Pointer);
670 Imaging
.GetPixelDirect(Image
, X
, Y
, Pixel
);
675 procedure ImSetPixelDirect(const Image
: TImageData
; X
, Y
: LongInt; Pixel
: Pointer);
678 Imaging
.SetPixelDirect(Image
, X
, Y
, Pixel
);
683 function ImGetPixel32(const Image
: TImageData
; X
, Y
: LongInt): TColor32Rec
; cdecl;
686 Result
:= Imaging
.GetPixel32(Image
, X
, Y
);
692 procedure ImSetPixel32(const Image
: TImageData
; X
, Y
: LongInt; const Color
: TColor32Rec
);
695 Imaging
.SetPixel32(Image
, X
, Y
, Color
);
700 function ImGetPixelFP(const Image
: TImageData
; X
, Y
: LongInt): TColorFPRec
; cdecl;
703 Result
:= Imaging
.GetPixelFP(Image
, X
, Y
);
705 FillChar(Result
, SizeOf(Result
), 0);
709 procedure ImSetPixelFP(const Image
: TImageData
; X
, Y
: LongInt; const Color
: TColorFPRec
);
712 Imaging
.SetPixelFP(Image
, X
, Y
, Color
);
717 function ImNewPalette(Entries
: LongInt; var Pal
: PPalette32
): Boolean;
720 Imaging
.NewPalette(Entries
, Pal
);
727 function ImFreePalette(var Pal
: PPalette32
): Boolean;
730 Imaging
.FreePalette(Pal
);
737 function ImCopyPalette(SrcPal
, DstPal
: PPalette32
; SrcIdx
, DstIdx
, Count
: LongInt): Boolean;
740 Imaging
.CopyPalette(SrcPal
, DstPal
, SrcIdx
, DstIdx
, Count
);
747 function ImFindColor(Pal
: PPalette32
; Entries
: LongInt; Color
: TColor32
): LongInt;
750 Result
:= Imaging
.FindColor(Pal
, Entries
, Color
);
756 function ImFillGrayscalePalette(Pal
: PPalette32
; Entries
: LongInt): Boolean;
759 Imaging
.FillGrayscalePalette(Pal
, Entries
);
766 function ImFillCustomPalette(Pal
: PPalette32
; Entries
: LongInt; RBits
, GBits
,
767 BBits
: Byte; Alpha
: Byte): Boolean;
770 Imaging
.FillCustomPalette(Pal
, Entries
, RBits
, GBits
, BBits
, Alpha
);
777 function ImSwapChannelsOfPalette(Pal
: PPalette32
; Entries
, SrcChannel
,
778 DstChannel
: LongInt): Boolean;
781 Imaging
.SwapChannelsOfPalette(Pal
, Entries
, SrcChannel
, DstChannel
);
788 function ImSetOption(OptionId
, Value
: LongInt): Boolean;
791 Result
:= Imaging
.SetOption(OptionId
, Value
);
797 function ImGetOption(OptionId
: LongInt): LongInt;
800 Result
:= GetOption(OptionId
);
802 Result
:= InvalidOption
;
806 function ImPushOptions
: Boolean;
809 Result
:= Imaging
.PushOptions
;
815 function ImPopOptions
: Boolean;
818 Result
:= Imaging
.PopOptions
;
824 function ImGetImageFormatInfo(Format
: TImageFormat
; var Info
: TImageFormatInfo
): Boolean;
827 Result
:= Imaging
.GetImageFormatInfo(Format
, Info
);
833 function ImGetPixelsSize(Format
: TImageFormat
; Width
, Height
: LongInt): LongInt;
836 Result
:= Imaging
.GetPixelsSize(Format
, Width
, Height
);
842 procedure ImSetUserFileIO(OpenReadProc
: TOpenReadProc
; OpenWriteProc
:
843 TOpenWriteProc
; CloseProc
: TCloseProc
; EofProc
: TEofProc
; SeekProc
: TSeekProc
;
844 TellProc
: TTellProc
; ReadProc
: TReadProc
; WriteProc
: TWriteProc
);
847 Imaging
.SetUserFileIO(OpenReadProc
, OpenWriteProc
, CloseProc
, EofProc
,
848 SeekProc
, TellProc
, ReadProc
, WriteProc
);
853 procedure ImResetFileIO
;
864 -- TODOS ----------------------------------------------------
867 -- 0.26.3 ---------------------------------------------------
868 - changed PChars to PAnsiChars and some more D2009 friendly
871 -- 0.19 -----------------------------------------------------
872 - updated to reflect changes in low level interface (added pixel set/get, ...)
873 - changed ImInitImage to procedure to reflect change in Imaging.pas
874 - added ImIsFileFormatSupported
876 -- 0.15 -----------------------------------------------------
877 - behaviour of ImGetImageListElement and ImSetImageListElement
878 has changed - list items are now cloned rather than referenced,
879 because of this ImFreeImageListKeepImages was no longer needed
881 - many function headers were changed - mainly pointers were
882 replaced with var and const parameters
884 -- 0.13 -----------------------------------------------------
885 - added TestImagesInList function and new 0.13 functions
886 - images were not freed when image list was resized in ImSetImageListSize
887 - ImSaveMultiImageTo* recreated the input image list with size = 0