1 (изменено: shahlik002, 2017-07-18 19:32:28)

Тема: AHK: Извлечение картинки из файла

Сделал gui куда можно добавлять ярлыки , и вот с помощью fileselectfile выбираю расположение файла.
Потом gui,add,picture или guicontrol "тратата" путь к файлу.
В итоге картинку извлекает в очень плохом качестве,притом даже хуже чем в меню выбора файла.
Прикрепляю скрин.

Как же это исправить?

Post's attachments

Безымянный.png 118.88 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2

Re: AHK: Извлечение картинки из файла

http://forum.script-coding.com/viewtopi … 245#p83245.
Кстати это надо бы в коллекцию, это же есть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: Извлечение картинки из файла

Но надо бы переделать для картинок и получение максимального качества, или разные его варианты.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Извлечение картинки из файла

Если нужно именно иконку, которую использует файл, то проще всего так:

FilePath := A_AhkPath

Loop 6  {
   var := A_Index - 1
   size := A_Index < 3 ? 32 : 16
   Gui, Add, Pic, w%size% h-1 y10 x+10, % "HICON:" DllCall("Shell32\ExtractAssociatedIcon", Ptr, 0, Str, FilePath, ShortP, var)
}

Gui, Show
Return

GuiClose:
   ExitApp

Если картинка, то встроенный способ, вроде, вполне годится.

Gui, Add, Picture, w300 h-1, C:\My Pictures\Company Logo.gif
shahlik002 пишет:

Прикрепляю скрин.

Лучше бы сам файл прикрепили.

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

5

Re: AHK: Извлечение картинки из файла

teadrinker пишет:

Если нужно именно иконку, которую использует файл

Папка?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Извлечение картинки из файла

Так ещё можно:

FilePath := A_MyDocuments

for k, v in ["JUMBO", "EXTRALARGE", "LARGE", "SMALL", "SYSSMALL"]  {
   data := GetSysImgLstIcon(FilePath, v)
   Gui, Add, Pic, % "x+10 y10 w" data.W " h" data.H, % "HICON:" data.HICON
}
   
Gui, Show
Return

GuiClose:
   ExitApp
   
GetSysImgLstIcon(Path, Size := "SYSSMALL", Overlay := "") {
   static AW := A_IsUnicode ? "W" : "A", cbSFI := A_PtrSize + 8 + (340 << !!A_IsUnicode), FILE_ATTRIBUTE_NORMAL := 0x80
        , IID_IIL_Str := "{46EB5926-582E-4017-9FDF-E8998DAA0950}", SHGFI := {SYSICONINDEX: 0x04000, USEFILEATTRIBUTES: 0x0010}
        , SHGIOI := {SHARE: 0x0FFFFFFF, LINK: 0x0FFFFFFE, SLOWFILE: 0x0FFFFFFD, DEFAULT: 0x0FFFFFFC}
        , SHIL := {LARGE: 0x00, SMALL: 0x01, EXTRALARGE: 0x02, SYSSMALL: 0x03, JUMBO: 0x04}
        
   If !SHIL.HasKey(Size)
      Return False
   VarSetCapacity(IID_IIL, 16, 0) ; IID
   If DllCall("Ole32.dll\IIDFromString", "WStr", IID_IIL_Str, "Ptr", &IID_IIL, "UInt")
      Return False
   HMOD := DllCall("Kernel32.dll\GetModuleHandle", "Str", "shell32.dll", "UPtr")
   FileIconInit := DllCall("Kernel32.dll\GetProcAddress", "Ptr", HMOD, "Ptr", 660, "UPtr")
   DllCall(FileIconInit, "UInt", True, "UInt")
   VarSetCapacity(SFI, cbSFI, 0) ; SHFILEINFO
   ; pure extensions need special handling
   Flags := SHGFI.SYSICONINDEX | (SubStr(Path, 1, 1) = "." ? SHGFI.USEFILEATTRIBUTES : 0x0)
   If !DllCall("Shell32.dll\SHGetFileInfo" . AW, "Str", Path, "UInt", 0x80, "Ptr", &SFI, "UInt", cbSFI, "UInt", Flags, "UPtr")
      Return False
   IconIndex := NumGet(SFI, A_PtrSize, "Int")
   If DllCall("Shell32.dll\SHGetImageList", "Int", SHIL[Size], "Ptr", &IID_IIL, "PtrP", IIL, "UInt")
      Return False
   Flags := 0x0020 ; ILD_IMAGE
   ; overlays need a special handling
   If SHGIOI.HasKey(Overlay)
   && (IOV := DllCall("Shell32.dll\SHGetIconOverlayIndex", "Ptr", 0, "UInt", SHGIOI[Overlay], "Int")) >= 0
      Flags |= IOV << 8
   DllCall("Comctl32.dll\ImageList_GetIconSize", "Ptr", IIL, "IntP", CX, "IntP", CY, "UInt")
   HICON := DllCall("Comctl32.dll\ImageList_GetIcon", "Ptr", IIL, "Int", IconIndex, "UInt", Flags, "UPtr")
   Return {HICON: HICON, W: CX, H: CY}
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Извлечение картинки из файла

Ну вот это огонь! Они (размеры) там ещё и по именам.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Извлечение картинки из файла

Голосую - добавляй в коллекцию.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Извлечение картинки из файла

Ок. )

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

