[PATCH 3/3] d3dx9_36: Add DIB file support to D3DXSaveSurfaceToFileInMemory. (resend)
Christian Costa
titan.costa at gmail.com
Mon Apr 22 16:08:18 CDT 2013
---
dlls/d3dx9_36/surface.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index 49dfd85..d21e1ae 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
@@ -1962,6 +1962,7 @@ HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE
switch (file_format)
{
case D3DXIFF_BMP:
+ case D3DXIFF_DIB:
encoder_clsid = &CLSID_WICBmpEncoder;
break;
case D3DXIFF_PNG:
@@ -1972,7 +1973,6 @@ HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE
break;
case D3DXIFF_DDS:
return save_dds_surface_to_memory(dst_buffer, src_surface, src_rect);
- case D3DXIFF_DIB:
case D3DXIFF_HDR:
case D3DXIFF_PFM:
case D3DXIFF_TGA:
@@ -2109,6 +2109,10 @@ HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE
}
size = stream_stats.cbSize.u.LowPart;
+ /* Remove BMP header for DIB */
+ if (file_format == D3DXIFF_DIB)
+ size -= sizeof(BITMAPFILEHEADER);
+
hr = D3DXCreateBuffer(size, &buffer);
if (FAILED(hr)) goto cleanup;
@@ -2117,6 +2121,9 @@ HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE
{
void *buffer_pointer = ID3DXBuffer_GetBufferPointer(buffer);
void *stream_data = GlobalLock(stream_hglobal);
+ /* Remove BMP header for DIB */
+ if (file_format == D3DXIFF_DIB)
+ stream_data = (void*)((BYTE*)stream_data + sizeof(BITMAPFILEHEADER));
memcpy(buffer_pointer, stream_data, size);
GlobalUnlock(stream_hglobal);
*dst_buffer = buffer;
More information about the wine-patches
mailing list