Что нового

Как через GDIPlus печатать текст без сглаживания (ClearType) или черно белым?

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Мне нужно напечатать пару цифр на изображении, примерно так:
Код:
#include <GDIPlus.au3>
_GDIPlus_Startup()
Local Const $iXOffset = 30, $iYOffset = 30, $iW = 40, $iH = 12
$hO_Main = _GDIPlus_BitmapCreateFromScan0(100, 60) ;эта строка для примера, ее не менять
$hGraphic = _GDIPlus_ImageGetGraphicsContext ($hO_Main)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 0)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Lucida Console")
$hFont = _GDIPlus_FontCreate($hFamily, 8, 0)
$tLayout = _GDIPlus_RectFCreate($iXOffset, $iYOffset, $iW, $iH)
_GDIPlus_GraphicsDrawStringEx($hGraphic, "1235", $hFont, $tLayout, $hFormat, $hBrush)
_GDIPlus_ImageSaveToFile($hO_Main, 'text2.bmp')


Но когда увеличиваю text2.bmp, то видно что текст напечатался со сглаживанием, как убрать его, или как напечатать что - то, черно белым?
 

Вложения

  • 2017-01-22_122153.gif
    2017-01-22_122153.gif
    2.2 КБ · Просмотры: 5

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
inververs
со сглаживанием, как убрать его
Код:
_GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 1)


напечатать что - то, черно белым
Создать чёрно-белый bitmap
Код:
_GDIPlus_BitmapCreateFromScan0(100, 60, $GDIP_PXF01INDEXED)
или уменьшить цветность готового
Код:
$hClone = _GDIPlus_BitmapCloneArea($hO_Main, 0, 0, 100, 60, $GDIP_PXF01INDEXED)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Спасибо, это то что нужно. Больше подходит клонирование с нужными цветами.
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
а если по пробовать взять шрифт system ?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Ganibal95
а если по пробовать взять шрифт system ?
Попробуйте. А ещё попробуйте "Fixedsys" и "MS Sans Serif" - они тоже не поддерживают сглаживание ;)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Ты прав, не заметил.
Но с этими шрифтами что то не пишет, не знаю почему.
Код:
#include <GDIPlus.au3>
_GDIPlus_Startup()
Local Const $iXOffset = 0, $iYOffset = 5, $iW = 100, $iH = 60
$hO_Main = _GDIPlus_BitmapCreateFromScan0(100, 60) ;эта строка для примера, ее не менять
$hGraphic = _GDIPlus_ImageGetGraphicsContext ($hO_Main)
Local $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 100, 60, $hBrush)
;~ _GDIPlus_GraphicsDrawString ($hGraphic, "1235", $iXOffset, $iYOffset, "MS Sans Serif" , 12) ;ошибка 10
;~ _GDIPlus_GraphicsDrawString ($hGraphic, "1235", $iXOffset, $iYOffset, "System" , 12)
_GDIPlus_GraphicsDrawString ($hGraphic, "1235", $iXOffset, $iYOffset, "Fixedsys" , 12)
_GDIPlus_ImageSaveToFile($hO_Main, 'text2.bmp')
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Ganibal95
и даже использовал его
Вы использовали растровый шрифт в GDI+? Каким образом? Отрисовывали через GDI и работали с готовым bitmap? ;)

inververs
с этими шрифтами что то не пишет
Потому что это растровые шрифты, а не векторные.

http://www.frolov-lib.ru/books/msnet/c_sharp2/ch10.html
Что же касается GDI+, то он работает только с масштабируемыми шрифтами, к которым относятся шрифты TrueType.
 
Верх