Преобразование от HBITMAP до Jpeg или Png в C++

Одно из моих любимых решений этой проблемы подобно producer/consumer шаблон.

я создаю основной поток (в значительной степени моя программа Main()), который содержит блокирующийся объект очереди.

Этот основной поток отделяет несколько рабочих потоков, какие простые поп-вещи от центрального блокирования распараллеливают и обрабатывают их. Так как это - ориентированная на многопотоковое исполнение очередь блокирования, биты синхронизации легки - эти TaskQueue.Dequeue(), вызов заблокируется, пока задача не ставится в очередь потоком производителя / основным потоком.

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

В моем случае, у меня есть сервис, который обрабатывает несколько различных типов tasks. Мне ввели очередь для обработки чего-то универсального как TaskQueueTask. Тогда я разделяю это на подклассы и переопределяю Execute() метод.

<час>

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

6
задан Mikey 7 October 2009 в 16:23
поделиться

2 ответа

HBITMAP bmp;
CImage image;
image.Attach(bmp);
image.Save("filename.jpg"); // change extension to save to png
10
ответ дан 10 December 2019 в 02:50
поделиться

определение min и max следующим образом:

#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

#ifndef min
#define min(a,b)            (((a) < (b)) ? (a) : (b))
#endif

и их размещение ДО включения gdi plus сработало для меня :)

-1
ответ дан 10 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: