ReactOS  0.4.15-dev-3181-g4acf100
CreateDIBitmap.c File Reference
#include "precomp.h"
#include "init.h"
#include <pseh/pseh2.h>
Include dependency graph for CreateDIBitmap.c:

Go to the source code of this file.

Macros

#define CBM_CREATDIB   2
 
#define INVALID_POINTER   ((PVOID)(ULONG_PTR)0xC0000000C0000000ULL)
 

Functions

BOOL GetExpected (DWORD *pdwError, HDC hdc, const BITMAPINFOHEADER *lpbmih, DWORD fdwInit, const VOID *lpbInit, const BITMAPINFO *lpbmi, UINT fuUsage)
 
void Test_CreateDIBitmap_Params (void)
 
void Test_CreateDIBitmap_DIB_PAL_COLORS (void)
 
void Test_CreateDIBitmap1 (void)
 
void Test_CreateDIBitmap_RLE8 ()
 
void Test_CreateDIBitmap_CBM_CREATDIB (void)
 
 START_TEST (CreateDIBitmap)
 

Macro Definition Documentation

◆ CBM_CREATDIB

#define CBM_CREATDIB   2

Definition at line 14 of file CreateDIBitmap.c.

◆ INVALID_POINTER

#define INVALID_POINTER   ((PVOID)(ULONG_PTR)0xC0000000C0000000ULL)

Definition at line 16 of file CreateDIBitmap.c.

Function Documentation

◆ GetExpected()

BOOL GetExpected ( DWORD pdwError,
HDC  hdc,
const BITMAPINFOHEADER lpbmih,
DWORD  fdwInit,
const VOID lpbInit,
const BITMAPINFO lpbmi,
UINT  fuUsage 
)

Definition at line 19 of file CreateDIBitmap.c.

