Loading.xml 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <?xml-stylesheet type="text/xsl" href="../../Xsl/doc2html.xsl"?>
  3. <doc>
  4. <title>Loading Images</title>
  5. <chapter>
  6. <title>Loading Images</title>
  7. <par>
  8. Images can be loaded from the files on disk, from the streams or
  9. from a memory referenced by a pointer.
  10. The following table lists functions for loading images. These are low level
  11. functions operating on <ref>TImageData</ref> structure.
  12. </par>
  13. <table>
  14. <row>
  15. <header>Function name</header>
  16. <header>Usage</header>
  17. </row>
  18. <row>
  19. <cell><ref>LoadImageFromFile</ref></cell>
  20. <cell>Load single image from file</cell>
  21. </row>
  22. <row>
  23. <cell><ref>LoadImageFromStream</ref></cell>
  24. <cell>Load single image from stream
  25. (<icode>TStream</icode> descendants, <b>Object Pascal only</b>)</cell>
  26. </row>
  27. <row>
  28. <cell><ref>LoadImageFromMemory</ref></cell>
  29. <cell>Load single image from memory</cell>
  30. </row>
  31. <row>
  32. <cell><ref>LoadMultiImageFromFile</ref></cell>
  33. <cell>Load multiple images from file</cell>
  34. </row>
  35. <row>
  36. <cell><ref>LoadMultiImageFromStream</ref></cell>
  37. <cell>Load multiple images from stream
  38. (<icode>TStream</icode> descendants, <b>Object Pascal only</b>)</cell>
  39. </row>
  40. <row>
  41. <cell><ref>LoadMultiImageFromMemory</ref></cell>
  42. <cell>Load multiple images from memory</cell>
  43. </row>
  44. </table>
  45. <par>
  46. If you want to make sure that image in file is really in format
  47. suggested by its extension or if you have some unknown images
  48. in stream or memory, you can use these functions to get
  49. their file format:
  50. </par>
  51. <table>
  52. <row>
  53. <header>Function name</header>
  54. <header>Usage</header>
  55. </row>
  56. <row>
  57. <cell><ref>DetermineFileFormat</ref></cell>
  58. <cell>Determines format of image specified by its file name</cell>
  59. </row>
  60. <row>
  61. <cell><ref>DetermineStreamFormat</ref></cell>
  62. <cell>Determines format of image located in stream
  63. (<icode>TStream</icode> descendants, <b>Object Pascal only</b>)</cell>
  64. </row>
  65. <row>
  66. <cell><ref>DetermineMemoryFormat</ref></cell>
  67. <cell>Determines format of image located in memory</cell>
  68. </row>
  69. </table>
  70. <par>
  71. This example loads image from file and prints its width, height and
  72. size of memory it occupies.
  73. </par>
  74. <code>
  75. uses
  76. SysUtils, Classes, ImagingTypes, Imaging;
  77. var
  78. Img: <ref>TImageData</ref>;
  79. begin
  80. // call this before using any TImageData record
  81. <ref>InitImage</ref>(Img);
  82. // load tigers from file
  83. <ref>LoadImageFromFile</ref>('X:\images\tigers.jpg', Img);
  84. //write some image info
  85. WriteLn('Mighty tigers have resolution ', Img.Width, 'x', Img.Height,
  86. ' and occupy ', Img.Size, ' bytes of your memory.');
  87. // memory occupied by image is freed
  88. <ref>FreeImage</ref>(Img);
  89. end.
  90. </code>
  91. <par>
  92. This example shows how to load multiple images stored in one file
  93. (DDS texture in this case) located in the memory.
  94. </par>
  95. <code>
  96. var
  97. Data: Pointer;
  98. Size: LongInt;
  99. Images: <ref>TDynImageDataArray</ref>;
  100. I: LongInt;
  101. begin
  102. // Here you for example load DDS texture compressed by your new
  103. // compression algorithm from file and decompress it.
  104. // Decompressed image is now in memory referenced by Data and
  105. // size of this image is in Size variable.
  106. // Note that there is no need to call <ref>InitImage</ref> for <ref>TDynImageDataArray</ref>.
  107. <ref>LoadMultiImageFromMemory</ref>(Data, Size, Images);
  108. // write something
  109. WriteLn('DDS file contains ', Length(Image), 'subimages.');
  110. // You can then free images in array by calling <ref>FreeImage</ref> for all of them ...
  111. for I := 0 to Length(Images) - 1 do
  112. <ref>FreeImage</ref>(Images[I]);
  113. // ... or simply call <ref>FreeImagesInArray</ref> which does the same job
  114. <ref>FreeImagesInArray</ref>(Images);
  115. end;
  116. </code>
  117. <par>
  118. This example shows how to load image from stream without knowing
  119. what format it is in.
  120. </par>
  121. <code>
  122. function LoadImage(var Img: <ref>TImageData</ref>; Stream: TStream): Boolean;
  123. var
  124. Ext: string;
  125. begin
  126. // call this before using any TImageData record
  127. <ref>InitImage</ref>(Img);
  128. // determine image's format
  129. Ext := <ref>DetermineStreamFormat</ref>(Stream);
  130. // if image is in unsupported format or is invalid we output error
  131. if Ext = '' then
  132. begin
  133. WriteLn('Image in stream in unsupported formatus!');
  134. Result := False;
  135. end
  136. else
  137. begin
  138. // load image if its type is known
  139. Result := <ref>LoadImageFromStream</ref>(Stream, Img);
  140. end;
  141. end;
  142. </code>
  143. </chapter>
  144. </doc>