Как отправить HBITMAP через сокет, используя WIN32 и C ++? - PullRequest
0 голосов
/ 16 мая 2011

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

Далее я хочу отправить это изображение cropepd через соединение Socket. Соединение между сокетами установлено. Моя проблема в том, как отправить / получить это изображение через Socket, поскольку для функций send () и recv () требуется символ *.

Одна идея, если я выберу HBITMAP для объекта memDC, чем я могу отправить memDC непосредственно в удаленный сокет?

Есть ли более простой способ решить эту задачу?

Ответы [ 2 ]

4 голосов
/ 16 мая 2011

Вы не можете передать HBITMAP (который является HANDLE, указателем ссылки в памяти) на другую машину. Вы можете использовать функцию GetBitmapBits для преобразования HBITMAP в байтовый массив и отправки этого байтового массива с помощью send ().

С другой стороны, вам придется создать другое совместимое растровое изображение и использовать Функция SetBitmapBits после recv ().

2 голосов
/ 16 мая 2011

Как правило, отправка необработанной памяти была бы плохой идеей - даже если вы гарантируете, что на другом конце всегда есть машина Windows, она не очень гибкая в будущем - что, если вы хотите перейти на другую платформу, илидаже начать использовать .NET поверх простого win32?

Что я бы порекомендовал сделать, это сохранить обрезанное изображение в файл .bmp, а затем отправить файл через сокет, как и любой другой.Таким образом, вы получаете максимальную гибкость в том, что вы делаете.

К сожалению, если вы работаете в C ++ / win32, вывод растрового изображения - это настоящий кошмар.Вот код для вывода растрового изображения, которое я собрал вместе на основе нескольких источников - в нем используются некоторые члены нашего класса, но вы должны быть в состоянии выяснить, как вставить туда правильные значения.

http://pastebin.com/gLw7ykMU

Надеюсь, это поможет!

...