AsphyreBmpLoad.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:5k
源码类别:

2D图形编程

开发平台:

Delphi

  1. unit AsphyreBmpLoad;
  2. //---------------------------------------------------------------------------
  3. // AsphyreBmpLoad.pas                                   Modified: 04-Jan-2005
  4. // Generic Bitmap loading for Asphyre                            Version 1.02
  5. //---------------------------------------------------------------------------
  6. // The contents of this file are subject to the Mozilla Public License
  7. // Version 1.1 (the "License"); you may not use this file except in
  8. // compliance with the License. You may obtain a copy of the License at
  9. // http://www.mozilla.org/MPL/
  10. //
  11. // Software distributed under the License is distributed on an "AS IS"
  12. // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  13. // License for the specific language governing rights and limitations
  14. // under the License.
  15. //---------------------------------------------------------------------------
  16. interface
  17. //---------------------------------------------------------------------------
  18. uses
  19.  Classes, SysUtils, Graphics, AsphyreTGA, AsphyreJPG, AsphyrePNG;
  20. //---------------------------------------------------------------------------
  21. type
  22.  TImageFormat = (ifBMP, ifTGA, ifJPEG, ifPNG, ifAuto);
  23. //---------------------------------------------------------------------------
  24. // LoadBitmap()
  25. //
  26. // Loads generalized image format from stream or file.
  27. //---------------------------------------------------------------------------
  28. function LoadBitmap(Stream: TStream; Dest: TBitmap;
  29.  Format: TImageFormat): Boolean; overload;
  30. function LoadBitmap(const FileName: string; Dest: TBitmap;
  31.  Format: TImageFormat = ifAuto): Boolean; overload;
  32. //---------------------------------------------------------------------------
  33. // SaveBitmap()
  34. //
  35. // Saves bitmap to generalized image format with default/recommended options.
  36. //---------------------------------------------------------------------------
  37. function SaveBitmap(Stream: TStream; Source: TBitmap;
  38.  Format: TImageFormat): Boolean; overload;
  39. function SaveBitmap(const FileName: string; Source: TBitmap;
  40.  Format: TImageFormat = ifAuto): Boolean; overload;
  41. //---------------------------------------------------------------------------
  42. implementation
  43. //---------------------------------------------------------------------------
  44. function FormatFromName(const FileName: string): TImageFormat;
  45. var
  46.  ext: string;
  47. begin
  48.  Result:= ifBmp;
  49.  ext:= ExtractFileExt(FileName);
  50.  if (SameText(ext, '.tga')) then Result:= ifTGA;
  51.  if (SameText(ext, '.jpg'))or(SameText(ext, '.jpeg')) then Result:= ifJPEG;
  52.  if (SameText(ext, '.png')) then Result:= ifPNG;
  53. end;
  54. //---------------------------------------------------------------------------
  55. function LoadBitmap(Stream: TStream; Dest: TBitmap;
  56.  Format: TImageFormat): Boolean; overload;
  57. begin
  58.  case Format of
  59.   // Windows Bitmap
  60.   ifBMP:
  61.    begin
  62.     Result:= True;
  63.     try
  64.      Dest.LoadFromStream(Stream);
  65.     except
  66.      Result:= False;
  67.     end;
  68.    end;
  69.   // Truevision TARGA
  70.   ifTGA:
  71.    Result:= LoadTGAtoBMP(Stream, Dest);
  72.   // JPEG
  73.   ifJPEG:
  74.    Result:= LoadJPGtoBMP(Stream, Dest);
  75.   // Portable Network Graphics
  76.   ifPNG:
  77.    Result:= LoadPNGtoBMP(Stream, Dest);
  78.   else
  79.    Result:= False;
  80.  end;
  81. end;
  82. //---------------------------------------------------------------------------
  83. function LoadBitmap(const FileName: string; Dest: TBitmap;
  84.  Format: TImageFormat): Boolean; overload;
  85. begin
  86.  if (Format = ifAuto) then
  87.   Format:= FormatFromName(FileName);
  88.  case Format of
  89.   // Windows Bitmap
  90.   ifBMP:
  91.    begin
  92.     Result:= True;
  93.     try
  94.      Dest.LoadFromFile(FileName);
  95.     except
  96.      Result:= False;
  97.     end;
  98.    end;
  99.   // Truevision TARGA
  100.   ifTGA:
  101.    Result:= LoadTGAtoBMP(FileName, Dest);
  102.   // JPEG
  103.   ifJPEG:
  104.    Result:= LoadJPGtoBMP(FileName, Dest);
  105.   // Portable Network Graphics
  106.   ifPNG:
  107.    Result:= LoadPNGtoBMP(FileName, Dest);
  108.   else
  109.    Result:= False;
  110.  end;
  111. end;
  112. //---------------------------------------------------------------------------
  113. function SaveBitmap(Stream: TStream; Source: TBitmap;
  114.  Format: TImageFormat): Boolean; overload;
  115. begin
  116.  case Format of
  117.   // Windows Bitmap
  118.   ifBMP:
  119.    begin
  120.     Result:= True;
  121.     try
  122.      Source.SaveToStream(Stream);
  123.     except
  124.      Result:= False;
  125.     end;
  126.    end;
  127.   // Truevision TARGA
  128.   ifTGA:
  129.    Result:= SaveBMPtoTGA(Stream, Source, [tfCompressed]);
  130.   // JPEG
  131.   ifJPEG:
  132.    Result:= SaveBMPtoJPG(Stream, Source, [jfProgressive], 90);
  133.   // Portable Network Graphics
  134.   ifPNG:
  135.    Result:= SaveBMPtoPNG(Stream, Source, 9);
  136.   else
  137.    Result:= False;
  138.  end;
  139. end;
  140. //---------------------------------------------------------------------------
  141. function SaveBitmap(const FileName: string; Source: TBitmap;
  142.  Format: TImageFormat): Boolean; overload;
  143. begin
  144.  if (Format = ifAuto) then
  145.   Format:= FormatFromName(FileName);
  146.  case Format of
  147.   // Windows Bitmap
  148.   ifBMP:
  149.    begin
  150.     Result:= True;
  151.     try
  152.      Source.SaveToFile(FileName);
  153.     except
  154.      Result:= False;
  155.     end;
  156.    end;
  157.   // Truevision TARGA
  158.   ifTGA:
  159.    Result:= SaveBMPtoTGA(FileName, Source, [tfCompressed]);
  160.   // JPEG
  161.   ifJPEG:
  162.    Result:= SaveBMPtoJPG(FileName, Source, [jfProgressive], 87);
  163.   // Portable Network Graphics
  164.   ifPNG:
  165.    Result:= SaveBMPtoPNG(FileName, Source, 9);
  166.   else
  167.    Result:= False;
  168.  end;
  169. end;
  170. //---------------------------------------------------------------------------
  171. end.