27 {
28  if (fuUsage > 2)
29  {
30  *pdwError = ERROR_INVALID_PARAMETER;
31  return FALSE;
32  }
33 
34  if (fuUsage != DIB_RGB_COLORS)
35  {
36  if (hdc == (HDC)-1)
37  {
38  return FALSE;
39  }
40  }
41 
42  if (fdwInit & CBM_INIT)
43  {
44  if (!lpbmih)
45  {
46  if (!lpbInit || (lpbInit == INVALID_POINTER)) return FALSE;
47  }
48  else
49  {
50  if (lpbInit)
51  {
52  if (lpbInit == INVALID_POINTER) return FALSE;
53  if (!lpbmi || (lpbmi == INVALID_POINTER)) return FALSE;
54  if (lpbmi->bmiHeader.biSize == 0) return FALSE;
55  if (fuUsage == 2) return FALSE;
56  }
57  }
58  }
59 
60 
61  if (fdwInit & CBM_CREATDIB)
62  {
63  if (fuUsage == 2) return FALSE;
64  if ((fuUsage == DIB_PAL_COLORS) && !hdc)
65  {
66  return FALSE;
67  }
68 
69  if (fdwInit & CBM_INIT)
70  {
71  if (!lpbInit || (lpbInit == INVALID_POINTER)) return FALSE;
72  }
73 
74  if ((!lpbmi) || (lpbmi == INVALID_POINTER) || (lpbmi->bmiHeader.biSize == 0))
75  {
76  return FALSE;
77  }
78  }
79  else
80  {
81 
82  if ((lpbmih == NULL) ||
83  (lpbmih == INVALID_POINTER) ||
84  (lpbmih->biSize == 0))
85  {
86  return FALSE;
87  }
88 
89  if (hdc == (HDC)-1)
90  {
91  *pdwError = ERROR_INVALID_PARAMETER;
92  return FALSE;
93  }
94 
95 
96  if (lpbmi == INVALID_POINTER) return FALSE;
97  }
98 
99  return TRUE;
100 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1475
#define DIB_PAL_COLORS
Definition: wingdi.h:365
#define TRUE
Definition: types.h:120
static HDC
Definition: imagelist.c:92
#define CBM_INIT
Definition: wingdi.h:364
#define FALSE
Definition: types.h:117
HDC hdc
Definition: main.c:9
#define NULL
Definition: types.h:112
#define CBM_CREATDIB
#define INVALID_POINTER
#define DIB_RGB_COLORS
Definition: wingdi.h:366

Referenced by Test_CreateDIBitmap_Params().

◆ START_TEST()

START_TEST ( CreateDIBitmap  )

Definition at line 535 of file CreateDIBitmap.c.

536 {
537  InitStuff();
543 }
void Test_CreateDIBitmap_Params(void)
void Test_CreateDIBitmap1(void)
BOOL InitStuff(void)
Definition: init.c:95
void Test_CreateDIBitmap_RLE8()
void Test_CreateDIBitmap_DIB_PAL_COLORS(void)
void Test_CreateDIBitmap_CBM_CREATDIB(void)

◆ Test_CreateDIBitmap1()

void Test_CreateDIBitmap1 ( void  )

Definition at line 307 of file CreateDIBitmap.c.

308 {
309  BITMAPINFO bmi;
310  HBITMAP hbmp;
311  BITMAP bitmap;
312  ULONG bits[128] = {0};
313  BYTE rlebits[] = {2, 0, 0, 0, 2, 1, 0, 1};
314  HDC hdc;
315  int ret;
316 
317  hdc = GetDC(0);
318 
319  bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
320  bmi.bmiHeader.biWidth = 3;
321  bmi.bmiHeader.biHeight = 2;
322  bmi.bmiHeader.biPlanes = 1;
323  bmi.bmiHeader.biBitCount = 16;
325  bmi.bmiHeader.biSizeImage = 0;
326  bmi.bmiHeader.biXPelsPerMeter = 1;
327  bmi.bmiHeader.biYPelsPerMeter = 1;
328  bmi.bmiHeader.biClrUsed = 0;
329  bmi.bmiHeader.biClrImportant = 0;
330 
332  ok(hbmp != 0, "failed\n");
333 
334  ret = GetObject(hbmp, sizeof(bitmap), &bitmap);
335  ok(ret != 0, "failed\n");
336  ok(bitmap.bmType == 0, "\n");
337  ok(bitmap.bmWidth == 3, "\n");
338  ok(bitmap.bmHeight == 2, "\n");
339  ok_int(bitmap.bmWidthBytes, ((bitmap.bmWidth * bitmap.bmBitsPixel + 15) & ~15) / 8);
340  ok(bitmap.bmPlanes == 1, "\n");
341  ok(bitmap.bmBitsPixel == GetDeviceCaps(hdc, BITSPIXEL), "\n");
342  ok(bitmap.bmBits == 0, "\n");
343 
344  SetLastError(0);
346  bmi.bmiHeader.biBitCount = 8;
347  bmi.bmiHeader.biSizeImage = 8;
348  bmi.bmiHeader.biClrUsed = 1;
349  hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, rlebits, &bmi, DIB_PAL_COLORS);
350  ok(hbmp != 0, "failed\n");
351  ok(GetLastError() == 0, "GetLastError() == %ld\n", GetLastError());
352 
353  ret = GetObject(hbmp, sizeof(bitmap), &bitmap);
354  ok(ret != 0, "failed\n");
355  ok(bitmap.bmType == 0, "\n");
356  ok(bitmap.bmWidth == 3, "\n");
357  ok(bitmap.bmHeight == 2, "\n");
358  ok_int(bitmap.bmWidthBytes, ((bitmap.bmWidth * bitmap.bmBitsPixel + 15) & ~15) / 8);
359  ok(bitmap.bmPlanes == 1, "\n");
360  ok(bitmap.bmBitsPixel == GetDeviceCaps(hdc, BITSPIXEL), "\n");
361  ok(bitmap.bmBits == 0, "\n");
362 
363 
364 }
#define BITSPIXEL
Definition: wingdi.h:719
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1475
DWORD biClrImportant
Definition: amvideo.idl:40
#define DIB_PAL_COLORS
Definition: wingdi.h:365
HDC WINAPI GetDC(_In_opt_ HWND)
LONG biXPelsPerMeter
Definition: amvideo.idl:37
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
static HDC
Definition: imagelist.c:92
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
LONG biYPelsPerMeter
Definition: amvideo.idl:38
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
#define CBM_INIT
Definition: wingdi.h:364
DWORD biCompression
Definition: amvideo.idl:35
#define ok_int(expression, result)
Definition: atltest.h:134
HBITMAP hbmp
Definition: uimain.c:88
DWORD biSizeImage
Definition: amvideo.idl:36
#define SetLastError(x)
Definition: compat.h:611
#define GetObject
Definition: wingdi.h:4467
HBITMAP WINAPI CreateDIBitmap(_In_ HDC hdc, _In_opt_ const BITMAPINFOHEADER *pbmih, _In_ DWORD fdwInit, _In_opt_ const VOID *pvInit, _In_opt_ const BITMAPINFO *pbmi, _In_ UINT uUsage)
int ret
HDC hdc
Definition: main.c:9
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
unsigned char BYTE
Definition: xxhash.c:193
#define ok(value,...)
Definition: atltest.h:57
Definition: bl.h:1331
unsigned int ULONG
Definition: retypes.h:1
static HBITMAP bitmap
Definition: clipboard.c:1344
static HBITMAP
Definition: button.c:44
#define DIB_RGB_COLORS
Definition: wingdi.h:366
#define BI_RLE8
Definition: wingdi.h:35
#define BI_RGB
Definition: precomp.h:47

