Здравствуйте. Пытаюсь подогнать размеры картинки в соответствии с масштабированием экрана. То есть в независимости от установленного у пользователя масштаба картинка должна найтись. Картинку делал на масштабе 100%, поменял на 125%, и не находит
Делаю так. Немного переделал UDF ImageSearch.
Как я думаю, умножение ширины и высоты на новый dpi должно дать необходимый масштаб изображения. Пробовал менять разрешение. У меня по умолчанию 1920x1080. При смене разрешения изображение естественно находится. При смене масштаба на любом разрешении не находит. Помогите разобраться.
Делаю так. Немного переделал UDF ImageSearch.
Код:
#Include <GDIPlus.au3>
; Получение dpi экрана
$DPI = MK_Get_DPI()
; Поиск изображения
_ImageSearch("Images\NIK_Logo.BMP", 0, $X, $Y, 1)
Func MK_Get_DPI()
$DPI = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics", "AppliedDPI")
Return $DPI/96
; функция возвращает 1.25
EndFunc
Func MK_Get_ImageSize($Image)
_GDIPlus_Startup ()
$hImage = _GDIPlus_ImageLoadFromFile($Image)
Local $ImgSize[2]
$ImgSize[0] = _GDIPlus_ImageGetWidth($hImage)
$ImgSize[1] = _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_ImageDispose ($hImage)
_GDIPlus_ShutDown ()
Return $ImgSize
EndFunc
Func _ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance)
return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance)
EndFunc
Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
; Получение размеров изображения
$Size = MK_Get_ImageSize($findImage)
if $tolerance>0 then
; Собираем строку для функции из dll
$findImage = "*" & $tolerance & " " & "*w" & $Size[0]*$DPI & " " & "*H" & $Size[1]*$DPI & " " & $findImage
EndIf
$result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)
if $result[0]="0" then
return 0
Else
$array = StringSplit($result[0],"|")
$x=Int(Number($array[2]))
$y=Int(Number($array[3]))
if $resultPosition=1 then
$x=$x + Int(Number($array[4])/2)
$y=$y + Int(Number($array[5])/2)
endif
return 1
EndIf
EndFunc
Как я думаю, умножение ширины и высоты на новый dpi должно дать необходимый масштаб изображения. Пробовал менять разрешение. У меня по умолчанию 1920x1080. При смене разрешения изображение естественно находится. При смене масштаба на любом разрешении не находит. Помогите разобраться.