Страница 1 из 1

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

Добавлено: 05.03.2016 10:52:30
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?

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

Добавлено: 05.03.2016 15:21:40
Vadim
shyub
Насколько я понял, там используются типы, которые на платформе .NET. Но поскольку FreeImage используется для Andorra 2D (есть версии для Delphi и Lazarus), то Вы можете либо использовать у себя эту библиотеку (она GPL), либо посмотреть в ней, как они эти функции там объявили.

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

Добавлено: 05.03.2016 21:52:37
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};

Из изходников.