Что нового

Как заставить скрипт выводить фото на экран, не уменьшая размеры

mv6677

Новичок
Сообщения
105
Репутация
0
Доброе утро, программисты по автоит.
Хочу задать вопрос технического характера.

У меня имеется код, размещения фотографии с определенными размерами в определенных координатах.
Код меняет размер высоты фотографии с сохранением пропорций.

Код:
#Include <GDIPlus.au3>
#include <File.au3>


_GDIPlus_Startup()

$CurImage = _GDIPlus_ImageLoadFromFile('C:\1\test.jpg')
$sCLSID = _GDIPlus_EncodersGetCLSID("jpg")
$NewSizeW = Round((_GDIPlus_ImageGetWidth($CurImage) * 1060) / _GDIPlus_ImageGetHeight($CurImage))


$NewImage = _GDIPlus_BitmapCreateFromScan0($NewSizeW, 1060, _GDIPlus_ImageGetPixelFormat($CurImage)[0])
$hGraphics = _GDIPlus_ImageGetGraphicsContext($NewImage)
_GDIPlus_GraphicsSetInterpolationMode($hGraphics, 7)
_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $CurImage, 0, 0, _GDIPlus_ImageGetWidth($CurImage), _GDIPlus_ImageGetHeight($CurImage), 0, 0, $NewSizeW, 1060)
_GDIPlus_GraphicsDispose($hGraphics)

If FileExists("Resized.jpg") Then FileRecycle("Resized.jpg")
$tParams = _GDIPlus_ParamInit(1)
$tData = DllStructCreate("int Quality")
DllStructSetData($tData, "Quality", 100)
$pData = DllStructGetPtr($tData)
_GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
$pParams = DllStructGetPtr($tParams)
_GDIPlus_ImageSaveToFileEx($NewImage, "Resized.jpg", $sCLSID, DllStructGetPtr($tParams))
_GDIPlus_ImageDispose($CurImage)
_GDIPlus_ImageDispose($NewImage)
_GDIPlus_Shutdown()

$hImage = _GDIPlus_ImageLoadFromFile("Resized.jpg")
$H2 = _GDIPlus_ImageGetHeight($hImage)
$W2 = _GDIPlus_ImageGetWidth($hImage)

SplashImageOn('', @ScriptDir & '\Resized.jpg', $W2, $H2, 1800-$H2/2, 1090, 1)
Sleep(3000)
SplashOff()

Но когда я вывожу это на экран в определенные координаты - скрипт выводит не те размеры, которые есть у фотофайла Resized.jpg , а почему-то втрое меньшие.
Я подозреваю, что неправильно работает вот этот кусок кода:
Код:
$hImage = _GDIPlus_ImageLoadFromFile("Resized.jpg")
$H2 = _GDIPlus_ImageGetHeight($hImage)
$W2 = _GDIPlus_ImageGetWidth($hImage)
Потому что, у файла Resized.jpg - размеры те которые нужны, а этот кусок кода - как-то неправильно эти размеры выводит на экран.

Подскажите - как заставить скрипт выводить в нужные координаты - фотографию с теми размерами, которые есть у файла Resized.jpg (а не втрое меньшими) ?
 

Вложения

  • test.jpg
    test.jpg
    76 КБ · Просмотры: 1

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
#Include <GDIPlus.au3>

_GDIPlus_Startup()

$CurImage = _GDIPlus_ImageLoadFromFile('test.jpg')
$sCLSID = _GDIPlus_EncodersGetCLSID("jpg")
$NewSizeW = Round((_GDIPlus_ImageGetWidth($CurImage) * 1060) / _GDIPlus_ImageGetHeight($CurImage))

$NewImage = _GDIPlus_BitmapCreateFromScan0($NewSizeW, 1060, _GDIPlus_ImageGetPixelFormat($CurImage)[0])
$hGraphics = _GDIPlus_ImageGetGraphicsContext($NewImage)
_GDIPlus_GraphicsSetInterpolationMode($hGraphics, 7)
_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $CurImage, 0, 0, _GDIPlus_ImageGetWidth($CurImage), _GDIPlus_ImageGetHeight($CurImage), 0, 0, $NewSizeW, 1060)
_GDIPlus_GraphicsDispose($hGraphics)

If FileExists("Resized.jpg") Then FileRecycle("Resized.jpg")
$tParams = _GDIPlus_ParamInit(1)
$tData = DllStructCreate("int Quality")
DllStructSetData($tData, "Quality", 100)
$pData = DllStructGetPtr($tData)
_GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
$pParams = DllStructGetPtr($tParams)
_GDIPlus_ImageSaveToFileEx($NewImage, "Resized.jpg", $sCLSID, DllStructGetPtr($tParams))
_GDIPlus_ImageDispose($CurImage)
_GDIPlus_ImageDispose($NewImage)

$hImage = _GDIPlus_ImageLoadFromFile("Resized.jpg")
$W2 = _GDIPlus_ImageGetWidth($hImage)
$H2 = _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_ImageDispose($hImage)

_GDIPlus_Shutdown()

SplashImageOn('', @ScriptDir & '\Resized.jpg', $W2, $H2);, 1800-$H2/2, 1090, 1)
Sleep(3000)
SplashOff()
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
InnI, ваш код работает.
Большое спасибо.
 
Верх