Что нового

DLL FreeImage - Замена DPI изображения

Ksaan

Знающий
Сообщения
207
Репутация
15
Надо изменить DPI изображения, единственное что нашёл это библиотеку FreeImage.
Функция
Код:
_FreeImage_SetDotsPerMeterX()
_FreeImage_SetDotsPerMeterY()

Но сколько не пытаюсь не могу разобраться!
Код:
#Include <FreeImage.au3>

$sFile = "Test.jpg"

_FreeImage_LoadDLL(@ScriptDir & '\FreeImage.dll')
_FreeImage_Initialise()

$FIF = _FreeImage_GetFileTypeU($sFile)

If $FIF = $FIF_UNKNOWN Then
    $FIF = _FreeImage_GetFIFFromFilenameU($sFile)
EndIf

$hImage = _FreeImage_Load($FIF, $sFile)
_FreeImage_SetDotsPerMeterX($hImage, 21811)
_FreeImage_SetDotsPerMeterY($hImage, 21811)

If @error Then MsgBox(0, "Error", @error)

_FreeImage_Unload($hImage)
_FreeImage_DeInitialise()
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Вот, пример с изменением DPI файла :
Код:
#include <FreeImage.au3>

_FreeImage_LoadDLL(@ScriptDir&"\FreeImage.dll")
_FreeImage_Initialise()

$sFile = "Снимок.jpg"
; Новый размер файла
$width = 400
$height = 300

$FIF = _FreeImage_GetFileTypeU($sFile)
If $FIF = $FIF_UNKNOWN Then
    $FIF = _FreeImage_GetFIFFromFilenameU($sFile)
EndIf
$hImage = _FreeImage_LoadU($FIF, $sFile)

$hImageResized = _FreeImage_Rescale($hImage, $width, $height, $FILTER_LANCZOS3)
$dot = StringInStr($sFile,".",1,-1)
$Name = StringLeft($sFile,$dot-1)
$Ext = StringMid($sFile,$dot)
;Сохранить файл после изменения размера
_FreeImage_SaveU($FIF, $hImageResized, $Name &"_rsz"&$Ext)
_FreeImage_Unload($hImage)
_FreeImage_Unload($hImageResized)

_FreeImage_DeInitialise()
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Ksaan
Ваш пример рабочий, посмотрите версию dll и UDF. Проблема в них.
 
Автор
Ksaan

Ksaan

Знающий
Сообщения
207
Репутация
15
ra4o сказал(а):
Вот, пример с изменением DPI файла :
Это немного не то, это изменения пикселей изображения а не DPI - (пикселей на дюйм)

Garrett сказал(а):
Ksaan
Ваш пример рабочий, посмотрите версию dll и UDF. Проблема в них.
Перекачал все что нашёл, пробовал на разных пк, результат тотже ошибка на этих функциях.

Но нашёл кое что другое :smile:
Код:
; #FUNCTION# ====================================================================================================================
; Name...........: _GDIPlus_BitmapSetResolution
; Description ...: Sets the resolution of this Bitmap object
; Syntax.........: _GDIPlus_BitmapSetResolution($hBitmap, $nDpiX, $nDpiY)
; Parameters ....: $hBitmap - Pointer to the Bitmap object
;   $nDpiX  - Value that specifies the horizontal resolution in dots per inch.
;   $nDpiX  - Value that specifies the vertical resolution in dots per inch.
; Return values .: Success  - True
;   Failure     - False and either:
;   |@error and @extended are set if DllCall failed
;   |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: None
; Related .......:
; Link ..........; @@MsdnLink@@ GdipBitmapSetResolution
; Example .......; Yes
; ===============================================================================================================================
Func _GDIPlus_BitmapSetResolution($hBitmap, $nDpiX, $nDpiY)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipBitmapSetResolution", "handle", $hBitmap, "float", $nDpiX, "float", $nDpiY)
    If @error Then Return SetError(@error, @extended, False)
    $GDIP_STATUS = $aResult[0]
    Return $aResult[0] = 0
EndFunc ;==>_GDIPlus_BitmapSetResolution
 
Верх