Referenced by START_TEST().

◆ Test_CreateDIBitmap_CBM_CREATDIB()

void Test_CreateDIBitmap_CBM_CREATDIB ( void  )

Definition at line 419 of file CreateDIBitmap.c.

420 {
422  HDC hdc;
423  BITMAPINFO bmi =
424  {{sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RGB, 0, 1, 1, 1, 0}, {{0,1,2,3}}};
425  BYTE ajBits[10] = {0,1,2,3,4,5,6,7,8,9};
426  BITMAP bitmap;
427  struct
428  {
429  BITMAPINFOHEADER bmiHeader;
430  WORD wColors[4];
431  } bmiRLE =
432  {
433  {sizeof(BITMAPINFOHEADER), 8, 2, 1, 8, BI_RLE8, 20, 1, 1, 4, 0},
434  {0, 1, 2, 7}
435  };
436  BYTE ajBitsRLE[] = {4,0, 0,2,0,1,0,2,3,1, 2,1, 2,2, 1,3,1,0,1,2, };
437 
438  hdc = CreateCompatibleDC(0);
439  if (hdc == NULL)
440  {
441  ok(0, "CreateCompatibleDC failed. Skipping tests!\n");
442  return;
443  }
444 
445  SetLastError(0xbadbad00);
447  ok(hbmp == 0, "CreateDIBitmap should fail.\n");
448  ok_int(GetLastError(), 0xbadbad00);
449 
451  ok(hbmp != 0, "CreateDIBitmap failed.\n");
452 
453  ok_long(GetObject(hbmp, sizeof(DIBSECTION), &bitmap), sizeof(BITMAP));
454  ok_int(bitmap.bmType, 0);
455  ok_int(bitmap.bmWidth, 4);
456  ok_int(bitmap.bmHeight, 4);
457  ok_int(bitmap.bmWidthBytes, 4);
458  ok_int(bitmap.bmPlanes, 1);
459  ok_int(bitmap.bmBitsPixel, 8);
460  ok_ptr(bitmap.bmBits, 0);
461 
463  ok(hbmpOld != NULL, "Couldn't select the bitmap.\n");
464 
465  /* Copy it on a dib section */
466  memset(gpDIB32, 0x77, sizeof(*gpDIB32));
467  ok_long(BitBlt(ghdcDIB32, 0, 0, 4, 4, hdc, 0, 0, SRCCOPY), 1);
468  ok_long((*gpDIB32)[0][0], 0x20100);
469  ok_long((*gpDIB32)[0][1], 0x20100);
470  ok_long((*gpDIB32)[0][2], 0x20100);
471  ok_long((*gpDIB32)[0][3], 0x20100);
472 
475 
477  ok(hbmp != 0, "CreateDIBitmap failed.\n");
478 
479  ok_long(GetObject(hbmp, sizeof(DIBSECTION), &bitmap), sizeof(BITMAP));
480  ok_int(bitmap.bmType, 0);
481  ok_int(bitmap.bmWidth, 4);
482  ok_int(bitmap.bmHeight, 4);
483  ok_int(bitmap.bmWidthBytes, 4);
484  ok_int(bitmap.bmPlanes, 1);
485  ok_int(bitmap.bmBitsPixel, 8);
486  ok_ptr(bitmap.bmBits, 0);
487 
488  /* Even with CBM_INIT and lpbmih != 0, pbmi is used for the dimensions */
489  hbmp = CreateDIBitmap(hdc, &bmiRLE.bmiHeader, CBM_CREATDIB | CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
490  ok(hbmp != 0, "CreateDIBitmap failed.\n");
491 
492  ok_long(GetObject(hbmp, sizeof(DIBSECTION), &bitmap), sizeof(BITMAP));
493  ok_int(bitmap.bmType, 0);
494  ok_int(bitmap.bmWidth, 4);
495  ok_int(bitmap.bmHeight, 4);
496  ok_int(bitmap.bmWidthBytes, 4);
497  ok_int(bitmap.bmPlanes, 1);
498  ok_int(bitmap.bmBitsPixel, 8);
499  ok_ptr(bitmap.bmBits, 0);
500 
502  ok(hbmpOld != NULL, "Couldn't select the bitmap.\n");
503 
504  /* Copy it on a dib section */
505  memset(gpDIB32, 0x77, sizeof(*gpDIB32));
506  ok_long(BitBlt(ghdcDIB32, 0, 0, 4, 4, hdc, 0, 0, SRCCOPY), 1);
507 #if 0 // FIXME: fails on WHS testbot
508  ok_long((*gpDIB32)[0][0], 0);
509  ok_long((*gpDIB32)[0][1], 0);
510  ok_long((*gpDIB32)[0][2], 0);
511  ok_long((*gpDIB32)[0][3], 0);
512 #endif
513 
516 
517  hbmp = CreateDIBitmap(hdc, NULL, CBM_CREATDIB, ajBitsRLE, (PVOID)&bmiRLE, DIB_PAL_COLORS);
518  ok(hbmp == 0, "CreateDIBitmap should fail.\n");
519  hbmp = CreateDIBitmap(hdc, NULL, CBM_INIT | CBM_CREATDIB, ajBitsRLE, (PVOID)&bmiRLE, DIB_PAL_COLORS);
520  ok(hbmp == 0, "CreateDIBitmap should fail.\n");
521 
522  /* Check if a 0 pixel bitmap results in the DEFAULT_BITMAP being returned */
523  bmi.bmiHeader.biWidth = 0;
524  bmi.bmiHeader.biHeight = 4;
525  hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_CREATDIB, ajBits, &bmi, DIB_PAL_COLORS);
526  ok(hbmp == GetStockObject(21), "CreateDIBitmap didn't return the default bitmap.\n");
527  bmi.bmiHeader.biWidth = 23;
528  bmi.bmiHeader.biHeight = 0;
529  hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_CREATDIB, ajBits, &bmi, DIB_PAL_COLORS);
530  ok(hbmp == GetStockObject(21), "CreateDIBitmap didn't return the default bitmap.\n");
531 
532  DeleteDC(hdc);
533 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1475
#define DIB_PAL_COLORS
Definition: wingdi.h:365
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1499
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define ok_ptr(expression, result)
Definition: atltest.h:108
#define ok_long(expression, result)
Definition: atltest.h:133
ULONG(* gpDIB32)[8][8]
Definition: init.c:10
#define CBM_INIT
Definition: wingdi.h:364
HANDLE hbmpOld
Definition: magnifier.c:54
#define ok_int(expression, result)
Definition: atltest.h:134
HBITMAP hbmp
Definition: uimain.c:88
unsigned short WORD
Definition: ntddk_ex.h:93
#define SetLastError(x)
Definition: compat.h:611
#define GetObject
Definition: wingdi.h:4467
HBITMAP WINAPI CreateDIBitmap(_In_ HDC hdc, _In_opt_ const BITMAPINFOHEADER *pbmih, _In_ DWORD fdwInit, _In_opt_ const VOID *pvInit, _In_opt_ const BITMAPINFO *pbmi, _In_ UINT uUsage)
HDC hdc
Definition: main.c:9
unsigned char BYTE
Definition: xxhash.c:193
BOOL WINAPI DeleteDC(_In_ HDC)
#define ok(value,...)
Definition: atltest.h:57
Definition: bl.h:1331
#define NULL
Definition: types.h:112
#define CBM_CREATDIB
static HBITMAP bitmap
Definition: clipboard.c:1344
static HBITMAP
Definition: button.c:44
HDC ghdcDIB32
Definition: init.c:8
#define DIB_RGB_COLORS
Definition: wingdi.h:366
#define BI_RLE8
Definition: wingdi.h:35
#define memset(x, y, z)
Definition: compat.h:39
#define BI_RGB
Definition: precomp.h:47
#define SRCCOPY
Definition: wingdi.h:332
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49

