Что нового

Копируем пиксели нужного цвета на новую картинку

G

GenoTIP

Гость
как сохранить все это в новую картинку?

Код:
#include <Array.au3>
#Include <GDIPlus.au3>
#include <GDIP.au3>

 _GDIPlus_Startup()
	$hBitmap = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\ex.jpg')
	$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap);Переводим изображение в библиотеку GDIPlus
	_WinAPI_DeleteObject($hBitmap);Удаляем изображение созданной функцией _WinAPI_CreateSolidBitmap
	$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage);Получить графический контекст изображения
	$iWidth = _GDIPlus_ImageGetWidth($hBitmap)
    $iHeight = _GDIPlus_ImageGetHeight($hBitmap)
	$hIA = _GDIPlus_ImageAttributesCreate()
	_GDIPlus_ImageAttributesSetOutputChannel($hIA, 1, True, 0) ; Cyan
	_GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth, $iHeight, $hIA)
	_GDIPlus_ImageAttributesDispose($hIA)

	_GDIPlus_ImageDispose($hBitmap)
	_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_ShutDown()
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
GenoTIP
Но правилам раздела так и не следуете.
 
Автор
G

GenoTIP

Гость
Оставил один вопрос, ответьте пожалуйста.. не могу иначе дальше задумку реализовывать, нигде нету руководств для работы с GDI как и подробных примеров..
 

kaster

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

GenoTIP

Гость
из-за ваших коллег и пришлось апать.... ответ я так и не получу походу, скорей весь свод правил скопируют сюда
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Geno,
Ваш код явно писался на скорую руку - удилить объект, а потом пытаться получить его свойства... :wacko:
Код:
_WinAPI_DeleteObject($hBitmap);Удаляем изображение созданной функцией
    $iWidth = _GDIPlus_ImageGetWidth($hBitmap)
    $iHeight = _GDIPlus_ImageGetHeight($hBitmap)


Это говорит о том что Вы не очень то уж и думали над своим кодом, а просто склепали его одной левой и вывалили на форум: нате, разбирайтесь. Позиция крайне неуважительная по отношению к людям от которых Вы вроде бы хотите получить помощь. Вряд ли кто-то Вам ответит, пока Вы сами не проверите свой код и четко не опишите суть возникшей проблемы.
 
Автор
G

GenoTIP

Гость
предыдущее описание кода было более чем четким, но от этого тема понеслась в раздел "стол заказов", а на счет не аккуратного кода, я серьезно не заметил как затесалось туда
Код:
_WinAPI_DeleteObject($hBitmap);Удаляем изображение созданной функцией

суть такая в общем. Программа загружает изображение, производит "обесцвечивание" вот в этом месте
Код:
$hIA = _GDIPlus_ImageAttributesCreate()
    _GDIPlus_ImageAttributesSetOutputChannel($hIA, 1, True, 0) ; Cyan
    _GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth, $iHeight, $hIA)
    _GDIPlus_ImageAttributesDispose($hIA)

закрывает работу прочего-прочего(как это работает так и не разобрался)
и по идее должна сохранить результат в новый файл, но как я не бился - не получилось.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
GenoTIP
мне не нравится, как ты тут спекулируешь на тему несправедливых перемещений твоей темы, и, будто бы, отсутствия решения твоей проблемы в следствие этих перемещений. для комфортного пребывания на форуме ты должен был прочитать (а я искренне надеюсь, что так и есть) где четко сказано не обсуждать действия модераторов. по поводу самих перемещений, есть такое простое правило - есть проблемный код, есть проблемы с ним? в раздел для новичков. кода нет, но есть некая задача? - в стол заказов. твоя темы изначально не содержала никакого кода, и поэтому была перемещена в стол заказов. потом код появился уже после всех предупреждений, и ты искренне стал негодовать почему же тема не в том разделе. потом я перенес код обратно в раздел для новичков, ты опять стал возмущаться, что в из-за перемещений нет ответов. и самое главное, ты, почему-то, отстутствие комментариев со стороны администрации посчитал за ошибку, которую они (администрация) пытаются всячески решить... так вот, это не так. ошибка была изначально твоя - не следование регламенту разделов. а на счет решения твоей проблемы - ни админы ни модераторы не могут такого тебе гарантировать. у них со всем другие задачи. а то что нет ответов - либо никто не знает, либо банально не хочет отвечать. поэтому жди, и учти все замечания.
 
Автор
G

GenoTIP

Гость
Код:
#include <Array.au3>
#Include <GDIPlus.au3>
#include <GDIP.au3>
#include <GUIConstantsEx.au3>

 _GDIPlus_Startup()
 $hGUI = GUICreate("", 200, 50)
	$hBitmap = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\ex.jpg')
	$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap);Переводим изображение в библиотеку GDIPlus
	;$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage);Получить графический контекст изображения
	$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
	GUISetState()
	$hIA = _GDIPlus_ImageAttributesCreate()
	_GDIPlus_ImageAttributesSetOutputChannel($hIA, 1, True, 0) ; Cyan
	_GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, 200, 50, 0, 0, 200, 50, $hIA)
	_GDIPlus_ImageAttributesDispose($hIA)
	$bitmap = _GDIPlus_BitmapCreateFromGraphics(200, 50, $hGraphics)
	_GDIPlus_ImageSaveToFile($bitmap, @ScriptDir & '\white.jpg')
	_GDIPlus_ImageDispose($hBitmap)
	_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_ShutDown()

$Matrix = MatrixGetColor(@ScriptDir & '\white.jpg')
_ArrayDisplay($Matrix)

Func MatrixGetColor($sImage)

   Local $hImage, $iWidth, $iHeight, $iBitmap, $hBitmap

   _GDIPlus_Startup()
   $hImage = _GDIPlus_ImageLoadFromFile($sImage)
   $iWidth = _GDIPlus_ImageGetWidth($hImage)
   $iHeight = _GDIPlus_ImageGetHeight($hImage)
   $iBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
   $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($iBitmap)

   Dim $iMatrix[$iHeight][$iWidth]

   For $H = 0 To $iHeight - 1
      For $W = 0 To $iWidth - 1
         $iMatrix[$H][$W] = '0x' & Hex(_GDIPlus_BitmapGetPixel($hBitmap, $W, $H), 6)
      Next
   Next

   _GDIPlus_ImageDispose($hImage)
   _WinAPI_DeleteObject($iBitmap)
   _WinAPI_DeleteObject($hBitmap)
   _GDIPlus_Shutdown()

   Return $iMatrix
EndFunc


Почему-то сохраняется полностю черная картинка white.jpg а не картинка с битмапом из hGUI, помогите исправить
 
Верх