[PATCH 1/7] gdi32: Use GetDIBits in emfdrv_stretchblt.
Huw Davies
huw at codeweavers.com
Wed Aug 11 05:11:49 CDT 2021
On Wed, Aug 11, 2021 at 10:57:56AM +0200, Jacek Caban wrote:
> /* Generate an EMRBITBLT, EMRSTRETCHBLT or EMRALPHABLEND record depending on the type parameter */
> -static BOOL emfdrv_stretchblt( PHYSDEV dev_dst, struct bitblt_coords *dst, PHYSDEV dev_src,
> +static BOOL emfdrv_stretchblt( PHYSDEV dev_dst, struct bitblt_coords *dst, HDC hdc_src,
> struct bitblt_coords *src, DWORD rop, DWORD type )
> {
> - unsigned char src_buffer[FIELD_OFFSET(BITMAPINFO, bmiColors[256])];
> - BITMAPINFO *src_info = (BITMAPINFO *)src_buffer;
> - UINT bits_size, bmi_size, emr_size, size, bpp;
> - EMRSTRETCHBLT *emr_stretchblt;
> - struct gdi_image_bits bits;
> + BITMAPINFO src_info = {{ sizeof( src_info.bmiHeader ) }};
> + UINT bmi_size, emr_size, size, bpp;
> BITMAPINFO *bmi;
> EMRBITBLT *emr;
> - DC *dc_src;
> - DWORD err;
> - BOOL ret = FALSE;
> -
> - dc_src = get_physdev_dc(dev_src);
> - dev_src = GET_DC_PHYSDEV(dc_src, pGetImage);
> - err = dev_src->funcs->pGetImage(dev_src, src_info, &bits, src);
> - if (err)
> - {
> - SetLastError(err);
> - return FALSE;
> - }
> + HBITMAP bitmap;
> + BOOL ret;
>
> - bpp = src_info->bmiHeader.biBitCount;
> + if (!(bitmap = GetCurrentObject( hdc_src, OBJ_BITMAP ))) return FALSE;
> + if (!GetDIBits( hdc_src, bitmap, 0, INT_MAX, NULL, &src_info, DIB_RGB_COLORS )) return FALSE;
What about a blit from a screen dc to the metafile?
Huw.
More information about the wine-devel
mailing list