Что нового

Как работать с функцией GetGlyphOutline

my.EXpr

Provehito In Altum
Сообщения
7
Репутация
0
Доброе время суток. Не знаю, ошибся ли я с разделом, надеюсь что нет. Интересует работа с функцией GetGlyphOutline (gdi32.dll). Поиски ведут на официальные источники. Задача - сравнить два грифа (и определить их сходство) извлеченные из внешних файлов шрифтов. Сама по себе функция извлекает информацию в разном виде (контуров-точек или bitmap). Для начала хочу заставить функцию хотя бы сохранять изображение. Может это в AutoIt невозможно?

Код:
$result=DllCall("gdi32.dll", 'int', "GetGlyphOutline", 'hdc', $msg, 'uint', 'A', 'uint', 'GGO_BITMAP')


Спасибо.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: Вопрос по работе с GetGlyphOutline

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Вопрос по работе с GetGlyphOutline" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор форума.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Так ведь в MSDN все подробно написано.
 
Автор
M

my.EXpr

Provehito In Altum
Сообщения
7
Репутация
0
Yashied [url_ex=javascript:qq.OpenLink('[url=http://autoit-script.ru/index.php/topic,7860.msg53452.html#msg53452%27]Re: Как работать с функцией GetGlyphOutline)][?][/url_ex]
Так ведь в MSDN все подробно написано.
конечно это прочитано, но мне бы пример применения. да и разобраться с hdc [in] и как это вяжется со шрифтами?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
my.EXpr сказал(а):
...да и разобраться с hdc [in] и как это вяжется со шрифтами?

GDI, к сожалению, не позволяет работать напрямую с хендлами шрифтов, а уж тем более с файлами. Поэтому необходимо сначала создать шрифт - CreateFont(), затем установить его в любой контекст (DC) - SelectObject(), а уж потом использовать функцию GetGlyphOutline() c этим DC. Именно из DC функция и будет брать информацию о шрифте, который там выбран. Лучше создать свой DC - CreateCompatibleDC().
 
Автор
M

my.EXpr

Provehito In Altum
Сообщения
7
Репутация
0
Yashied [url_ex=javascript:qq.OpenLink('[url=http://autoit-script.ru/index.php/topic,7860.msg53476.html#msg53476%27]Re: Как работать с функцией GetGlyphOutline)][?][/url_ex]
Поэтому необходимо сначала создать шрифт - CreateFont(), затем установить его в любой контекст (DC) - SelectObject(), а уж потом использовать функцию GetGlyphOutline() c этим DC. Именно из DC функция и будет брать информацию о шрифте, который там выбран. Лучше создать свой DC - CreateCompatibleDC().

попробовал использовать следующий код

Код:
_WinAPI_AddFontResourceEx('myfont.ttf', $FR_PRIVATE)
$hDC = _WinAPI_GetDC(0)
$hFont = _WinAPI_CreateFont(50, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS,$CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'my font')
$hOldFont = _WinAPI_SelectObject($hDC, $hFont)
                     
$a='{ { 0, 1}, { 0, 0 }, { 0, 0 }, { 0, 1 } }' ; собственно матрица для функции, не знаю верный ли это формат
$result=DllCall("gdi32.dll", "int", "GetGlyphOutline", "hdc", $hDC, "uint", "A", "uint", "GGO_BITMAP", "0", "0", "NULL", $a)
MsgBox(0, 'a', $result)


результата нет, может быть параметры не верно заданы?
 
Автор
M

my.EXpr

Provehito In Altum
Сообщения
7
Репутация
0
действительно никто не знает как получить информацию... :-X перечитал msdn получился такой вот код, который все равно ничего не возвращает. подскажите пожалуйста

Код:
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $r, $glyphstruc, $matx
Global $hDC, $hFont, $hSv

$hDC=_WinAPI_GetDC(0)
$hFont=_WinAPI_CreateFont(24, 0, 0, 0, $FW_NORMAL , 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, 'Arial')
$hSv=_WinAPI_SelectObject($hDC, $hFont)

$glyphstruc=DllStructCreate('uint gmBlackBoxX;uint gmBlackBoxY;long gmptGlyphOrigin;short gmCellIncX;short gmCellIncY') ; 
$matx=DllStructCreate('uint eM11;uint eM12;uint eM21;uint eM22') ; матрица преобразования
DllStructSetData($matx, 'eM11', 1)
DllStructSetData($matx, 'eM12', 0)
DllStructSetData($matx, 'eM21', 0)
DllStructSetData($matx, 'eM12', 1)

$r=DllCall('gdi32.dll', 'uint', 'GetGlyphOutline', 'hwnd', $hDC, 'uint', 'A', 'uint', 'GGO_BITMAP', 'ptr', DllStructGetPtr($glyphstruc), 'dword', 0, 'lpvoid', 0, 'ptr', DllStructGetPtr($matx))

MsgBox(0, "result", $r)
 
Верх