Как изменить DPI-изображения по аналогии с C#

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
shyub
постоялец
Сообщения: 112
Зарегистрирован: 25.11.2014 22:15:19

Как изменить DPI-изображения по аналогии с C#

Сообщение shyub »

Необходимо при сохранении изображения изменить его DPI. В библиотеке FreeImage.dll есть для этих целей две функции. На https://sourceforge.net/p/freeimage/discussion/36110/thread/a11dc8b1/ приводится пример для C#:

Код: Выделить всё

[DllImport(dllName, EntryPoint="FreeImage_SetDotsPerMeterX")]
 public static extern void SetDotsPerMeterX(FIBITMAP dib, uint res);
[DllImport(dllName, EntryPoint="FreeImage_SetDotsPerMeterY")]
 public static extern void SetDotsPerMeterY(FIBITMAP dib, uint res);
.......................................................................
FreeImage.SetDotsPerMeterX(image,FreeImage.GetDotsPerMeterX(inputImage));
 FreeImage.SetDotsPerMeterY(image,FreeImage.GetDotsPerMeterY(inputImage));

Как этот код можно интерпретировать для FPC?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

shyub
Насколько я понял, там используются типы, которые на платформе .NET. Но поскольку FreeImage используется для Andorra 2D (есть версии для Delphi и Lazarus), то Вы можете либо использовать у себя эту библиотеку (она GPL), либо посмотреть в ней, как они эти функции там объявили.
Jargar
новенький
Сообщения: 21
Зарегистрирован: 06.11.2007 13:42:24

Сообщение Jargar »

Код: Выделить всё

const
  FIDLL = {$IFDEF MSWINDOWS}'FreeImage.dll';{$ENDIF}
          {$IFDEF LINUX}'libfreeimage.so';{$ENDIF}
          {$IFDEF MACOS}'libfreeimage.dylib';{$ENDIF}
 procedure FreeImage_SetDotsPerMeterX(dib: PFIBITMAP; res: Cardinal); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}
  external FIDLL {$IFDEF WIN32}name '_FreeImage_SetDotsPerMeterX@8'{$ENDIF}
  {$IFDEF MACOS}name '_FreeImage_SetDotsPerMeterX'{$ENDIF};
procedure FreeImage_SetDotsPerMeterY(dib: PFIBITMAP; res: Cardinal); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}
  external FIDLL {$IFDEF WIN32}name '_FreeImage_SetDotsPerMeterY@8'{$ENDIF}
  {$IFDEF MACOS}name '_FreeImage_SetDotsPerMeterY'{$ENDIF};

Из изходников.
Ответить