1

Тема: AHK : Информация о файле

Хочется узнать можно ли определить размер картинки, в пикселях.

2

Re: AHK : Информация о файле

Проще всего так:

filePath := "D:\Images\MyPicture.png"
oSize := GetImageSize(filePath)
MsgBox, % oSize.W . "`n" oSize.H
ExitApp

GetImageSize(imageFilePath)  {
   Gui, New
   Gui, Add, Pic,, % imageFilePath
   GuiControlGet, Pic, Pos, Static1
   Gui, Destroy
   Return { W: PicW, H: PicH }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK : Информация о файле

Я бы таким способом не пользовался, так как картинка может в гуи не загрузиться (например из-за битого кодека).
Надёжней и быстрее так:

pToken := Gdip_StartUp()
pBitmap := Gdip_CreateBitmapFromFile("c:\myImage.jpg")
Gdip_GetImageDimensions(pBitmap, w, h)
Gdip_DisposeImage(pBitmap)
Gdip_ShutDown(pToken)
MsgBox, % "Width: " w " Height: " h

4

Re: AHK : Информация о файле

Ну, если уж по-умному, и как быстрее, то лучше так:

filePath := "D:\Images\MyPicture.png"
if oSize := GetImageSize(filePath)
   MsgBox, % oSize.W . "`n" oSize.H

GetImageSize(imageFilePath)  {
   if !hBitmap := LoadPicture(imageFilePath)  {
      MsgBox, Не удалось получить hBitmap
      Return
   }
   VarSetCapacity(BITMAP, size := 4*4 + A_PtrSize*2, 0)
   DllCall("GetObject", Ptr, hBitmap, Int, size, Ptr, &BITMAP)
   DllCall("DeleteObject", Ptr, hBitmap)
   Return { W: NumGet(BITMAP, 4, "UInt"), H: NumGet(BITMAP, 8, "UInt") }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5

Re: AHK : Информация о файле

Неа, LoadPicture с битыми файлами не работает.

6

Re: AHK : Информация о файле

Да и ну их, эти битые файлы, кому они нужны.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7

Re: AHK : Информация о файле

А битый файл зрительно можно и не отличить.
Например битый jpg  без видимых битых пикселов может прекрасно открываться в пейнте.
Кстати, с опцией GDI+ открывает.

hBitmap := LoadPicture(imageFilePath, "GDI+")

8

Re: AHK : Информация о файле

У меня даже не на чем попробовать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

9

Re: AHK : Информация о файле

teadrinker пишет:

Ну, если уж по-умному, и как быстрее,

Замерил скорости (13 mb небитый jpg):

LoadPicture(imageFilePath, "GDI+") - 200 ms
LoadPicture(imageFilePath) - 700 ms
Gdip_CreateBitmapFromFile("c:\myImage.jpg") - 30 ms

Файлы:
https://ru.files.fm/u/59dw8vw8

10

Re: AHK : Информация о файле

Да, действительно, через GDI+ быстрее. Но мой вариант зато без сторонних библиотек.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg