Что нового

Как поменять местами цвета монохромной картинки bmp

yl3d

Новичок
Сообщения
70
Репутация
0
Версия AutoIt: 3.3.14.0

Описание:
Доброе утро специалисты по автоиту.
Посоветуйте решение.

Есть картинка bmp. Она монохромная - там всего два цвета - черный и белый.

Как скриптом - поменять местами цвета этой картинки - превратив ее в негатив ?
То есть заменить черный цвет на белый, а белый на черный.


Примечания:
 

Вложения

  • Картинка.rar
    1,002 байт · Просмотры: 6

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <GDIPlus.au3>

Global $sFile, $hImage, $hBitmap, $hIA, $tColorMatrix, $hGraphics, $iW, $iH

$sFile = FileOpenDialog("Скрипт", Default, "BMP (*.bmp)|Все (*.*)")
If @error Then Exit

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sFile)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
$hIA = _GDIPlus_ImageAttributesCreate()
$tColorMatrix = _GDIPlus_ColorMatrixCreateNegative()
_GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $tColorMatrix)
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, $iW, $iH, 0, 0, $iW, $iH, $hIA)
_GDIPlus_ImageSaveToFile($hImage, $sFile)
_GDIPlus_ImageAttributesDispose($hIA)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
MsgBox(64, "Скрипт", "Файл сохранен")
 

InnI

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

$Src = @ScriptDir & "\1.bmp"
$Dst = @ScriptDir & "\2.bmp"

$hBitmap = _WinAPI_LoadImage(0, $Src, $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE)
If Not $hBitmap Then Exit MsgBox(0, "Ошибка", "Файл не найден")
$tSize = _WinAPI_GetBitmapDimension($hBitmap)

$hDC = _WinAPI_GetDC(0)
$sDC = _WinAPI_CreateCompatibleDC($hDC)
_WinAPI_SelectObject($sDC, $hBitmap)
$dDC = _WinAPI_CreateCompatibleDC($hDC)
$Bmp = _WinAPI_CreateBitmap($tSize.X, $tSize.Y)
_WinAPI_SelectObject($dDC, $Bmp)
_WinAPI_BitBlt($dDC, 0, 0, $tSize.X, $tSize.Y, $sDC, 0, 0, $NOTSRCCOPY)

_WinAPI_SaveHBITMAPToFile($Dst, $Bmp)

_WinAPI_DeleteObject($Bmp)
_WinAPI_ReleaseDC(0, $hDC)
_WinAPI_DeleteDC($sDC)
_WinAPI_DeleteDC($dDC)

ShellExecute($Dst)
 
Автор
Y

yl3d

Новичок
Сообщения
70
Репутация
0
Спасибо за ответы.
Скрипты работают.
 
Верх