10

Re: AHK: Извлечение картинки из файла

teadrinker
Та что уж там файл , записки они ведь встроенные в винду.
А скрипт вот

#NoEnv
IniRead, OutputVarSectionNames, settings.ini
Loop, Parse, OutputVarSectionNames,`n
{
IniRead,sx,settings.ini,%A_LoopField%,sx
IniRead,sy,settings.ini,%A_LoopField%,sy
IniRead,sw,settings.ini,%A_LoopField%,sw
IniRead,sh,settings.ini,%A_LoopField%,sh
IniRead,x,settings.ini,%A_LoopField%,x
gui,gui1:add,Picture,x%sx% y%sy% w%sh% h%sw% v%A_LoopField% gPic,%x%
}

x=%A_ScriptDir%\+2.bmp
h:=A_ScreenHeight+3
rw:=A_ScreenWidth//25-2
rh:=A_ScreenHeight//25-2

gui,gui1:color,0x464646,
gui,gui1:show, w%A_ScreenWidth% h%h%
gui,gui1:add,Picture,x0 y5 h50 w50 vPT gPic,+2.bmp
GuiControl,gui1:hide,PT

gui,gui3:+AlwaysOnTop -Resize
gui,gui3:add,Slider,vsx gsx x1 y1   Range0-%rw% ToolTiptop	h25 page1,0 
gui,gui3:add,Slider,vsy gsy x1 y26   Range0-%rh% ToolTiptop	h25 page1,0
gui,gui3:add,Slider,vsw gsw x1 y51   Range1-6 ToolTiptop		h25 page1,2
gui,gui3:add,Slider,vsh gsh x1 y76   Range1-6 ToolTiptop		h25 page1,2
gui,gui3:add,Edit,vE1 y1 x130 w100
gui,gui3:add,Button,vB1 gB1 w35 h25 y26 x130,+
gui,gui3:add,Button,vB2 gB2 w35 h25 y26 x165,Save
gui,gui3:add,Button,vB3 gB3 w35 h25 y26 x165,Save
return

gui3guiclose:
GuiControl,gui1:hide,PT
gui,gui3:hide
GuiControl,gui3:Show,b2
GuiControl,gui3:hide,b3
return

gui1GuiClose:
gui1GuiEscape:
Esc::
ExitApp

b1:
FileSelectFile,x ;,35
GuiControl,gui1:,PT,%x%
c:=RegExReplace(x,".*\\","")
c:=RegExReplace(c,"\..*","")
GuiControl,text,e1,%c%
return
b2:
if x=+2.bmp or x=1
	{
	MsgBox, 16, Error, файл не выбран
	return
	}
gosub,3subm
gosub iniwrite
gui,gui1:add,Picture,x%sx% y%sy% w%sw% h%sh% v%e1% gPic,%x%
GuiControl,gui1:,PT,%A_ScriptDir%\+2.bmp
x=%A_ScriptDir%\+2.bmp
gui,gui3:hide
return

b3:
gosub 3subm
gosub iniwrite
GuiControl,gui1:move,%f3%,x%sx% y%sy% w%sw% h%sh%
GuiControl,gui1:,%f3%,%x%
GuiControl,gui1:show,%f3%
GuiControl,text,e1,
GuiControl,gui1:,PT,%A_ScriptDir%\+2.bmp
GuiControl,gui3:Show,b2
GuiControl,gui3:hide,b3
gui,gui3:hide
GuiControl,gui1:hide,pt
x=%A_ScriptDir%\+2.bmp
return

iniwrite:
IniWrite,%sx%,settings.ini,%e1%,sx
IniWrite,%sy%,settings.ini,%e1%,sy
IniWrite,%sw%,settings.ini,%e1%,sw
IniWrite,%sh%,settings.ini,%e1%,sh
IniWrite,%x%,settings.ini,%e1%,x
return

f1::
GuiControl,gui1:show,PT
gui,gui3:show,,3
return

sx:
sy:
sw:
sh:
gosub,3subm
GuiControl,gui1:move,PT,x%sx% y%sy% w%sw% h%sh%
GuiControl,gui1:,PT,%x%
return

3subm:
gui,gui3:submit,nohide
sx:=sx*25
sy:=sy*25+5
sw:=sw*25
sh:=sh*25
return

Pic:
GetKeyState,f2,f2
GetKeyState,f3,f3
if f2=d
{
IniDelete,settings.ini,%A_GuiControl%

GuiControl,gui1:hide,%A_GuiControl%
return
}
if f3=d
{
f3:=A_GuiControl
IniRead,sx,settings.ini,%A_GuiControl%,sx
IniRead,sy,settings.ini,%A_GuiControl%,sy
IniRead,sw,settings.ini,%A_GuiControl%,sw
IniRead,sh,settings.ini,%A_GuiControl%,sh
GuiControl,gui3:text,sx,% sx//25
GuiControl,gui3:text,sy,% sy//25
GuiControl,gui3:text,sw,% sw//25
GuiControl,gui3:text,sh,% sh//25
IniRead,x,settings.ini,%A_GuiControl%,x

GuiControl,gui3:text,e1,%A_GuiControl%

GuiControl,gui3:hide,b2
GuiControl,gui3:show,b3
gui,gui3:show,,3


GuiControl,gui1:hide,%A_GuiControl%
GuiControl,gui1:move,PT,x%sx% y%sy% w%sw% h%sh%
GuiControl,gui1:,PT,%x%
GuiControl,gui1:show,PT
return
}
IniRead,x,settings.ini,%A_GuiControl%,x
run,%x%
return

Я там немного намудрил с именами контролов , надеюсь что то да подскажете.

За помощь спасибо , неплохо бы еще мне по полочкам разложить что значат эти строки и зачем они там.

Post's attachments

+2.bmp 1.91 kb, 6 downloads since 2017-07-19 

You don't have the permssions to download the attachments of this post.

11

Re: AHK: Извлечение картинки из файла

А еще мне бы понять куда ваш код примкнуть , ибо иногда не рисует с разными размерами сторон .
А если перерисовывать при одних и тех же то вообще разные результаты выдает .

12

Re: AHK: Извлечение картинки из файла

Вроде бы разобрался.

13

Re: AHK: Извлечение картинки из файла

Некоторые иконки формата JUMBO отображаются не корректно .
Картинка такая же как и в EXTRALARGE только находиться в уголку , притом занимая больше места под контрол.
Что делать?

Post's attachments

Снимок2.PNG 18.15 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

14

Re: AHK: Извлечение картинки из файла

Приведите пример кода и файл изображения.

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

15

Re: AHK: Извлечение картинки из файла

Код твой , картинка с ярлыка игры стим.
Прикрепить не могу , интерфейс не поддерживается .

16

Re: AHK: Извлечение картинки из файла

Код по-разному можно использовать. Файл можно закачать на какой-нибудь облачный сервис. Нужены также размеры картинки, которые будут указаны в GUI.

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

17 (изменено: shahlik002, 2017-07-20 20:02:17)

Re: AHK: Извлечение картинки из файла

Извлекается то хорошо , но сам ярлык имеет плохую картинку в JUMBO .
Вот архив.

Там бы просто проверить на количество пустого места.
JUMBO =256*256
EXTRALARGE=48*48
Так вот в JUMBO находиться картинка EXTRALARGE в левом верхнем углу , а остальное - пустое место.

Мне нужно просто извлечь в наилучшем качестве.

Post's attachments

проблемма.rar 1.31 kb, 4 downloads since 2017-07-20 

You don't have the permssions to download the attachments of this post.

18

Re: AHK: Извлечение картинки из файла

У меня ваш ярлык выглядит так:

http://i.imgur.com/kInQO2d.png

У меня ведь нет файла, на который он ссылается.

shahlik002 пишет:

Так вот в JUMBO находиться картинка EXTRALARGE в левом верхнем углу , а остальное - пустое место.

Ну значит только такая картинка есть, ничего не поделаешь.

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

19 (изменено: shahlik002, 2017-07-22 10:10:40)

Re: AHK: Извлечение картинки из файла

teadrinker
А проанализировать пиксели , их цвет и количество?
Ну или отобразить хотя бы посередине?

20

Re: AHK: Извлечение картинки из файла

Просто возьмите более подходящий файл.

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

21

Re: AHK: Извлечение картинки из файла

Это не одноразово , я делаю менюшку куда ярлыки можно запихивать .Раз,два и новый файл искать...

22

Re: AHK: Извлечение картинки из файла

А что там за ярлыки, на что они ссылаются? На exe-файлы приложений, или ещё что-то?

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