Saving.xml 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <?xml-stylesheet type="text/xsl" href="../../Xsl/doc2html.xsl"?>
  3. <doc>
  4. <title>Saving Images</title>
  5. <chapter>
  6. <title>Saving Images</title>
  7. <par>Images can be saved to the files on disk, to the streams or
  8. to a memory referenced by a pointer.
  9. The following table lists functions which can be used for saving images.
  10. These are low level functions operating on <ref>TImageData</ref> structure.</par>
  11. <table>
  12. <row>
  13. <header>Function name</header>
  14. <header>Usage</header>
  15. </row>
  16. <row>
  17. <cell><ref>SaveImageToFile</ref></cell>
  18. <cell>Save single image to file</cell>
  19. </row>
  20. <row>
  21. <cell><ref>SaveImageToStream</ref></cell>
  22. <cell>Save single image to stream
  23. (<icode>TStream</icode> descendants, <b>Object Pascal only</b>)</cell>
  24. </row>
  25. <row>
  26. <cell><ref>SaveImageToMemory</ref></cell>
  27. <cell>Save single image to memory</cell>
  28. </row>
  29. <row>
  30. <cell><ref>SaveMultiImageToFile</ref></cell>
  31. <cell>Save multiple images to file</cell>
  32. </row>
  33. <row>
  34. <cell><ref>SaveMultiImageToStream</ref></cell>
  35. <cell>Save multiple images to stream
  36. (<icode>TStream</icode> descendants, <b>Object Pascal only</b>)</cell>
  37. </row>
  38. <row>
  39. <cell><ref>SaveMultiImageToMemory</ref></cell>
  40. <cell>Save multiple images to memory</cell>
  41. </row>
  42. </table>
  43. <par>You can learn how to use these functions from the
  44. following code fragments.</par>
  45. <par>This example creates empty image and draws diagonal line from
  46. left-top to right-bottom corner. Finally, image is saved to the file.</par>
  47. <code>
  48. uses
  49. SysUtils, Classes, ImagingTypes, Imaging;
  50. var
  51. Img: <ref>TImageData</ref>;
  52. I: LongInt;
  53. begin
  54. // call this before using any TImageData record
  55. <ref>InitImage</ref>(Img);
  56. // create 8 bit grayscale image
  57. <ref>NewImage</ref>(1024, 1024, ifGray8, Img);
  58. // draw diagonal line by direct writing to image's memory
  59. for I := 0 to Img.Width - 1 do
  60. PByteArray(@PByteArray(Img.Bits)[I * Img.Width])[I] := 128;
  61. // save image to file
  62. <ref>SaveImageToFile</ref>('/home/galfar/images/line.tga', Img);
  63. // memory occupied by image is freed
  64. <ref>FreeImage</ref>(Img);
  65. end.
  66. </code>
  67. <par>In this example DDS image is loaded from stream. All contained
  68. subimages are then compressed to DXT5 format and written to output stream.</par>
  69. <code>
  70. procedure LoadAndSaveSomethingInDXT5(InStream, OutStream: TStream);
  71. var
  72. Images: <ref>TDynImageDataArray</ref>;
  73. I: LongInt;
  74. begin
  75. // load DDS multiimage from stream to Images array
  76. <ref>LoadMultiImageFromStream</ref>(InStream, Images);
  77. // convert all loaded images to DXT5 format
  78. for I := 0 to Length(Images) - 1 do
  79. <ref>ConvertImage</ref>(Images[I], ifDXT5);
  80. // save converted images to output stream in DDS format
  81. <ref>SaveMultiImageToStream</ref>('dds', OutStream, Images);
  82. // all images are freed
  83. <ref>FreeImagesInArray</ref>(Images);
  84. end;
  85. </code>
  86. </chapter>
  87. </doc>