1 (изменено: steets, 2015-09-24 23:43:26)

Тема: AHK: Поточечный вывод изображения из файла на экран

Всем Привет!
Совсем недавно начал изучать AHK, поэтому прошу помощи, так как самостоятельно найти более имение сносные гайды не смог.
Суть проблемы в следующем, есть у меня файл, в котором указаны положения точек(x и y) и их цвет.
Мне нужно по данным координатам нарисовать их на экране.

содержание файла из которого должна идти загрузка, следующее:
647/272/0xFFFFFF
647/273/0xFFFFFF
647/274/0xFFFFFF
647/275/0xFFFFFF
647/276/0xFFFFFF
647/277/0xFFFFFF
647/278/0xFFFFFF
647/279/0xFFFFFF
647/280/0xFFFFFF
647/281/0xF0F0F0
647/282/0xF0F0F0
647/283/0xF0F0F0

если необходимо, поменять разделители в файле, то это не проблема.
Для меня сейчас основная проблема, понять, как нарисовать точку по заданной координате.
Заранее благодарен за помощь.

2

Re: AHK: Поточечный вывод изображения из файла на экран

steets, ознакомьтесь с этой темой, отредактируйте заголовок.

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

3

Re: AHK: Поточечный вывод изображения из файла на экран

0) Ознакомиться с библиотекой GDI+
1) Считывать из файла строки по порядку командой Loop (чтение файла)
2) Внутри цикла делать разбор строки командой StrSplit или RegEx
3) Используя GDI+, нарисовать текущую точку
4) След. точка и т. д.

4

Re: AHK: Поточечный вывод изображения из файла на экран

ypppu пишет:

0) Ознакомиться с библиотекой GDI+
1) Считывать из файла строки по порядку командой Loop (чтение файла)
2) Внутри цикла делать разбор строки командой StrSplit или RegEx
3) Используя GDI+, нарисовать текущую точку
4) След. точка и т. д.

GDI+ где на русском про него нормальную инфо найти? потому что уже натыкался на примеры, но нормальных русскоязычных разъяснений не находил.

5

Re: AHK: Поточечный вывод изображения из файла на экран

Gdi+

#SingleInstance, Force
#NoEnv
SetBatchLines, -1
#Include, Gdip.ahk
pToken := Gdip_Startup()
OnExit, Exit

; Создаем окно с нужными стилями для работы gdi+
Gui, 1: -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs
Gui, 1: Show, NA

; размер рисунка на весь экран.
Width := A_ScreenWidth, Height := A_ScreenHeight

; Начальные настройки для gdi+
hwnd := WinExist()    ,    hbm := CreateDIBSection(Width, Height)    ,    hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)    ,    G := Gdip_GraphicsFromHDC(hdc)

; Режим сглаживания на 4.
;Gdip_SetSmoothingMode(G, 4)


; читаем построчно файл list.txt 
Loop,Read,%A_ScriptDir%\list.txt,
{
    ;Делим строку на 5 частей. 1 и 2 это xy. 5 это color. 
    ;3 и 4 По умолчанию пустые, но если после x и y указать двоеточие(:) то указывается x2 и y2. Нужно что бы рисовать линию между этими точками.
    RegExMatch(A_LoopReadLine,"(\d+)/(\d+)(?:\:(\d+)/(\d+)){0,1}/(.*)",xyc)
    ; Если x2 и y2 пустые задаем им такие же значения как у x1+1 и y2.
    % (xyc3 = "") and (xyc4 = "") and (xyc3 := xyc1+0.1)true and (xyc4 := xyc2)true
    ; В gdi+ еще надо указывать прозрачность. Задаем 100 процентную видимость нарисованного. в color.
    xyc5|=0xff000000
    ; задаем цвет кисти и толщиной в 1 пиксель
    pPen := Gdip_CreatePen(xyc5, 1)
    ; рисуем пиксель\линию.
    Gdip_DrawLines(G, pPen    , xyc1 "," xyc2 "|" xyc3 "," xyc4 )
    ; очищаем кисть.
    Gdip_DeletePen(pPen)
}


; Обновить\Показать окно.
UpdateLayeredWindow(WinExist(), hdc, 0, 0, Width, Height)
return


Exit:
; gdi+ may now be shutdown on exiting the program
Gdip_Shutdown(pToken)
ExitApp
Return

Читает из файла list.txt который лежит рядом со скриптом.
Что бы нарисовать линию от точки A до B надо указывать в list.txt вот так

x/y:x2/y2/color
Пример: 647/272:647/280/0xFFFFFF

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

x/y/color
Пример: 647/272/0xFFFFFF

6

Re: AHK: Поточечный вывод изображения из файла на экран

yalanne пишет:

Gdi+

#SingleInstance, Force
#NoEnv
SetBatchLines, -1
#Include, Gdip.ahk
pToken := Gdip_Startup()
OnExit, Exit

; Создаем окно с нужными стилями для работы gdi+
Gui, 1: -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs
Gui, 1: Show, NA

; размер рисунка на весь экран.
Width := A_ScreenWidth, Height := A_ScreenHeight

; Начальные настройки для gdi+
hwnd := WinExist()    ,    hbm := CreateDIBSection(Width, Height)    ,    hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)    ,    G := Gdip_GraphicsFromHDC(hdc)

; Режим сглаживания на 4.
;Gdip_SetSmoothingMode(G, 4)


; читаем построчно файл list.txt 
Loop,Read,%A_ScriptDir%\list.txt,
{
    ;Делим строку на 5 частей. 1 и 2 это xy. 5 это color. 
    ;3 и 4 По умолчанию пустые, но если после x и y указать двоеточие(:) то указывается x2 и y2. Нужно что бы рисовать линию между этими точками.
    RegExMatch(A_LoopReadLine,"(\d+)/(\d+)(?:\:(\d+)/(\d+)){0,1}/(.*)",xyc)
    ; Если x2 и y2 пустые задаем им такие же значения как у x1+1 и y2.
    % (xyc3 = "") and (xyc4 = "") and (xyc3 := xyc1+0.1)true and (xyc4 := xyc2)true
    ; В gdi+ еще надо указывать прозрачность. Задаем 100 процентную видимость нарисованного. в color.
    xyc5|=0xff000000
    ; задаем цвет кисти и толщиной в 1 пиксель
    pPen := Gdip_CreatePen(xyc5, 1)
    ; рисуем пиксель\линию.
    Gdip_DrawLines(G, pPen    , xyc1 "," xyc2 "|" xyc3 "," xyc4 )
    ; очищаем кисть.
    Gdip_DeletePen(pPen)
}


; Обновить\Показать окно.
UpdateLayeredWindow(WinExist(), hdc, 0, 0, Width, Height)
return


Exit:
; gdi+ may now be shutdown on exiting the program
Gdip_Shutdown(pToken)
ExitApp
Return

Читает из файла list.txt который лежит рядом со скриптом.
Что бы нарисовать линию от точки A до B надо указывать в list.txt вот так

x/y:x2/y2/color
Пример: 647/272:647/280/0xFFFFFF

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

x/y/color
Пример: 647/272/0xFFFFFF

Огромное спасибо!

7

Re: AHK: Поточечный вывод изображения из файла на экран

steets, ещё раз внимательно ознакомьтесь с указанной темой, обратите внимание на правила цитирования, отредактируйте свои посты.

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