Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 25

Как получить screenshot в нужном цветовом формате?

18.09.2014, 14:50. Показов 731. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Я работаю над программой, которая захватывает кадры с области экрана и формирует из них GIF анимацию. Вот примерный код:
C++
1
2
3
4
5
6
7
8
9
hdcScreen = GetDC(hDesktopWnd);
hdcMemDC = CreateCompatibleDC(hdcScreen);
hbmScreen = CreateCompatibleBitmap(hdcScreen, width, height);
BitBlt( hdcMemDC, 0, 0, width,height, hdcScreen, x, y, SRCCOPY);
GetDIBits(hdcMemDC, hbmScreen, 0,
        (UINT) height, lpbitmap,
        (BITMAPINFO *)&bmpInfo, DIB_RGB_COLORS);
// на данном этапе в lpbitmap хранятся пиксели в RGB формате
// далее пиксели используются для генерации кадра GIF
Проблема в том, что скрины я могу получать в формате 32/24/16 битов на пиксель в виде цвета RGB. В то же время GIF хранит пиксели в виде индексов цветов из палитры. И мне желательно бы получать screenshot сразу в виде палитры и индексов, чтобы не выполнять лишних преобразований. Итак, вопрос: как получить скрин сразу с палитрой? Или как получить палитру?

P.S.: пробовал получать палитру с помощью GetSystemPaletteEntries, но почему то функция возвращает 0 (т.е. не работает). Палитра то ли заполнена мусором, то ли состоит только из 5 цветов.

P.P.S: Как я получал скрины с разной глубиной? Я просто ставил флаг:
C++
1
2
3
4
bmpInfo.biBitCount = 32; // Works fine.Each pixel is 32 bit
bmpInfo.biBitCount = 24; // Works fine.Each pixel is 24 bit
bmpInfo.biBitCount = 16; // Works fine.Each pixel is 16 bit
bmpInfo.biBitCount = 8; // Causes Access violation
и получал массив lpbitmap в нужном формате. Если же поставить это флажок на 8, то массив lpbitmap видимо ничем не заполняется, т.к. я ловлю access violation при попытке скопировать пиксели в кадр.

Заранее все спасибо за ответы, любые помощь и советы приветствуются!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2014, 14:50
Ответы с готовыми решениями:

Получить screenshot windows в cv::Mat
Собственно, название темы. Как? К сожалению, я не силен в графике и с соответствующими библиотеками знаком слабо. Думал использовать...

Как получить дату в нужном формате
привет всем подскажите как мне в макете заполнить параметр Дата ОбластьЗаголовок.Параметры.ДДата=...

Как сохранить измененный файл в нужном формате
Нужно сохранить измененный файл Ексель формат которого файл Майкрософт Ексель, но получается только в формате Книга Ексель. Это одно и то...

2
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
18.09.2014, 15:32
Курить
https://www.google.com.ua/sear... зображения
В частности в книге Фень Юань. "Программирование графики для WINDOWS." Глава "Квантование цветов" со страницы 726 есть рабочий алгоритм октантного дерева.
P.S. Чей-то ссылка даже не гугл не видна. Гуглить фразу "Квантизация уменьшение цветов изображения"
0
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 25
18.09.2014, 15:37  [ТС]
alexcoder, спасибо за ответ, но вы меня не правильно поняли (точнее, я непонятно объяснил). Я и так могу урезать кол-во цветов до 256 (вернее не я, а библиотека). Просто это долго работает, да и результат не всегда тот какой хотелось бы (цвета не очень). Вопрос в том как это получить именно от виндовса. Просто я надеюсь что это будет быстрее и качественней работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2014, 15:37
Помогаю со студенческими работами здесь

Как преобразовать дату в текст в нужном формате?
Как сделать, что бы функция Today формировалась в формате даты региональной настройки клиента ? Перерыл хэлп ничего не нашёл ((((

Как отобразить дату в ДБГриде в нужном формате?
В delphi поле время (из Access) выводит в неправильном формате. Через adoquery беру из БД (Access) поле "время". В аксессе у...

Как вытащить дату-время в нужном формате?
У меня, в бд, дата хранится в формате 2015-11-06 14:45:34 (к примеру эта дата и время). Подскажите пожалуйста, как ее вывести в формате 6...

Как посчитать количество цифр и вывести в нужном формате
Здравствуйте, подскажите, пожалуйста. Например есть переменные: q = 2; w = 9; e = 8; r = 1; t =9; y = 8; u =6; i =43; a = 7; s = 39; d...

Как заставить формулу выдавать результат в нужном формате ячейки?
Как заставить формулу выдавать результат в нужном формате ячейки при объедении разных форматов? Один формат, например, временной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru