Что нового

Удаление из png - белого цвета

cerber412

Новичок
Сообщения
42
Репутация
0
Доброй ночи, форумчане. У меня возникла непростая проблема.

У меня есть рисунок 1.png
Рисунок этот очень простой, все цвета - однотонные, никаких полутонов нет.

Как autoit'ом - удалить у этого рисунка весь белый цвет, что в нем есть - оставив вместо него прозрачный фон ?
 
Автор
C

cerber412

Новичок
Сообщения
42
Репутация
0
InnI, прошел по указанной ссылке и нашел вот такой код:
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>

_GDIPlus_Startup()
Local $iWidth = 601, $iHeight = 601, $sFileName = @ScriptDir & '\test.png'

Local $hGUI = GUICreate('GDI+ Example (' & @ScriptName & ')', $iWidth, $iHeight, -1, -1, $WS_POPUP, $WS_EX_CONTROLPARENT)
GUISetBkColor(0x000000, $hGUI) ; Задаем Черный цвет фона GUI-окна.
GUISetState()

Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Local $hIA = _GDIPlus_ImageAttributesCreate()

; Посмотрите в справке, описание этой функции
_GDIPlus_ImageAttributesSetColorKeys($hIA, 0, True, 0x00DBDBDB, 0x00FFFFFF)

Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sFileName)

_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth, $iHeight, $hIA)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_ImageAttributesDispose($hIA)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()

Он вроде бы как-то заменяет весь белый цвет - на какой-то другой и выводит результат на экран.
Но он не меняет сам файл test.png , поэтому я никак не могу проверить - есть там прозрачность или нет.

Как при помощи этого скрипта - сохранить измененный файл - уже с прозрачностью ?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
#include <GDIPlus.au3>

$sFileName = "test.png"

_GDIPlus_Startup()

$hIA = _GDIPlus_ImageAttributesCreate()
_GDIPlus_ImageAttributesSetColorKeys($hIA, 0, True, 0xFFFFFFFF, 0xFFFFFFFF)
$hImage = _GDIPlus_BitmapCreateFromFile($sFileName)
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
$hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth, $iHeight, $hIA)
_GDIPlus_ImageSaveToFile($hBitmap, "trans.png")

_GDIPlus_ImageAttributesDispose($hIA)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_BitmapDispose($hImage)
_GDIPlus_Shutdown()
 
Верх