imgcnv.dpr
上传用户:yj_qiu
上传日期:2022-08-08
资源大小:23636k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Delphi

  1. program imgcnv;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   SysUtils,
  5.   Imaging, ImagingTypes;
  6. var
  7.   Img: TImageData;
  8.   DestFormat: TImageFormat;
  9.   procedure HaltWithError(const Str: string; Code: Integer);
  10.   begin
  11.     Writeln(Str);
  12.     FreeImage(Img);
  13.     Halt(Code);
  14.   end;
  15.   function ChooseFormat(const FmtStr: string): TImageFormat;
  16.   type TFmtRec = record Str: string[8]; Format: TImageFormat; end;
  17.   const
  18.     KnownFormats: array[0..9] of TFmtRec = (
  19.       (Str: 'Gray8';    Format: ifGray8),
  20.       (Str: 'Gray16';   Format: ifGray16),
  21.       (Str: 'R5G6B5';   Format: ifR5G6B5),
  22.       (Str: 'A1R5G5B5'; Format: ifA1R5G5B5),
  23.       (Str: 'A4R4G4B4'; Format: ifA4R4G4B4),
  24.       (Str: 'R8G8B8';   Format: ifR8G8B8),
  25.       (Str: 'A8R8G8B8'; Format: ifA8R8G8B8),
  26.       (Str: 'DXT1';     Format: ifDXT1),
  27.       (Str: 'DXT3';     Format: ifDXT3),
  28.       (Str: 'DXT5';     Format: ifDXT5)
  29.     );
  30.   var i: Integer;
  31.   begin
  32.     Result := ifUnknown;
  33.     i := High(KnownFormats);
  34.     while (i >= 0) and (KnownFormats[i].Str <> FmtStr) do Dec(i);
  35.     if not (i >= 0) then begin
  36.       Writeln('Invalid output format. Supported formats:');
  37.       for i := 0 to High(KnownFormats) do Writeln('  ', KnownFormats[i].Str);
  38.       HaltWithError('', 3);
  39.     end else Result := KnownFormats[i].Format;
  40.   end;
  41. begin
  42.   if ParamCount < 2 then
  43.     HaltWithError('Usage: imgcnv <input file> <output file> [<output format>]', 1);
  44.   if ParamCount > 2 then
  45.     DestFormat := ChooseFormat(ParamStr(3))
  46.   else
  47.     DestFormat := ifUnknown;
  48.   Writeln('Loading image ', ParamStr(1), '...');
  49.   if not LoadImageFromFile(ParamStr(1), Img) then
  50.     HaltWithError('Error loading image ' + ParamStr(1) + '!', 2);
  51.   if (DestFormat <> ifUnknown) and (DestFormat <> Img.Format) then begin
  52.     Writeln('Converting to format ', ParamStr(3), '...');
  53.     if not ConvertImage(Img, DestFormat) then HaltWithError('Conversion error', 3);
  54.   end;
  55.   Writeln('Saving image as ', ParamStr(2), '...');
  56.   if not SaveImageToFile(ParamStr(2), Img) then
  57.     HaltWithError('Error saving image as ' + ParamStr(2) + '!', 4);
  58.   HaltWithError('Success!', 0);
  59. end.