2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for MaskBlt
5 * PROGRAMMERS: Timo Kreuzer
12 void Test_MaskBlt_1bpp()
17 BITMAPINFOHEADER bmiHeader
;
19 } bmiData
= {{sizeof(BITMAPINFOHEADER
), 8, 1, 1, 1, BI_RGB
, 0, 10, 10, 2,0}, {0, 0xFFFFFF}};
20 PBITMAPINFO pbmi
= (PBITMAPINFO
)&bmiData
;
21 HBITMAP hbmDst
, hbmSrc
, hbmMsk
;
22 PUCHAR pjBitsDst
, pjBitsSrc
, pjBitsMsk
;
25 /* Create a dest dc and bitmap */
26 hdcDst
= CreateCompatibleDC(NULL
);
27 hbmDst
= CreateDIBSection(hdcDst
, pbmi
, DIB_RGB_COLORS
, (PVOID
*)&pjBitsDst
, NULL
, 0);
28 SelectObject(hdcDst
, hbmDst
);
30 /* Create a source dc and bitmap */
31 hdcSrc
= CreateCompatibleDC(NULL
);
32 hbmSrc
= CreateDIBSection(hdcSrc
, pbmi
, DIB_RGB_COLORS
, (PVOID
*)&pjBitsSrc
, NULL
, 0);
33 SelectObject(hdcSrc
, hbmSrc
);
35 /* Create a 1 bpp mask bitmap */
36 hbmMsk
= CreateDIBSection(hdcDst
, pbmi
, DIB_RGB_COLORS
, (PVOID
*)&pjBitsMsk
, NULL
, 0);
38 /* Do the masking (SRCCOPY / NOOP) */
42 ret
= MaskBlt(hdcDst
, 0, 0, 8, 1, hdcSrc
, 0, 0, hbmMsk
, 0, 0, MAKEROP4(SRCCOPY
, 0xAA0000));
43 ok(ret
== 1, "MaskBlt failed (%d)\n", ret
);
44 ok (pjBitsDst
[0] == 0xCA, "pjBitsDst[0] == 0x%x\n", pjBitsDst
[0]);
49 ret
= MaskBlt(hdcDst
, 0, 0, 8, 1, hdcSrc
, 0, 0, hbmMsk
, 0, 0, MAKEROP4(SRCCOPY
, 0xAA0000));
50 ok(ret
== 1, "MaskBlt failed (%d)\n", ret
);
51 ok (pjBitsDst
[0] == 0xF0, "pjBitsDst[0] == 0x%x\n", pjBitsDst
[0]);
53 /* Do the masking (NOTSRCERASE / SRCINVERT) */
57 ret
= MaskBlt(hdcDst
, 0, 0, 8, 1, hdcSrc
, 0, 0, hbmMsk
, 0, 0, MAKEROP4(NOTSRCERASE
, SRCINVERT
)); // 22
58 ok(ret
== 1, "MaskBlt failed (%d)\n", ret
);
59 ok (pjBitsDst
[0] == 0x16, "pjBitsDst[0] == 0x%x\n", pjBitsDst
[0]);
61 /* Do the masking (MERGEPAINT / DSxn) */
65 ret
= MaskBlt(hdcDst
, 0, 0, 8, 1, hdcSrc
, 0, 0, hbmMsk
, 0, 0, MAKEROP4(MERGEPAINT
, 0x990000));
66 ok(ret
== 1, "MaskBlt failed (%d)\n", ret
);
67 ok (pjBitsDst
[0] == 0xE3, "pjBitsDst[0] == 0x%x\n", pjBitsDst
[0]);
71 void Test_MaskBlt_16bpp()
74 BITMAPINFO bmi1
= {{sizeof(BITMAPINFOHEADER
), 8, 1, 1, 1, BI_RGB
, 0, 10, 10, 0,0}};
75 BITMAPINFO bmi32
= {{sizeof(BITMAPINFOHEADER
), 8, 1, 1, 16, BI_RGB
, 0, 10, 10, 0,0}};
76 HBITMAP hbmDst
, hbmSrc
, hbmMsk
;
78 PUSHORT pusBitsDst
, pusBitsSrc
;
81 /* Create a dest dc and bitmap */
82 hdcDst
= CreateCompatibleDC(NULL
);
83 hbmDst
= CreateDIBSection(hdcDst
, &bmi32
, DIB_RGB_COLORS
, (PVOID
*)&pusBitsDst
, NULL
, 0);
84 SelectObject(hdcDst
, hbmDst
);
86 /* Create a source dc and bitmap */
87 hdcSrc
= CreateCompatibleDC(NULL
);
88 hbmSrc
= CreateDIBSection(hdcSrc
, &bmi32
, DIB_RGB_COLORS
, (PVOID
*)&pusBitsSrc
, NULL
, 0);
89 SelectObject(hdcSrc
, hbmSrc
);
90 ok(hdcSrc
&& hbmSrc
, "\n");
92 /* Create a 1 bpp mask bitmap */
93 hbmMsk
= CreateDIBSection(hdcDst
, &bmi1
, DIB_RGB_COLORS
, (PVOID
*)&pjBitsMsk
, NULL
, 0);
94 ok(hbmMsk
!= 0, "CreateDIBSection failed\n");
97 pusBitsDst
[0] = 0x1234;
98 pusBitsDst
[1] = 0x5678;
99 pusBitsSrc
[0] = 0x4321;
100 pusBitsSrc
[1] = 0x8765;
102 ret
= MaskBlt(hdcDst
, 0, 0, 8, 1, hdcSrc
, 0, 0, hbmMsk
, 0, 0, MAKEROP4(SRCCOPY
, 0xAA0000));
103 ok(ret
== 1, "MaskBlt failed (%d)\n", ret
);
104 ok (pusBitsDst
[0] == 0x4321, "pusBitsDst[0] == 0x%x\n", pusBitsDst
[0]);
105 ok (pusBitsDst
[1] == 0x5678, "pusBitsDst[0] == 0x%x\n", pusBitsDst
[1]);
107 pusBitsDst
[0] = 0x1234;
108 pusBitsDst
[1] = 0x5678;
109 ret
= MaskBlt(hdcDst
, 0, 0, 8, 1, hdcSrc
, 0, 0, hbmMsk
, 0, 0, MAKEROP4(SRCPAINT
, MERGEPAINT
));
110 ok(ret
== 1, "MaskBlt failed (%d)\n", ret
);
111 ok (pusBitsDst
[0] == 0x5335, "pusBitsDst[0] == 0x%x\n", pusBitsDst
[0]);
112 ok (pusBitsDst
[1] == 0x7efa, "pusBitsDst[0] == 0x%x\n", pusBitsDst
[1]);
115 void Test_MaskBlt_32bpp()
118 BITMAPINFO bmi1
= {{sizeof(BITMAPINFOHEADER
), 8, 1, 1, 1, BI_RGB
, 0, 10, 10, 0,0}};
119 BITMAPINFO bmi32
= {{sizeof(BITMAPINFOHEADER
), 8, 1, 1, 32, BI_RGB
, 0, 10, 10, 0,0}};
120 HBITMAP hbmDst
, hbmSrc
, hbmMsk
;
122 PULONG pulBitsDst
, pulBitsSrc
;
125 /* Create a dest dc and bitmap */
126 hdcDst
= CreateCompatibleDC(NULL
);
127 hbmDst
= CreateDIBSection(hdcDst
, &bmi32
, DIB_RGB_COLORS
, (PVOID
*)&pulBitsDst
, NULL
, 0);
128 SelectObject(hdcDst
, hbmDst
);
130 /* Create a source dc and bitmap */
131 hdcSrc
= CreateCompatibleDC(NULL
);
132 hbmSrc
= CreateDIBSection(hdcSrc
, &bmi32
, DIB_RGB_COLORS
, (PVOID
*)&pulBitsSrc
, NULL
, 0);
133 SelectObject(hdcSrc
, hbmSrc
);
134 ok(hdcSrc
&& hbmSrc
, "\n");
136 /* Create a 1 bpp mask bitmap */
137 hbmMsk
= CreateDIBSection(hdcDst
, &bmi1
, DIB_RGB_COLORS
, (PVOID
*)&pjBitsMsk
, NULL
, 0);
138 ok(hbmMsk
!= 0, "CreateDIBSection failed\n");
141 pulBitsDst
[0] = 0x12345678;
142 pulBitsDst
[1] = 0x9abcdef0;
143 pulBitsSrc
[0] = 0x87684321;
144 pulBitsSrc
[1] = 0x0fedcba9;
146 ret
= MaskBlt(hdcDst
, 0, 0, 8, 1, hdcSrc
, 0, 0, hbmMsk
, 0, 0, MAKEROP4(SRCCOPY
, 0xAA0000));
147 ok(ret
== 1, "MaskBlt failed (%d)\n", ret
);
148 ok (pulBitsDst
[0] == 0x87684321, "pulBitsDst[0] == 0x%lx\n", pulBitsDst
[0]);
149 ok (pulBitsDst
[1] == 0x9abcdef0, "pulBitsDst[0] == 0x%lx\n", pulBitsDst
[1]);
151 pulBitsDst
[0] = 0x12345678;
152 pulBitsDst
[1] = 0x9abcdef0;
153 ret
= MaskBlt(hdcDst
, 0, 0, 8, 1, hdcSrc
, 0, 0, hbmMsk
, 0, 0, MAKEROP4(SRCPAINT
, MERGEPAINT
));
154 ok(ret
== 1, "MaskBlt failed (%d)\n", ret
);
155 ok (pulBitsDst
[0] == 0x977c5779, "pulBitsDst[0] == 0x%lx\n", pulBitsDst
[0]);
156 ok (pulBitsDst
[1] == 0xfabefef6, "pulBitsDst[0] == 0x%lx\n", pulBitsDst
[1]);
162 switch (GetDeviceCaps(GetDC(NULL
), BITSPIXEL
))
164 case 16: Test_MaskBlt_16bpp(); break;
165 case 32: Test_MaskBlt_32bpp(); break;