--- libfreerdp-gdi/16bpp.c +++ libfreerdp-gdi/16bpp.c @@ -368,10 +368,9 @@ static int BitBlt_DSPDxax_16bpp(HGDI_DC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HGDI_DC hdcSrc, int nXSrc, int nYSrc) { int x, y; - uint16* srcp; + uint8* srcp; uint16* dstp; - uint16* patp; - uint16 color16; + uint16 color16, srcb; HGDI_BITMAP hSrcBmp; /* D = (S & P) | (~S & D) */ @@ -380,7 +379,6 @@ color16 = gdi_get_color_16bpp(hdcDest, hdcDest->textColor); hSrcBmp = (HGDI_BITMAP) hdcSrc->selectedObject; - srcp = (uint16*) hSrcBmp->data; if (hdcSrc->bytesPerPixel != 1) { @@ -390,15 +388,15 @@ for (y = 0; y < nHeight; y++) { - srcp = (uint16*) gdi_get_bitmap_pointer(hdcSrc, nXSrc, nYSrc + y); + srcp = (uint8*) gdi_get_bitmap_pointer(hdcSrc, nXSrc, nYSrc + y); dstp = (uint16*) gdi_get_bitmap_pointer(hdcDest, nXDest, nYDest + y); if (dstp != 0) { for (x = 0; x < nWidth; x++) { - patp = (uint16*) &color16; - *dstp = (*srcp & *patp) | (~(*srcp) & *dstp); + srcb = (*srcp << 8) | *srcp; + *dstp = (srcb & color16) | (~srcb & *dstp); srcp++; dstp++; }