[Spice-devel] [vdagent-win PATCH] vdagent: use HBITMAP instead of DIB for image encoding

Hans de Goede hdegoede at redhat.com
Tue Mar 12 04:54:48 PDT 2013


Hi,

Great work on debugging this! ACK.

Regards,

Hans


On 03/12/2013 01:00 PM, Arnon Gilboa wrote:
> CxImage DIB to PNG encoding seems to ignore pallete in some scenarios.
> This issue happens when copying a png from FireFox, but with IE it's ok.
>
> rhbz #919150
> ---
>   vdagent/vdagent.cpp |   11 ++++++++---
>   1 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp
> index 722815c..6f2a49c 100644
> --- a/vdagent/vdagent.cpp
> +++ b/vdagent/vdagent.cpp
> @@ -42,7 +42,7 @@ typedef struct VDClipboardFormat {
>   VDClipboardFormat clipboard_formats[] = {
>       {CF_UNICODETEXT, {VD_AGENT_CLIPBOARD_UTF8_TEXT, 0}},
>       //FIXME: support more image types
> -    {CF_DIB, {VD_AGENT_CLIPBOARD_IMAGE_PNG, VD_AGENT_CLIPBOARD_IMAGE_BMP, 0}},
> +    {CF_BITMAP, {VD_AGENT_CLIPBOARD_IMAGE_PNG, VD_AGENT_CLIPBOARD_IMAGE_BMP, 0}},
>   };
>
>   #define clipboard_formats_count (sizeof(clipboard_formats) / sizeof(clipboard_formats[0]))
> @@ -1025,8 +1025,13 @@ bool VDAgent::handle_clipboard_request(VDAgentClipboardRequest* clipboard_reques
>       case VD_AGENT_CLIPBOARD_IMAGE_PNG:
>       case VD_AGENT_CLIPBOARD_IMAGE_BMP: {
>           DWORD cximage_format = get_cximage_format(clipboard_request->type);
> -        ASSERT(cximage_format);
> -        if (!image.CreateFromHANDLE(clip_data)) {
> +        HPALETTE pal = 0;
> +
> +        ASSERT(cximage_format);
> +        if (IsClipboardFormatAvailable(CF_PALETTE)) {
> +            pal = (HPALETTE)GetClipboardData(CF_PALETTE);
> +        }
> +        if (!image.CreateFromHBITMAP((HBITMAP)clip_data, pal)) {
>               vd_printf("Image create from handle failed");
>               break;
>           }
>


More information about the Spice-devel mailing list