Referenced by START_TEST().

◆ Test_CreateDIBitmap_DIB_PAL_COLORS()

void Test_CreateDIBitmap_DIB_PAL_COLORS ( void  )

Definition at line 258 of file CreateDIBitmap.c.

259 {
260  struct
261  {
262  BITMAPINFOHEADER bmiHeader;
263  WORD bmiColors[8];
264  } bmibuffer;
265  BITMAPINFO *pbmi = (PVOID)&bmibuffer;
266  HBITMAP hbmp;
267  ULONG bits[16] = {0};
268  HDC hdc;
269  HPALETTE hpalOld;
270  USHORT i;
271 
272  hdc = CreateCompatibleDC(0);
273  ok(hdc != 0, "failed\n");
274 
275  /* Select a palette */
276  hpalOld = SelectPalette(hdc, ghpal, FALSE);
277  ok(hpalOld != NULL, "error=%ld\n", GetLastError());
278 
279  /* Initialize a BITMAPINFO */
281  pbmi->bmiHeader.biWidth = 2;
282  pbmi->bmiHeader.biHeight = -2;
283  pbmi->bmiHeader.biPlanes = 1;
289  pbmi->bmiHeader.biClrUsed = 8;
291 
292  for( i = 0; i < 8; i++ )
293  {
294  bmibuffer.bmiColors[i] = i;
295  }
296 
297  /* Create the bitmap */
299  ok(hbmp != 0, "failed\n");
300 
302 
303 
304 }
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1475
DWORD biClrImportant
Definition: amvideo.idl:40
#define DIB_PAL_COLORS
Definition: wingdi.h:365
HPALETTE ghpal
Definition: init.c:11
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
Definition: ntgdi.h:2780
LONG biXPelsPerMeter
Definition: amvideo.idl:37
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1499
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
LONG biYPelsPerMeter
Definition: amvideo.idl:38
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
#define CBM_INIT
Definition: wingdi.h:364
#define FALSE
Definition: types.h:117
DWORD biCompression
Definition: amvideo.idl:35
HPALETTE WINAPI SelectPalette(_In_ HDC, _In_ HPALETTE, _In_ BOOL)
void * PVOID
Definition: retypes.h:9
HBITMAP hbmp
unsigned short WORD
Definition: ntddk_ex.h:93
DWORD biSizeImage
Definition: amvideo.idl:36
HBITMAP WINAPI CreateDIBitmap(_In_ HDC hdc, _In_opt_ const BITMAPINFOHEADER *pbmih, _In_ DWORD fdwInit, _In_opt_ const VOID *pvInit, _In_opt_ const BITMAPINFO *pbmi, _In_ UINT uUsage)
HDC hdc
Definition: main.c:9
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned short USHORT
Definition: pedump.c:61
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
unsigned int ULONG
Definition: retypes.h:1
static HBITMAP
Definition: button.c:44
#define BI_RGB
Definition: precomp.h:47

