Что нового

Изменение цветовой схемы скриншота

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Добрый день!

На основе: http://autoit-script.ru/index.php/topic,340.0.html
Как можно еще изменить цветовую схему? Чтоб битность цвета уменьшить.
Т.е. снимать картинку без уменьшения размера, но ужать по цветам, скажем - 4-х битный цвет сделать.
(Цель - экономия размера)
 

weweWe45s

Новичок
Сообщения
36
Репутация
1
наверное простопростопростопросто конвертировать скриншот
зы наприер http://www.imagemagick.org/discourse-server/viewtopic.php?f=8&t=9930
 
Автор
В

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
А в какое место вставить:

Код:
#include <ScreenCapture.au3>

$__g_iBMPFormat = $GDIP_PXF04INDEXED
_ScreenCapture_Capture("scr.bmp")


в готовый скрипт.

Код:
#Include <GDIPlus.au3>
#Include <ScreenCapture.au3>

$hBitmap = _ScreenCapture_Capture()
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
$hThumb = _GDIPlus_GetImageThumbnail($hImage, _GDIPlus_ImageGetWidth($hImage) / 4, _GDIPlus_ImageGetHeight($hImage) / 4)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ImageSaveToFile($hThumb, @ScriptDir & '\screenshort.jpg')
_GDIPlus_ImageDispose($hThumb)
_GDIPlus_Shutdown()

Func _GDIPlus_GetImageThumbnail($hImage, $iWidth, $iHeight)

    Local $Ret = DllCall($ghGDIPDll, 'int', 'GdipGetImageThumbnail', 'ptr', $hImage, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr', 0, 'ptr', 0)

    If (@error) Or ($Ret[0]) Then
        Return SetError(1, 0, 0)
    EndIf
    Return $Ret[4]
EndFunc   ;==>_GDIPlus_GetImageThumbnail


Готовый работает хорошо, формирует картинку в JPG, можно ее смасштабировать. вот еще бы по цветовой гамме урезать, и было бы идеально совсем.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ВиталийВВ
Код:
#Include <GDIPlus.au3>
#Include <ScreenCapture.au3>

$hBitmap = _ScreenCapture_Capture()
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
$hClone = _GDIPlus_BitmapCloneArea($hImage, 0, 0, _GDIPlus_ImageGetWidth($hImage), _GDIPlus_ImageGetHeight($hImage), $GDIP_PXF04INDEXED)
_GDIPlus_ImageDispose($hImage)
$hThumb = _GDIPlus_GetImageThumbnail($hClone, _GDIPlus_ImageGetWidth($hClone) / 4, _GDIPlus_ImageGetHeight($hClone) / 4)
_GDIPlus_ImageDispose($hClone)
_GDIPlus_ImageSaveToFile($hThumb, @ScriptDir & '\screenshort.jpg')
_GDIPlus_ImageDispose($hThumb)
_GDIPlus_Shutdown()

Func _GDIPlus_GetImageThumbnail($hImage, $iWidth, $iHeight)
    Local $Ret = DllCall($ghGDIPDll, 'int', 'GdipGetImageThumbnail', 'ptr', $hImage, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr', 0, 'ptr', 0)
    If (@error) Or ($Ret[0]) Then
        Return SetError(1, 0, 0)
    EndIf
    Return $Ret[4]
EndFunc   ;==>_GDIPlus_GetImageThumbnail
 
Автор
В

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Не получается файл с картинкой :-( т.е. он вообще не формируется.
 
Автор
В

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
InnI сказал(а):
ВиталийВВ
вообще не формируется
На Win7 x86 и Autoit 3.3.8.0 всё прекрасно "формируется".
У меня x86 и Autoit 3.3.8.0, но ХР - из-за этого может быть? (предыдущий скрипт - все отлично, а этот - ой :( )

Проверили на Вин 10 - работает. А можно как то для Вин ХР адаптировать?

Можно не пытаться бороться, похоже. Суть: проверил на Вин 10 - работает, да ужимается до, видать, 4 бит, НО размер картинки остается как и у обычного 16/32 битного цвета.

Основной же целью было - ужать кол-во цветов имено для уменьшения размера файла. Пусть и в ущерб качеству.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Верх