Referenced by START_TEST().

◆ Test_CreateDIBitmap_Params()

void Test_CreateDIBitmap_Params ( void  )

Definition at line 104 of file CreateDIBitmap.c.

105 {
106  HBITMAP hbmp;
107  HDC hdc;
108  BITMAPINFO bmi =
109  {{sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RGB, 0, 1, 1, 1, 0}, {{0,0,0,0}}};
110  BITMAPINFO bmiBroken =
111  {{0, -2, -4, 55, 42, 21, 0, 1, 1, 1, 0}, {{0,0,0,0}}};
112  BYTE ajBits[10];
113 
114  hdc = CreateCompatibleDC(0);
115  ok(hdc != 0, "failed\n");
116 
117  hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
118  ok(hbmp != 0, "\n");
119 
121  ok(hbmp != 0, "\n");
122 
124  ok(hbmp != 0, "\n");
125 
127  ok(hbmp != 0, "\n");
128 
130  ok(hbmp != 0, "\n");
131 
132  hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, &bmiBroken, DIB_PAL_COLORS);
133  ok(hbmp != 0, "\n");
134 
135  hbmp = CreateDIBitmap(NULL, NULL, 2, NULL, &bmi, 0);
136  ok(hbmp != 0, "\n");
137 
138  SetLastError(0xbadbad00);
139  hbmp = CreateDIBitmap(hdc, NULL, CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
140  ok(hbmp == 0, "\n");
142 
143  SetLastError(0xbadbad00);
145  ok(hbmp == 0, "\n");
147 
148  SetLastError(0xbadbad00);
149  hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, ajBits, &bmi, 2);
150  ok(hbmp == 0, "\n");
152 
153  SetLastError(0xbadbad00);
155  ok(hbmp == 0, "\n");
156  ok_err(0xbadbad00);
157 
158  SetLastError(0xbadbad00);
160  ok(hbmp == 0, "\n");
161  ok_err(0xbadbad00);
162 
163  SetLastError(0xbadbad00);
164  _SEH2_TRY
165  {
167  }
169  {
170  hbmp = (HBITMAP)-1;
171  }
172  _SEH2_END;
173  ok(hbmp == (HBITMAP)-1, "\n");
174  ok_err(0xbadbad00);
175 
176  SetLastError(0xbadbad00);
178  ok(hbmp == 0, "\n");
180 
181  SetLastError(0xbadbad00);
183  ok(hbmp == 0, "\n");
184  ok_err(0xbadbad00);
185 
186  SetLastError(0xbadbad00);
187  hbmp = CreateDIBitmap(hdc, &bmiBroken.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
188  ok(hbmp == 0, "\n");
190 
191  if (1)
192  {
193  ULONG i1, i2, i3, i4, i5, i6;
194  HDC ahdc[3] = {0, hdc, (HDC)-1};
195  PBITMAPINFOHEADER apbih[4] = {NULL, &bmi.bmiHeader, &bmiBroken.bmiHeader, INVALID_POINTER};
196  ULONG afInitf[12] = {0, 1, CBM_CREATDIB, 3, CBM_INIT, 5, 6, 7, 8, 0x10, 0x20};
197  PVOID apvBits[3] = {NULL, ajBits, INVALID_POINTER};
198  PBITMAPINFO apbmi[4] = {NULL, &bmi, &bmiBroken, INVALID_POINTER};
199  ULONG aiUsage[5] = {0, 1, 2, 3, 23};
200  DWORD dwExpError;
201  BOOL bExpSuccess;
202 
203  for (i1 = 0; i1 < ARRAYSIZE(ahdc); i1++)
204  {
205  for (i2 = 0; i2 < ARRAYSIZE(apbih); i2++)
206  {
207  for (i3 = 0; i3 < ARRAYSIZE(afInitf); i3++)
208  {
209  for (i4 = 0; i4 < ARRAYSIZE(apvBits); i4++)
210  {
211  for (i5 = 0; i5 < ARRAYSIZE(apbmi); i5++)
212  {
213  for (i6 = 0; i6 < ARRAYSIZE(aiUsage); i6++)
214  {
215  SetLastError(0xbadbad00);
216  dwExpError = 0xbadbad00;
217 
218  bExpSuccess = GetExpected(&dwExpError, ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
219 
220  _SEH2_TRY
221  {
222  hbmp = CreateDIBitmap(ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
223  }
225  {
226  hbmp = (HBITMAP)0;
227  }
228  _SEH2_END;
229 
230  if (bExpSuccess)
231  {
232  ok(hbmp != 0, "Expected success for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
233  i1, i2, i3, i4, i5, i6,
234  ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
235  }
236  else
237  {
238  ok(hbmp == 0, "Expected failure for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
239  i1, i2, i3, i4, i5, i6,
240  ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
241  }
242 
243  // ok(GetLastError() == dwExpError, "Expected error %ld got %ld for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
244  // dwExpError, GetLastError(), i1, i2, i3, i4, i5, i6,
245  // ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
246  }
247  }
248  }
249  }
250  }
251  }
252  }
253 
254 
255 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1475
#define DIB_PAL_COLORS
Definition: wingdi.h:365
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
static HDC
Definition: imagelist.c:92
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
_SEH2_TRY
Definition: create.c:4226
#define CBM_INIT
Definition: wingdi.h:364
unsigned int BOOL
Definition: ntddk_ex.h:94
HBITMAP hbmp
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:611
HBITMAP WINAPI CreateDIBitmap(_In_ HDC hdc, _In_opt_ const BITMAPINFOHEADER *pbmih, _In_ DWORD fdwInit, _In_opt_ const VOID *pvInit, _In_opt_ const BITMAPINFO *pbmi, _In_ UINT uUsage)
HDC hdc
Definition: main.c:9
#define ok_err(error)
Definition: atltest.h:124
unsigned char BYTE
Definition: xxhash.c:193
_SEH2_END
Definition: create.c:4400
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
#define CBM_CREATDIB
unsigned int ULONG
Definition: retypes.h:1
#define INVALID_POINTER
static HBITMAP
Definition: button.c:44
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:40
BOOL GetExpected(DWORD *pdwError, HDC hdc, const BITMAPINFOHEADER *lpbmih, DWORD fdwInit, const VOID *lpbInit, const BITMAPINFO *lpbmi, UINT fuUsage)
#define BI_RGB
Definition: precomp.h:47

Referenced by START_TEST().

◆ Test_CreateDIBitmap_RLE8()

void Test_CreateDIBitmap_RLE8 ( )

Definition at line 366 of file CreateDIBitmap.c.

367 {
368  struct
369  {
370  BITMAPINFOHEADER bmiHeader;
371  WORD wColors[4];
372  BYTE ajBuffer[20];
373  } PackedDIB =
374  {
375  {sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RLE8, 20, 1, 1, 4, 0},
376  {0, 1, 2, 7},
377  {4,0, 0,2,0,1,0,2,3,1, 2,1, 2,2, 1,3,1,0,1,2, },
378  };
379  HDC hdc;
380  HBITMAP hbmp;
381 
382  hdc = CreateCompatibleDC(0);
383 
384  SetLastError(0xbadbad00);
385  hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
386  ok(hbmp != 0, "CreateDIBitmap failed.\n");
387  ok_err(0xbadbad00);
389 
390  PackedDIB.bmiHeader.biSizeImage = 2;
391  hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
392  ok(hbmp != 0, "CreateDIBitmap failed.\n");
393  ok_err(0xbadbad00);
395 
396  PackedDIB.bmiHeader.biSizeImage = 1;
397  hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
398  ok(hbmp != 0, "CreateDIBitmap failed.\n");
399  ok_err(0xbadbad00);
401 
402  PackedDIB.bmiHeader.biSizeImage = 0;
403  hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
404  ok(hbmp == 0, "CreateDIBitmap succeeded, expected failure\n");
405  ok_err(0xbadbad00);
406 
407  /* Test a line that is too long */
408  PackedDIB.bmiHeader.biSizeImage = 20;
409  PackedDIB.ajBuffer[0] = 17;
410  hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
411  ok(hbmp != 0, "CreateDIBitmap failed\n");
412  ok_err(0xbadbad00);
414 
415 
416 }
#define DIB_PAL_COLORS
Definition: wingdi.h:365
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
static HDC
Definition: imagelist.c:92
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define CBM_INIT
Definition: wingdi.h:364
HBITMAP hbmp
unsigned short WORD
Definition: ntddk_ex.h:93
#define SetLastError(x)
Definition: compat.h:611
HBITMAP WINAPI CreateDIBitmap(_In_ HDC hdc, _In_opt_ const BITMAPINFOHEADER *pbmih, _In_ DWORD fdwInit, _In_opt_ const VOID *pvInit, _In_opt_ const BITMAPINFO *pbmi, _In_ UINT uUsage)
HDC hdc
Definition: main.c:9
#define ok_err(error)
Definition: atltest.h:124
unsigned char BYTE
Definition: xxhash.c:193
#define ok(value,...)
Definition: atltest.h:57
static HBITMAP
Definition: button.c:44
#define BI_RLE8
Definition: wingdi.h:35

Referenced by START_TEST().