2 * Copyright 2012, 2016 Dmitry Timoshkov
3 * Copyright 2012 Hans Leidekker for CodeWeavers
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
27 #include "wine/test.h"
30 /* 1x1 pixel PNG image */
31 static const char png_no_color_profile
[] = {
32 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
33 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
34 0x08, 0x02, 0x00, 0x00, 0x00, 0x90, 0x77, 0x53, 0xde, 0x00, 0x00, 0x00,
35 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
36 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49,
37 0x4d, 0x45, 0x07, 0xdc, 0x0b, 0x0e, 0x0e, 0x22, 0x17, 0x10, 0xd8, 0xde,
38 0x3b, 0x00, 0x00, 0x00, 0x0c, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63,
39 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x05, 0xfe, 0x02, 0xfe, 0xdc, 0xcc, 0x59,
40 0xe7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
44 /* 1x1 pixel PNG image with embedded sRGB profile */
45 static const char png_color_profile
[] = {
46 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
47 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
48 0x08, 0x02, 0x00, 0x00, 0x00, 0x90, 0x77, 0x53, 0xde, 0x00, 0x00, 0x0a,
49 0x43, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f,
50 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d, 0x53, 0x77, 0x58,
51 0x93, 0xf7, 0x16, 0x3e, 0xdf, 0xf7, 0x65, 0x0f, 0x56, 0x42, 0xd8, 0xf0,
52 0xb1, 0x97, 0x6c, 0x81, 0x00, 0x22, 0x23, 0xac, 0x08, 0xc8, 0x10, 0x59,
53 0xa2, 0x10, 0x92, 0x00, 0x61, 0x84, 0x10, 0x12, 0x40, 0xc5, 0x85, 0x88,
54 0x0a, 0x56, 0x14, 0x15, 0x11, 0x9c, 0x48, 0x55, 0xc4, 0x82, 0xd5, 0x0a,
55 0x48, 0x9d, 0x88, 0xe2, 0xa0, 0x28, 0xb8, 0x67, 0x41, 0x8a, 0x88, 0x5a,
56 0x8b, 0x55, 0x5c, 0x38, 0xee, 0x1f, 0xdc, 0xa7, 0xb5, 0x7d, 0x7a, 0xef,
57 0xed, 0xed, 0xfb, 0xd7, 0xfb, 0xbc, 0xe7, 0x9c, 0xe7, 0xfc, 0xce, 0x79,
58 0xcf, 0x0f, 0x80, 0x11, 0x12, 0x26, 0x91, 0xe6, 0xa2, 0x6a, 0x00, 0x39,
59 0x52, 0x85, 0x3c, 0x3a, 0xd8, 0x1f, 0x8f, 0x4f, 0x48, 0xc4, 0xc9, 0xbd,
60 0x80, 0x02, 0x15, 0x48, 0xe0, 0x04, 0x20, 0x10, 0xe6, 0xcb, 0xc2, 0x67,
61 0x05, 0xc5, 0x00, 0x00, 0xf0, 0x03, 0x79, 0x78, 0x7e, 0x74, 0xb0, 0x3f,
62 0xfc, 0x01, 0xaf, 0x6f, 0x00, 0x02, 0x00, 0x70, 0xd5, 0x2e, 0x24, 0x12,
63 0xc7, 0xe1, 0xff, 0x83, 0xba, 0x50, 0x26, 0x57, 0x00, 0x20, 0x91, 0x00,
64 0xe0, 0x22, 0x12, 0xe7, 0x0b, 0x01, 0x90, 0x52, 0x00, 0xc8, 0x2e, 0x54,
65 0xc8, 0x14, 0x00, 0xc8, 0x18, 0x00, 0xb0, 0x53, 0xb3, 0x64, 0x0a, 0x00,
66 0x94, 0x00, 0x00, 0x6c, 0x79, 0x7c, 0x42, 0x22, 0x00, 0xaa, 0x0d, 0x00,
67 0xec, 0xf4, 0x49, 0x3e, 0x05, 0x00, 0xd8, 0xa9, 0x93, 0xdc, 0x17, 0x00,
68 0xd8, 0xa2, 0x1c, 0xa9, 0x08, 0x00, 0x8d, 0x01, 0x00, 0x99, 0x28, 0x47,
69 0x24, 0x02, 0x40, 0xbb, 0x00, 0x60, 0x55, 0x81, 0x52, 0x2c, 0x02, 0xc0,
70 0xc2, 0x00, 0xa0, 0xac, 0x40, 0x22, 0x2e, 0x04, 0xc0, 0xae, 0x01, 0x80,
71 0x59, 0xb6, 0x32, 0x47, 0x02, 0x80, 0xbd, 0x05, 0x00, 0x76, 0x8e, 0x58,
72 0x90, 0x0f, 0x40, 0x60, 0x00, 0x80, 0x99, 0x42, 0x2c, 0xcc, 0x00, 0x20,
73 0x38, 0x02, 0x00, 0x43, 0x1e, 0x13, 0xcd, 0x03, 0x20, 0x4c, 0x03, 0xa0,
74 0x30, 0xd2, 0xbf, 0xe0, 0xa9, 0x5f, 0x70, 0x85, 0xb8, 0x48, 0x01, 0x00,
75 0xc0, 0xcb, 0x95, 0xcd, 0x97, 0x4b, 0xd2, 0x33, 0x14, 0xb8, 0x95, 0xd0,
76 0x1a, 0x77, 0xf2, 0xf0, 0xe0, 0xe2, 0x21, 0xe2, 0xc2, 0x6c, 0xb1, 0x42,
77 0x61, 0x17, 0x29, 0x10, 0x66, 0x09, 0xe4, 0x22, 0x9c, 0x97, 0x9b, 0x23,
78 0x13, 0x48, 0xe7, 0x03, 0x4c, 0xce, 0x0c, 0x00, 0x00, 0x1a, 0xf9, 0xd1,
79 0xc1, 0xfe, 0x38, 0x3f, 0x90, 0xe7, 0xe6, 0xe4, 0xe1, 0xe6, 0x66, 0xe7,
80 0x6c, 0xef, 0xf4, 0xc5, 0xa2, 0xfe, 0x6b, 0xf0, 0x6f, 0x22, 0x3e, 0x21,
81 0xf1, 0xdf, 0xfe, 0xbc, 0x8c, 0x02, 0x04, 0x00, 0x10, 0x4e, 0xcf, 0xef,
82 0xda, 0x5f, 0xe5, 0xe5, 0xd6, 0x03, 0x70, 0xc7, 0x01, 0xb0, 0x75, 0xbf,
83 0x6b, 0xa9, 0x5b, 0x00, 0xda, 0x56, 0x00, 0x68, 0xdf, 0xf9, 0x5d, 0x33,
84 0xdb, 0x09, 0xa0, 0x5a, 0x0a, 0xd0, 0x7a, 0xf9, 0x8b, 0x79, 0x38, 0xfc,
85 0x40, 0x1e, 0x9e, 0xa1, 0x50, 0xc8, 0x3c, 0x1d, 0x1c, 0x0a, 0x0b, 0x0b,
86 0xed, 0x25, 0x62, 0xa1, 0xbd, 0x30, 0xe3, 0x8b, 0x3e, 0xff, 0x33, 0xe1,
87 0x6f, 0xe0, 0x8b, 0x7e, 0xf6, 0xfc, 0x40, 0x1e, 0xfe, 0xdb, 0x7a, 0xf0,
88 0x00, 0x71, 0x9a, 0x40, 0x99, 0xad, 0xc0, 0xa3, 0x83, 0xfd, 0x71, 0x61,
89 0x6e, 0x76, 0xae, 0x52, 0x8e, 0xe7, 0xcb, 0x04, 0x42, 0x31, 0x6e, 0xf7,
90 0xe7, 0x23, 0xfe, 0xc7, 0x85, 0x7f, 0xfd, 0x8e, 0x29, 0xd1, 0xe2, 0x34,
91 0xb1, 0x5c, 0x2c, 0x15, 0x8a, 0xf1, 0x58, 0x89, 0xb8, 0x50, 0x22, 0x4d,
92 0xc7, 0x79, 0xb9, 0x52, 0x91, 0x44, 0x21, 0xc9, 0x95, 0xe2, 0x12, 0xe9,
93 0x7f, 0x32, 0xf1, 0x1f, 0x96, 0xfd, 0x09, 0x93, 0x77, 0x0d, 0x00, 0xac,
94 0x86, 0x4f, 0xc0, 0x4e, 0xb6, 0x07, 0xb5, 0xcb, 0x6c, 0xc0, 0x7e, 0xee,
95 0x01, 0x02, 0x8b, 0x0e, 0x58, 0xd2, 0x76, 0x00, 0x40, 0x7e, 0xf3, 0x2d,
96 0x8c, 0x1a, 0x0b, 0x91, 0x00, 0x10, 0x67, 0x34, 0x32, 0x79, 0xf7, 0x00,
97 0x00, 0x93, 0xbf, 0xf9, 0x8f, 0x40, 0x2b, 0x01, 0x00, 0xcd, 0x97, 0xa4,
98 0xe3, 0x00, 0x00, 0xbc, 0xe8, 0x18, 0x5c, 0xa8, 0x94, 0x17, 0x4c, 0xc6,
99 0x08, 0x00, 0x00, 0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x07, 0x0c, 0xc1,
100 0x14, 0xac, 0xc0, 0x0e, 0x9c, 0xc1, 0x1d, 0xbc, 0xc0, 0x17, 0x02, 0x61,
101 0x06, 0x44, 0x40, 0x0c, 0x24, 0xc0, 0x3c, 0x10, 0x42, 0x06, 0xe4, 0x80,
102 0x1c, 0x0a, 0xa1, 0x18, 0x96, 0x41, 0x19, 0x54, 0xc0, 0x3a, 0xd8, 0x04,
103 0xb5, 0xb0, 0x03, 0x1a, 0xa0, 0x11, 0x9a, 0xe1, 0x10, 0xb4, 0xc1, 0x31,
104 0x38, 0x0d, 0xe7, 0xe0, 0x12, 0x5c, 0x81, 0xeb, 0x70, 0x17, 0x06, 0x60,
105 0x18, 0x9e, 0xc2, 0x18, 0xbc, 0x86, 0x09, 0x04, 0x41, 0xc8, 0x08, 0x13,
106 0x61, 0x21, 0x3a, 0x88, 0x11, 0x62, 0x8e, 0xd8, 0x22, 0xce, 0x08, 0x17,
107 0x99, 0x8e, 0x04, 0x22, 0x61, 0x48, 0x34, 0x92, 0x80, 0xa4, 0x20, 0xe9,
108 0x88, 0x14, 0x51, 0x22, 0xc5, 0xc8, 0x72, 0xa4, 0x02, 0xa9, 0x42, 0x6a,
109 0x91, 0x5d, 0x48, 0x23, 0xf2, 0x2d, 0x72, 0x14, 0x39, 0x8d, 0x5c, 0x40,
110 0xfa, 0x90, 0xdb, 0xc8, 0x20, 0x32, 0x8a, 0xfc, 0x8a, 0xbc, 0x47, 0x31,
111 0x94, 0x81, 0xb2, 0x51, 0x03, 0xd4, 0x02, 0x75, 0x40, 0xb9, 0xa8, 0x1f,
112 0x1a, 0x8a, 0xc6, 0xa0, 0x73, 0xd1, 0x74, 0x34, 0x0f, 0x5d, 0x80, 0x96,
113 0xa2, 0x6b, 0xd1, 0x1a, 0xb4, 0x1e, 0x3d, 0x80, 0xb6, 0xa2, 0xa7, 0xd1,
114 0x4b, 0xe8, 0x75, 0x74, 0x00, 0x7d, 0x8a, 0x8e, 0x63, 0x80, 0xd1, 0x31,
115 0x0e, 0x66, 0x8c, 0xd9, 0x61, 0x5c, 0x8c, 0x87, 0x45, 0x60, 0x89, 0x58,
116 0x1a, 0x26, 0xc7, 0x16, 0x63, 0xe5, 0x58, 0x35, 0x56, 0x8f, 0x35, 0x63,
117 0x1d, 0x58, 0x37, 0x76, 0x15, 0x1b, 0xc0, 0x9e, 0x61, 0xef, 0x08, 0x24,
118 0x02, 0x8b, 0x80, 0x13, 0xec, 0x08, 0x5e, 0x84, 0x10, 0xc2, 0x6c, 0x82,
119 0x90, 0x90, 0x47, 0x58, 0x4c, 0x58, 0x43, 0xa8, 0x25, 0xec, 0x23, 0xb4,
120 0x12, 0xba, 0x08, 0x57, 0x09, 0x83, 0x84, 0x31, 0xc2, 0x27, 0x22, 0x93,
121 0xa8, 0x4f, 0xb4, 0x25, 0x7a, 0x12, 0xf9, 0xc4, 0x78, 0x62, 0x3a, 0xb1,
122 0x90, 0x58, 0x46, 0xac, 0x26, 0xee, 0x21, 0x1e, 0x21, 0x9e, 0x25, 0x5e,
123 0x27, 0x0e, 0x13, 0x5f, 0x93, 0x48, 0x24, 0x0e, 0xc9, 0x92, 0xe4, 0x4e,
124 0x0a, 0x21, 0x25, 0x90, 0x32, 0x49, 0x0b, 0x49, 0x6b, 0x48, 0xdb, 0x48,
125 0x2d, 0xa4, 0x53, 0xa4, 0x3e, 0xd2, 0x10, 0x69, 0x9c, 0x4c, 0x26, 0xeb,
126 0x90, 0x6d, 0xc9, 0xde, 0xe4, 0x08, 0xb2, 0x80, 0xac, 0x20, 0x97, 0x91,
127 0xb7, 0x90, 0x0f, 0x90, 0x4f, 0x92, 0xfb, 0xc9, 0xc3, 0xe4, 0xb7, 0x14,
128 0x3a, 0xc5, 0x88, 0xe2, 0x4c, 0x09, 0xa2, 0x24, 0x52, 0xa4, 0x94, 0x12,
129 0x4a, 0x35, 0x65, 0x3f, 0xe5, 0x04, 0xa5, 0x9f, 0x32, 0x42, 0x99, 0xa0,
130 0xaa, 0x51, 0xcd, 0xa9, 0x9e, 0xd4, 0x08, 0xaa, 0x88, 0x3a, 0x9f, 0x5a,
131 0x49, 0x6d, 0xa0, 0x76, 0x50, 0x2f, 0x53, 0x87, 0xa9, 0x13, 0x34, 0x75,
132 0x9a, 0x25, 0xcd, 0x9b, 0x16, 0x43, 0xcb, 0xa4, 0x2d, 0xa3, 0xd5, 0xd0,
133 0x9a, 0x69, 0x67, 0x69, 0xf7, 0x68, 0x2f, 0xe9, 0x74, 0xba, 0x09, 0xdd,
134 0x83, 0x1e, 0x45, 0x97, 0xd0, 0x97, 0xd2, 0x6b, 0xe8, 0x07, 0xe9, 0xe7,
135 0xe9, 0x83, 0xf4, 0x77, 0x0c, 0x0d, 0x86, 0x0d, 0x83, 0xc7, 0x48, 0x62,
136 0x28, 0x19, 0x6b, 0x19, 0x7b, 0x19, 0xa7, 0x18, 0xb7, 0x19, 0x2f, 0x99,
137 0x4c, 0xa6, 0x05, 0xd3, 0x97, 0x99, 0xc8, 0x54, 0x30, 0xd7, 0x32, 0x1b,
138 0x99, 0x67, 0x98, 0x0f, 0x98, 0x6f, 0x55, 0x58, 0x2a, 0xf6, 0x2a, 0x7c,
139 0x15, 0x91, 0xca, 0x12, 0x95, 0x3a, 0x95, 0x56, 0x95, 0x7e, 0x95, 0xe7,
140 0xaa, 0x54, 0x55, 0x73, 0x55, 0x3f, 0xd5, 0x79, 0xaa, 0x0b, 0x54, 0xab,
141 0x55, 0x0f, 0xab, 0x5e, 0x56, 0x7d, 0xa6, 0x46, 0x55, 0xb3, 0x50, 0xe3,
142 0xa9, 0x09, 0xd4, 0x16, 0xab, 0xd5, 0xa9, 0x1d, 0x55, 0xbb, 0xa9, 0x36,
143 0xae, 0xce, 0x52, 0x77, 0x52, 0x8f, 0x50, 0xcf, 0x51, 0x5f, 0xa3, 0xbe,
144 0x5f, 0xfd, 0x82, 0xfa, 0x63, 0x0d, 0xb2, 0x86, 0x85, 0x46, 0xa0, 0x86,
145 0x48, 0xa3, 0x54, 0x63, 0xb7, 0xc6, 0x19, 0x8d, 0x21, 0x16, 0xc6, 0x32,
146 0x65, 0xf1, 0x58, 0x42, 0xd6, 0x72, 0x56, 0x03, 0xeb, 0x2c, 0x6b, 0x98,
147 0x4d, 0x62, 0x5b, 0xb2, 0xf9, 0xec, 0x4c, 0x76, 0x05, 0xfb, 0x1b, 0x76,
148 0x2f, 0x7b, 0x4c, 0x53, 0x43, 0x73, 0xaa, 0x66, 0xac, 0x66, 0x91, 0x66,
149 0x9d, 0xe6, 0x71, 0xcd, 0x01, 0x0e, 0xc6, 0xb1, 0xe0, 0xf0, 0x39, 0xd9,
150 0x9c, 0x4a, 0xce, 0x21, 0xce, 0x0d, 0xce, 0x7b, 0x2d, 0x03, 0x2d, 0x3f,
151 0x2d, 0xb1, 0xd6, 0x6a, 0xad, 0x66, 0xad, 0x7e, 0xad, 0x37, 0xda, 0x7a,
152 0xda, 0xbe, 0xda, 0x62, 0xed, 0x72, 0xed, 0x16, 0xed, 0xeb, 0xda, 0xef,
153 0x75, 0x70, 0x9d, 0x40, 0x9d, 0x2c, 0x9d, 0xf5, 0x3a, 0x6d, 0x3a, 0xf7,
154 0x75, 0x09, 0xba, 0x36, 0xba, 0x51, 0xba, 0x85, 0xba, 0xdb, 0x75, 0xcf,
155 0xea, 0x3e, 0xd3, 0x63, 0xeb, 0x79, 0xe9, 0x09, 0xf5, 0xca, 0xf5, 0x0e,
156 0xe9, 0xdd, 0xd1, 0x47, 0xf5, 0x6d, 0xf4, 0xa3, 0xf5, 0x17, 0xea, 0xef,
157 0xd6, 0xef, 0xd1, 0x1f, 0x37, 0x30, 0x34, 0x08, 0x36, 0x90, 0x19, 0x6c,
158 0x31, 0x38, 0x63, 0xf0, 0xcc, 0x90, 0x63, 0xe8, 0x6b, 0x98, 0x69, 0xb8,
159 0xd1, 0xf0, 0x84, 0xe1, 0xa8, 0x11, 0xcb, 0x68, 0xba, 0x91, 0xc4, 0x68,
160 0xa3, 0xd1, 0x49, 0xa3, 0x27, 0xb8, 0x26, 0xee, 0x87, 0x67, 0xe3, 0x35,
161 0x78, 0x17, 0x3e, 0x66, 0xac, 0x6f, 0x1c, 0x62, 0xac, 0x34, 0xde, 0x65,
162 0xdc, 0x6b, 0x3c, 0x61, 0x62, 0x69, 0x32, 0xdb, 0xa4, 0xc4, 0xa4, 0xc5,
163 0xe4, 0xbe, 0x29, 0xcd, 0x94, 0x6b, 0x9a, 0x66, 0xba, 0xd1, 0xb4, 0xd3,
164 0x74, 0xcc, 0xcc, 0xc8, 0x2c, 0xdc, 0xac, 0xd8, 0xac, 0xc9, 0xec, 0x8e,
165 0x39, 0xd5, 0x9c, 0x6b, 0x9e, 0x61, 0xbe, 0xd9, 0xbc, 0xdb, 0xfc, 0x8d,
166 0x85, 0xa5, 0x45, 0x9c, 0xc5, 0x4a, 0x8b, 0x36, 0x8b, 0xc7, 0x96, 0xda,
167 0x96, 0x7c, 0xcb, 0x05, 0x96, 0x4d, 0x96, 0xf7, 0xac, 0x98, 0x56, 0x3e,
168 0x56, 0x79, 0x56, 0xf5, 0x56, 0xd7, 0xac, 0x49, 0xd6, 0x5c, 0xeb, 0x2c,
169 0xeb, 0x6d, 0xd6, 0x57, 0x6c, 0x50, 0x1b, 0x57, 0x9b, 0x0c, 0x9b, 0x3a,
170 0x9b, 0xcb, 0xb6, 0xa8, 0xad, 0x9b, 0xad, 0xc4, 0x76, 0x9b, 0x6d, 0xdf,
171 0x14, 0xe2, 0x14, 0x8f, 0x29, 0xd2, 0x29, 0xf5, 0x53, 0x6e, 0xda, 0x31,
172 0xec, 0xfc, 0xec, 0x0a, 0xec, 0x9a, 0xec, 0x06, 0xed, 0x39, 0xf6, 0x61,
173 0xf6, 0x25, 0xf6, 0x6d, 0xf6, 0xcf, 0x1d, 0xcc, 0x1c, 0x12, 0x1d, 0xd6,
174 0x3b, 0x74, 0x3b, 0x7c, 0x72, 0x74, 0x75, 0xcc, 0x76, 0x6c, 0x70, 0xbc,
175 0xeb, 0xa4, 0xe1, 0x34, 0xc3, 0xa9, 0xc4, 0xa9, 0xc3, 0xe9, 0x57, 0x67,
176 0x1b, 0x67, 0xa1, 0x73, 0x9d, 0xf3, 0x35, 0x17, 0xa6, 0x4b, 0x90, 0xcb,
177 0x12, 0x97, 0x76, 0x97, 0x17, 0x53, 0x6d, 0xa7, 0x8a, 0xa7, 0x6e, 0x9f,
178 0x7a, 0xcb, 0x95, 0xe5, 0x1a, 0xee, 0xba, 0xd2, 0xb5, 0xd3, 0xf5, 0xa3,
179 0x9b, 0xbb, 0x9b, 0xdc, 0xad, 0xd9, 0x6d, 0xd4, 0xdd, 0xcc, 0x3d, 0xc5,
180 0x7d, 0xab, 0xfb, 0x4d, 0x2e, 0x9b, 0x1b, 0xc9, 0x5d, 0xc3, 0x3d, 0xef,
181 0x41, 0xf4, 0xf0, 0xf7, 0x58, 0xe2, 0x71, 0xcc, 0xe3, 0x9d, 0xa7, 0x9b,
182 0xa7, 0xc2, 0xf3, 0x90, 0xe7, 0x2f, 0x5e, 0x76, 0x5e, 0x59, 0x5e, 0xfb,
183 0xbd, 0x1e, 0x4f, 0xb3, 0x9c, 0x26, 0x9e, 0xd6, 0x30, 0x6d, 0xc8, 0xdb,
184 0xc4, 0x5b, 0xe0, 0xbd, 0xcb, 0x7b, 0x60, 0x3a, 0x3e, 0x3d, 0x65, 0xfa,
185 0xce, 0xe9, 0x03, 0x3e, 0xc6, 0x3e, 0x02, 0x9f, 0x7a, 0x9f, 0x87, 0xbe,
186 0xa6, 0xbe, 0x22, 0xdf, 0x3d, 0xbe, 0x23, 0x7e, 0xd6, 0x7e, 0x99, 0x7e,
187 0x07, 0xfc, 0x9e, 0xfb, 0x3b, 0xfa, 0xcb, 0xfd, 0x8f, 0xf8, 0xbf, 0xe1,
188 0x79, 0xf2, 0x16, 0xf1, 0x4e, 0x05, 0x60, 0x01, 0xc1, 0x01, 0xe5, 0x01,
189 0xbd, 0x81, 0x1a, 0x81, 0xb3, 0x03, 0x6b, 0x03, 0x1f, 0x04, 0x99, 0x04,
190 0xa5, 0x07, 0x35, 0x05, 0x8d, 0x05, 0xbb, 0x06, 0x2f, 0x0c, 0x3e, 0x15,
191 0x42, 0x0c, 0x09, 0x0d, 0x59, 0x1f, 0x72, 0x93, 0x6f, 0xc0, 0x17, 0xf2,
192 0x1b, 0xf9, 0x63, 0x33, 0xdc, 0x67, 0x2c, 0x9a, 0xd1, 0x15, 0xca, 0x08,
193 0x9d, 0x15, 0x5a, 0x1b, 0xfa, 0x30, 0xcc, 0x26, 0x4c, 0x1e, 0xd6, 0x11,
194 0x8e, 0x86, 0xcf, 0x08, 0xdf, 0x10, 0x7e, 0x6f, 0xa6, 0xf9, 0x4c, 0xe9,
195 0xcc, 0xb6, 0x08, 0x88, 0xe0, 0x47, 0x6c, 0x88, 0xb8, 0x1f, 0x69, 0x19,
196 0x99, 0x17, 0xf9, 0x7d, 0x14, 0x29, 0x2a, 0x32, 0xaa, 0x2e, 0xea, 0x51,
197 0xb4, 0x53, 0x74, 0x71, 0x74, 0xf7, 0x2c, 0xd6, 0xac, 0xe4, 0x59, 0xfb,
198 0x67, 0xbd, 0x8e, 0xf1, 0x8f, 0xa9, 0x8c, 0xb9, 0x3b, 0xdb, 0x6a, 0xb6,
199 0x72, 0x76, 0x67, 0xac, 0x6a, 0x6c, 0x52, 0x6c, 0x63, 0xec, 0x9b, 0xb8,
200 0x80, 0xb8, 0xaa, 0xb8, 0x81, 0x78, 0x87, 0xf8, 0x45, 0xf1, 0x97, 0x12,
201 0x74, 0x13, 0x24, 0x09, 0xed, 0x89, 0xe4, 0xc4, 0xd8, 0xc4, 0x3d, 0x89,
202 0xe3, 0x73, 0x02, 0xe7, 0x6c, 0x9a, 0x33, 0x9c, 0xe4, 0x9a, 0x54, 0x96,
203 0x74, 0x63, 0xae, 0xe5, 0xdc, 0xa2, 0xb9, 0x17, 0xe6, 0xe9, 0xce, 0xcb,
204 0x9e, 0x77, 0x3c, 0x59, 0x35, 0x59, 0x90, 0x7c, 0x38, 0x85, 0x98, 0x12,
205 0x97, 0xb2, 0x3f, 0xe5, 0x83, 0x20, 0x42, 0x50, 0x2f, 0x18, 0x4f, 0xe5,
206 0xa7, 0x6e, 0x4d, 0x1d, 0x13, 0xf2, 0x84, 0x9b, 0x85, 0x4f, 0x45, 0xbe,
207 0xa2, 0x8d, 0xa2, 0x51, 0xb1, 0xb7, 0xb8, 0x4a, 0x3c, 0x92, 0xe6, 0x9d,
208 0x56, 0x95, 0xf6, 0x38, 0xdd, 0x3b, 0x7d, 0x43, 0xfa, 0x68, 0x86, 0x4f,
209 0x46, 0x75, 0xc6, 0x33, 0x09, 0x4f, 0x52, 0x2b, 0x79, 0x91, 0x19, 0x92,
210 0xb9, 0x23, 0xf3, 0x4d, 0x56, 0x44, 0xd6, 0xde, 0xac, 0xcf, 0xd9, 0x71,
211 0xd9, 0x2d, 0x39, 0x94, 0x9c, 0x94, 0x9c, 0xa3, 0x52, 0x0d, 0x69, 0x96,
212 0xb4, 0x2b, 0xd7, 0x30, 0xb7, 0x28, 0xb7, 0x4f, 0x66, 0x2b, 0x2b, 0x93,
213 0x0d, 0xe4, 0x79, 0xe6, 0x6d, 0xca, 0x1b, 0x93, 0x87, 0xca, 0xf7, 0xe4,
214 0x23, 0xf9, 0x73, 0xf3, 0xdb, 0x15, 0x6c, 0x85, 0x4c, 0xd1, 0xa3, 0xb4,
215 0x52, 0xae, 0x50, 0x0e, 0x16, 0x4c, 0x2f, 0xa8, 0x2b, 0x78, 0x5b, 0x18,
216 0x5b, 0x78, 0xb8, 0x48, 0xbd, 0x48, 0x5a, 0xd4, 0x33, 0xdf, 0x66, 0xfe,
217 0xea, 0xf9, 0x23, 0x0b, 0x82, 0x16, 0x7c, 0xbd, 0x90, 0xb0, 0x50, 0xb8,
218 0xb0, 0xb3, 0xd8, 0xb8, 0x78, 0x59, 0xf1, 0xe0, 0x22, 0xbf, 0x45, 0xbb,
219 0x16, 0x23, 0x8b, 0x53, 0x17, 0x77, 0x2e, 0x31, 0x5d, 0x52, 0xba, 0x64,
220 0x78, 0x69, 0xf0, 0xd2, 0x7d, 0xcb, 0x68, 0xcb, 0xb2, 0x96, 0xfd, 0x50,
221 0xe2, 0x58, 0x52, 0x55, 0xf2, 0x6a, 0x79, 0xdc, 0xf2, 0x8e, 0x52, 0x83,
222 0xd2, 0xa5, 0xa5, 0x43, 0x2b, 0x82, 0x57, 0x34, 0x95, 0xa9, 0x94, 0xc9,
223 0xcb, 0x6e, 0xae, 0xf4, 0x5a, 0xb9, 0x63, 0x15, 0x61, 0x95, 0x64, 0x55,
224 0xef, 0x6a, 0x97, 0xd5, 0x5b, 0x56, 0x7f, 0x2a, 0x17, 0x95, 0x5f, 0xac,
225 0x70, 0xac, 0xa8, 0xae, 0xf8, 0xb0, 0x46, 0xb8, 0xe6, 0xe2, 0x57, 0x4e,
226 0x5f, 0xd5, 0x7c, 0xf5, 0x79, 0x6d, 0xda, 0xda, 0xde, 0x4a, 0xb7, 0xca,
227 0xed, 0xeb, 0x48, 0xeb, 0xa4, 0xeb, 0x6e, 0xac, 0xf7, 0x59, 0xbf, 0xaf,
228 0x4a, 0xbd, 0x6a, 0x41, 0xd5, 0xd0, 0x86, 0xf0, 0x0d, 0xad, 0x1b, 0xf1,
229 0x8d, 0xe5, 0x1b, 0x5f, 0x6d, 0x4a, 0xde, 0x74, 0xa1, 0x7a, 0x6a, 0xf5,
230 0x8e, 0xcd, 0xb4, 0xcd, 0xca, 0xcd, 0x03, 0x35, 0x61, 0x35, 0xed, 0x5b,
231 0xcc, 0xb6, 0xac, 0xdb, 0xf2, 0xa1, 0x36, 0xa3, 0xf6, 0x7a, 0x9d, 0x7f,
232 0x5d, 0xcb, 0x56, 0xfd, 0xad, 0xab, 0xb7, 0xbe, 0xd9, 0x26, 0xda, 0xd6,
233 0xbf, 0xdd, 0x77, 0x7b, 0xf3, 0x0e, 0x83, 0x1d, 0x15, 0x3b, 0xde, 0xef,
234 0x94, 0xec, 0xbc, 0xb5, 0x2b, 0x78, 0x57, 0x6b, 0xbd, 0x45, 0x7d, 0xf5,
235 0x6e, 0xd2, 0xee, 0x82, 0xdd, 0x8f, 0x1a, 0x62, 0x1b, 0xba, 0xbf, 0xe6,
236 0x7e, 0xdd, 0xb8, 0x47, 0x77, 0x4f, 0xc5, 0x9e, 0x8f, 0x7b, 0xa5, 0x7b,
237 0x07, 0xf6, 0x45, 0xef, 0xeb, 0x6a, 0x74, 0x6f, 0x6c, 0xdc, 0xaf, 0xbf,
238 0xbf, 0xb2, 0x09, 0x6d, 0x52, 0x36, 0x8d, 0x1e, 0x48, 0x3a, 0x70, 0xe5,
239 0x9b, 0x80, 0x6f, 0xda, 0x9b, 0xed, 0x9a, 0x77, 0xb5, 0x70, 0x5a, 0x2a,
240 0x0e, 0xc2, 0x41, 0xe5, 0xc1, 0x27, 0xdf, 0xa6, 0x7c, 0x7b, 0xe3, 0x50,
241 0xe8, 0xa1, 0xce, 0xc3, 0xdc, 0xc3, 0xcd, 0xdf, 0x99, 0x7f, 0xb7, 0xf5,
242 0x08, 0xeb, 0x48, 0x79, 0x2b, 0xd2, 0x3a, 0xbf, 0x75, 0xac, 0x2d, 0xa3,
243 0x6d, 0xa0, 0x3d, 0xa1, 0xbd, 0xef, 0xe8, 0x8c, 0xa3, 0x9d, 0x1d, 0x5e,
244 0x1d, 0x47, 0xbe, 0xb7, 0xff, 0x7e, 0xef, 0x31, 0xe3, 0x63, 0x75, 0xc7,
245 0x35, 0x8f, 0x57, 0x9e, 0xa0, 0x9d, 0x28, 0x3d, 0xf1, 0xf9, 0xe4, 0x82,
246 0x93, 0xe3, 0xa7, 0x64, 0xa7, 0x9e, 0x9d, 0x4e, 0x3f, 0x3d, 0xd4, 0x99,
247 0xdc, 0x79, 0xf7, 0x4c, 0xfc, 0x99, 0x6b, 0x5d, 0x51, 0x5d, 0xbd, 0x67,
248 0x43, 0xcf, 0x9e, 0x3f, 0x17, 0x74, 0xee, 0x4c, 0xb7, 0x5f, 0xf7, 0xc9,
249 0xf3, 0xde, 0xe7, 0x8f, 0x5d, 0xf0, 0xbc, 0x70, 0xf4, 0x22, 0xf7, 0x62,
250 0xdb, 0x25, 0xb7, 0x4b, 0xad, 0x3d, 0xae, 0x3d, 0x47, 0x7e, 0x70, 0xfd,
251 0xe1, 0x48, 0xaf, 0x5b, 0x6f, 0xeb, 0x65, 0xf7, 0xcb, 0xed, 0x57, 0x3c,
252 0xae, 0x74, 0xf4, 0x4d, 0xeb, 0x3b, 0xd1, 0xef, 0xd3, 0x7f, 0xfa, 0x6a,
253 0xc0, 0xd5, 0x73, 0xd7, 0xf8, 0xd7, 0x2e, 0x5d, 0x9f, 0x79, 0xbd, 0xef,
254 0xc6, 0xec, 0x1b, 0xb7, 0x6e, 0x26, 0xdd, 0x1c, 0xb8, 0x25, 0xba, 0xf5,
255 0xf8, 0x76, 0xf6, 0xed, 0x17, 0x77, 0x0a, 0xee, 0x4c, 0xdc, 0x5d, 0x7a,
256 0x8f, 0x78, 0xaf, 0xfc, 0xbe, 0xda, 0xfd, 0xea, 0x07, 0xfa, 0x0f, 0xea,
257 0x7f, 0xb4, 0xfe, 0xb1, 0x65, 0xc0, 0x6d, 0xe0, 0xf8, 0x60, 0xc0, 0x60,
258 0xcf, 0xc3, 0x59, 0x0f, 0xef, 0x0e, 0x09, 0x87, 0x9e, 0xfe, 0x94, 0xff,
259 0xd3, 0x87, 0xe1, 0xd2, 0x47, 0xcc, 0x47, 0xd5, 0x23, 0x46, 0x23, 0x8d,
260 0x8f, 0x9d, 0x1f, 0x1f, 0x1b, 0x0d, 0x1a, 0xbd, 0xf2, 0x64, 0xce, 0x93,
261 0xe1, 0xa7, 0xb2, 0xa7, 0x13, 0xcf, 0xca, 0x7e, 0x56, 0xff, 0x79, 0xeb,
262 0x73, 0xab, 0xe7, 0xdf, 0xfd, 0xe2, 0xfb, 0x4b, 0xcf, 0x58, 0xfc, 0xd8,
263 0xf0, 0x0b, 0xf9, 0x8b, 0xcf, 0xbf, 0xae, 0x79, 0xa9, 0xf3, 0x72, 0xef,
264 0xab, 0xa9, 0xaf, 0x3a, 0xc7, 0x23, 0xc7, 0x1f, 0xbc, 0xce, 0x79, 0x3d,
265 0xf1, 0xa6, 0xfc, 0xad, 0xce, 0xdb, 0x7d, 0xef, 0xb8, 0xef, 0xba, 0xdf,
266 0xc7, 0xbd, 0x1f, 0x99, 0x28, 0xfc, 0x40, 0xfe, 0x50, 0xf3, 0xd1, 0xfa,
267 0x63, 0xc7, 0xa7, 0xd0, 0x4f, 0xf7, 0x3e, 0xe7, 0x7c, 0xfe, 0xfc, 0x2f,
268 0xf7, 0x84, 0xf3, 0xfb, 0x80, 0x39, 0x25, 0x11, 0x00, 0x00, 0x00, 0x09,
269 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13,
270 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d,
271 0x45, 0x07, 0xdc, 0x0b, 0x0e, 0x0e, 0x25, 0x16, 0x28, 0x9e, 0x78, 0x6a,
272 0x00, 0x00, 0x00, 0x0c, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0xf8,
273 0xff, 0xff, 0x3f, 0x00, 0x05, 0xfe, 0x02, 0xfe, 0xdc, 0xcc, 0x59, 0xe7,
274 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
277 static IWICImagingFactory
*factory
;
279 static HRESULT
create_decoder(const void *image_data
, UINT image_size
, IWICBitmapDecoder
**decoder
)
290 stream
= SHCreateMemStream (image_data
, image_size
);
291 ok(stream
!= NULL
, "SHCreateMemStream error\n");
293 hr
= IWICImagingFactory_CreateDecoderFromStream(factory
, stream
, NULL
, 0, decoder
);
296 hr
= IWICBitmapDecoder_GetContainerFormat(*decoder
, &format
);
297 ok(hr
== S_OK
, "GetContainerFormat error %#x\n", hr
);
298 ok(IsEqualGUID(&format
, &GUID_ContainerFormatPng
),
299 "wrong container format %s\n", wine_dbgstr_guid(&format
));
302 IStream_Seek (stream
, zero
, STREAM_SEEK_CUR
, &pos
);
303 ok(pos
.QuadPart
< image_size
, "seek beyond the end of stream: %x%08x >= %x\n",
304 (UINT
)(pos
.QuadPart
>> 32), (UINT
)pos
.QuadPart
, image_size
);
306 refcount
= IStream_Release(stream
);
307 ok(refcount
> 0, "expected stream refcount > 0\n");
313 static WCHAR
*save_profile( BYTE
*buffer
, UINT size
)
315 static const WCHAR tstW
[] = {'t','s','t',0};
316 WCHAR path
[MAX_PATH
], filename
[MAX_PATH
], *ret
;
320 GetTempPathW(MAX_PATH
, path
);
321 GetTempFileNameW(path
, tstW
, 0, filename
);
323 handle
= CreateFileW(filename
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, 0, NULL
);
324 if (handle
== INVALID_HANDLE_VALUE
) return NULL
;
326 WriteFile(handle
, buffer
, size
, &count
, NULL
);
327 CloseHandle( handle
);
329 ret
= HeapAlloc(GetProcessHeap(), 0, (lstrlenW(filename
) + 1) * sizeof(WCHAR
));
330 lstrcpyW(ret
, filename
);
334 static void test_color_contexts(void)
337 IWICBitmapDecoder
*decoder
;
338 IWICBitmapFrameDecode
*frame
;
339 IWICColorContext
*context
;
340 WICColorContextType type
;
341 UINT count
, colorspace
, size
;
346 hr
= create_decoder(png_no_color_profile
, sizeof(png_no_color_profile
), &decoder
);
347 ok(hr
== S_OK
, "Failed to load PNG image data %#x\n", hr
);
348 if (hr
!= S_OK
) return;
350 /* global color context */
351 hr
= IWICBitmapDecoder_GetColorContexts(decoder
, 0, NULL
, NULL
);
352 ok(hr
== WINCODEC_ERR_UNSUPPORTEDOPERATION
, "GetColorContexts error %#x\n", hr
);
355 hr
= IWICBitmapDecoder_GetColorContexts(decoder
, 0, NULL
, &count
);
356 ok(hr
== WINCODEC_ERR_UNSUPPORTEDOPERATION
, "GetColorContexts error %#x\n", hr
);
357 ok(count
== 0xdeadbeef, "unexpected count %u\n", count
);
359 /* frame color context */
360 hr
= IWICBitmapDecoder_GetFrame(decoder
, 0, &frame
);
361 ok(hr
== S_OK
, "GetFrame error %#x\n", hr
);
363 hr
= IWICBitmapFrameDecode_GetColorContexts(frame
, 0, NULL
, NULL
);
364 ok(hr
== E_INVALIDARG
, "expected E_INVALIDARG, got %#x\n", hr
);
367 hr
= IWICBitmapFrameDecode_GetColorContexts(frame
, 0, NULL
, &count
);
368 ok(hr
== S_OK
, "GetColorContexts error %#x\n", hr
);
369 ok(!count
, "unexpected count %u\n", count
);
371 IWICBitmapFrameDecode_Release(frame
);
372 IWICBitmapDecoder_Release(decoder
);
374 hr
= create_decoder(png_color_profile
, sizeof(png_color_profile
), &decoder
);
375 ok(hr
== S_OK
, "Failed to load PNG image data %#x\n", hr
);
376 if (hr
!= S_OK
) return;
378 /* global color context */
380 hr
= IWICBitmapDecoder_GetColorContexts(decoder
, 0, NULL
, &count
);
381 ok(hr
== WINCODEC_ERR_UNSUPPORTEDOPERATION
, "GetColorContexts error %#x\n", hr
);
382 ok(count
== 0xdeadbeef, "unexpected count %u\n", count
);
384 /* frame color context */
385 hr
= IWICBitmapDecoder_GetFrame(decoder
, 0, &frame
);
386 ok(hr
== S_OK
, "GetFrame error %#x\n", hr
);
389 hr
= IWICBitmapFrameDecode_GetColorContexts(frame
, 0, NULL
, &count
);
390 ok(hr
== S_OK
, "GetColorContexts error %#x\n", hr
);
391 ok(count
== 1, "unexpected count %u\n", count
);
393 hr
= IWICImagingFactory_CreateColorContext(factory
, NULL
);
394 ok(hr
== E_INVALIDARG
, "expected E_INVALIDARG, got %#x\n", hr
);
396 hr
= IWICImagingFactory_CreateColorContext(factory
, &context
);
397 ok(hr
== S_OK
, "CreateColorContext error %#x\n", hr
);
399 hr
= IWICColorContext_GetType(context
, NULL
);
400 ok(hr
== E_INVALIDARG
, "expected E_INVALIDARG, got %#x\n", hr
);
403 hr
= IWICColorContext_GetType(context
, &type
);
404 ok(hr
== S_OK
, "GetType error %#x\n", hr
);
405 ok(type
== WICColorContextUninitialized
, "unexpected type %u\n", type
);
407 hr
= IWICColorContext_GetProfileBytes(context
, 0, NULL
, NULL
);
408 ok(hr
== WINCODEC_ERR_NOTINITIALIZED
, "GetProfileBytes error %#x\n", hr
);
411 hr
= IWICColorContext_GetProfileBytes(context
, 0, NULL
, &size
);
412 ok(hr
== WINCODEC_ERR_NOTINITIALIZED
, "GetProfileBytes error %#x\n", hr
);
413 ok(!size
, "unexpected size %u\n", size
);
415 hr
= IWICColorContext_GetExifColorSpace(context
, NULL
);
416 ok(hr
== E_INVALIDARG
, "expected E_INVALIDARG, got %#x\n", hr
);
418 colorspace
= 0xdeadbeef;
419 hr
= IWICColorContext_GetExifColorSpace(context
, &colorspace
);
420 ok(hr
== S_OK
, "GetExifColorSpace error %#x\n", hr
);
421 ok(colorspace
== 0xffffffff, "unexpected color space %u\n", colorspace
);
423 hr
= IWICColorContext_InitializeFromExifColorSpace(context
, 0);
424 ok(hr
== S_OK
, "InitializeFromExifColorSpace error %#x\n", hr
);
426 hr
= IWICColorContext_InitializeFromExifColorSpace(context
, 1);
427 ok(hr
== S_OK
, "InitializeFromExifColorSpace error %#x\n", hr
);
429 hr
= IWICColorContext_InitializeFromExifColorSpace(context
, 2);
430 ok(hr
== S_OK
, "InitializeFromExifColorSpace error %#x\n", hr
);
432 colorspace
= 0xdeadbeef;
433 hr
= IWICColorContext_GetExifColorSpace(context
, &colorspace
);
434 ok(hr
== S_OK
, "GetExifColorSpace error %#x\n", hr
);
435 ok(colorspace
== 2, "unexpected color space %u\n", colorspace
);
438 hr
= IWICColorContext_GetProfileBytes(context
, 0, NULL
, &size
);
439 ok(hr
== WINCODEC_ERR_NOTINITIALIZED
, "GetProfileBytes error %#x\n", hr
);
440 ok(!size
, "unexpected size %u\n", size
);
443 hr
= IWICColorContext_GetType(context
, &type
);
444 ok(hr
== S_OK
, "GetType error %#x\n", hr
);
445 ok(type
== WICColorContextExifColorSpace
, "unexpected type %u\n", type
);
447 hr
= IWICBitmapFrameDecode_GetColorContexts(frame
, count
, &context
, &count
);
448 ok(hr
== WINCODEC_ERR_WRONGSTATE
, "GetColorContexts error %#x\n", hr
);
450 IWICColorContext_Release(context
);
451 IWICBitmapFrameDecode_Release(frame
);
453 hr
= IWICBitmapDecoder_GetFrame(decoder
, 0, &frame
);
454 ok(hr
== S_OK
, "GetFrame error %#x\n", hr
);
456 hr
= IWICImagingFactory_CreateColorContext(factory
, &context
);
457 ok(hr
== S_OK
, "CreateColorContext error %#x\n", hr
);
460 hr
= IWICBitmapFrameDecode_GetColorContexts(frame
, count
, &context
, &count
);
461 ok(hr
== S_OK
, "GetColorContexts error %#x\n", hr
);
463 hr
= IWICColorContext_GetProfileBytes(context
, 0, NULL
, NULL
);
464 ok(hr
== E_INVALIDARG
, "expected E_INVALIDARG, got %#x\n", hr
);
467 hr
= IWICColorContext_GetProfileBytes(context
, 0, NULL
, &size
);
468 ok(hr
== S_OK
, "GetProfileBytes error %#x\n", hr
);
469 ok(size
, "unexpected size %u\n", size
);
471 buffer
= HeapAlloc(GetProcessHeap(), 0, size
);
472 hr
= IWICColorContext_GetProfileBytes(context
, size
, buffer
, &size
);
473 ok(hr
== S_OK
, "GetProfileBytes error %#x\n", hr
);
475 tmpfile
= save_profile( buffer
, size
);
476 HeapFree(GetProcessHeap(), 0, buffer
);
479 hr
= IWICColorContext_GetType(context
, &type
);
480 ok(hr
== S_OK
, "GetType error %#x\n", hr
);
481 ok(type
== WICColorContextProfile
, "unexpected type %u\n", type
);
483 colorspace
= 0xdeadbeef;
484 hr
= IWICColorContext_GetExifColorSpace(context
, &colorspace
);
485 ok(hr
== S_OK
, "GetExifColorSpace error %#x\n", hr
);
486 ok(colorspace
== 0xffffffff, "unexpected color space %u\n", colorspace
);
488 hr
= IWICColorContext_InitializeFromExifColorSpace(context
, 1);
489 ok(hr
== WINCODEC_ERR_WRONGSTATE
, "InitializeFromExifColorSpace error %#x\n", hr
);
493 hr
= IWICColorContext_InitializeFromFilename(context
, NULL
);
494 ok(hr
== E_INVALIDARG
, "InitializeFromFilename error %#x\n", hr
);
496 hr
= IWICColorContext_InitializeFromFilename(context
, tmpfile
);
497 ok(hr
== S_OK
, "InitializeFromFilename error %#x\n", hr
);
499 ret
= DeleteFileW(tmpfile
);
500 ok(ret
, "DeleteFileW failed %u\n", GetLastError());
503 hr
= IWICColorContext_GetType(context
, &type
);
504 ok(hr
== S_OK
, "GetType error %#x\n", hr
);
505 ok(type
== WICColorContextProfile
, "unexpected type %u\n", type
);
507 colorspace
= 0xdeadbeef;
508 hr
= IWICColorContext_GetExifColorSpace(context
, &colorspace
);
509 ok(hr
== S_OK
, "GetExifColorSpace error %#x\n", hr
);
510 ok(colorspace
== 0xffffffff, "unexpected color space %u\n", colorspace
);
512 hr
= IWICColorContext_InitializeFromExifColorSpace(context
, 1);
513 ok(hr
== WINCODEC_ERR_WRONGSTATE
, "InitializeFromExifColorSpace error %#x\n", hr
);
516 hr
= IWICColorContext_GetProfileBytes(context
, 0, NULL
, &size
);
517 ok(hr
== S_OK
, "GetProfileBytes error %#x\n", hr
);
518 ok(size
, "unexpected size %u\n", size
);
520 buffer
= HeapAlloc(GetProcessHeap(), 0, size
);
521 hr
= IWICColorContext_GetProfileBytes(context
, size
, buffer
, &size
);
522 ok(hr
== S_OK
, "GetProfileBytes error %#x\n", hr
);
524 HeapFree(GetProcessHeap(), 0, buffer
);
525 HeapFree(GetProcessHeap(), 0, tmpfile
);
527 IWICColorContext_Release(context
);
528 IWICBitmapFrameDecode_Release(frame
);
529 IWICBitmapDecoder_Release(decoder
);
532 /* 1 bpp 1x1 pixel PNG image with PLTE and tRNS chunks */
533 static const char png_PLTE_tRNS
[] = {
534 0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,
535 0x00,0x00,0x00,0x0d,'I','H','D','R',0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x03,0x00,0x00,0x00,0x25,0xdb,0x56,0xca,
536 0x00,0x00,0x00,0x06,'P','L','T','E',0x01,0x02,0x03,0x04,0x05,0x06,0x95,0x53,0x6f,0x48,
537 0x00,0x00,0x00,0x02,'t','R','N','S',0xff,0x00,0xe5,0xb7,0x30,0x4a,
538 0x00,0x00,0x00,0x0a,'I','D','A','T',0x18,0xd3,0x63,0x68,0x00,0x00,0x00,0x82,0x00,0x81,0xa7,0x01,0xba,0x10,
539 0x00,0x00,0x00,0x00,'I','E','N','D',0xae,0x42,0x60,0x82
542 static void test_png_palette(void)
545 IWICBitmapDecoder
*decoder
;
546 IWICBitmapFrameDecode
*frame
;
547 IWICPalette
*palette
;
552 hr
= create_decoder(png_PLTE_tRNS
, sizeof(png_PLTE_tRNS
), &decoder
);
553 ok(hr
== S_OK
, "Failed to load PNG image data %#x\n", hr
);
554 if (hr
!= S_OK
) return;
556 hr
= IWICBitmapDecoder_GetFrame(decoder
, 0, &frame
);
557 ok(hr
== S_OK
, "GetFrame error %#x\n", hr
);
559 hr
= IWICBitmapFrameDecode_GetPixelFormat(frame
, &format
);
560 ok(hr
== S_OK
, "GetPixelFormat error %#x\n", hr
);
561 ok(IsEqualGUID(&format
, &GUID_WICPixelFormat1bppIndexed
),
562 "got wrong format %s\n", wine_dbgstr_guid(&format
));
564 hr
= IWICImagingFactory_CreatePalette(factory
, &palette
);
565 ok(hr
== S_OK
, "CreatePalette error %#x\n", hr
);
566 hr
= IWICBitmapFrameDecode_CopyPalette(frame
, palette
);
567 ok(hr
== S_OK
, "CopyPalette error %#x\n", hr
);
569 hr
= IWICPalette_GetColorCount(palette
, &count
);
570 ok(hr
== S_OK
, "GetColorCount error %#x\n", hr
);
571 ok(count
== 2, "expected 2, got %u\n", count
);
573 hr
= IWICPalette_GetColors(palette
, 256, color
, &ret
);
574 ok(hr
== S_OK
, "GetColors error %#x\n", hr
);
575 ok(ret
== count
, "expected %u, got %u\n", count
, ret
);
576 ok(color
[0] == 0xff010203, "expected 0xff010203, got %#x\n", color
[0]);
577 ok(color
[1] == 0x00040506, "expected 0x00040506, got %#x\n", color
[1]);
579 IWICPalette_Release(palette
);
580 IWICBitmapFrameDecode_Release(frame
);
581 IWICBitmapDecoder_Release(decoder
);
584 /* RGB 24 bpp 1x1 pixel PNG image */
585 static const char png_1x1_data
[] = {
586 0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,
587 0x00,0x00,0x00,0x0d,'I','H','D','R',0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x08,0x02,0x00,0x00,0x00,0x90,0x77,0x53,0xde,
588 0x00,0x00,0x03,0x00,'P','L','T','E',
589 0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,
590 0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x10,0x10,0x10,
591 0x11,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,
592 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,
593 0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x27,0x27,0x27,0x28,0x28,0x28,
594 0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x30,0x30,0x30,
595 0x31,0x31,0x31,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,
596 0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40,
597 0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,
598 0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50,
599 0x51,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x58,0x58,0x58,
600 0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x60,0x60,
601 0x61,0x61,0x61,0x62,0x62,0x62,0x63,0x63,0x63,0x64,0x64,0x64,0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x68,0x68,0x68,
602 0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x70,0x70,0x70,
603 0x71,0x71,0x71,0x72,0x72,0x72,0x73,0x73,0x73,0x74,0x74,0x74,0x75,0x75,0x75,0x76,0x76,0x76,0x77,0x77,0x77,0x78,0x78,0x78,
604 0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,
605 0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,
606 0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x10,0x10,0x10,
607 0x11,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,
608 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,
609 0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x27,0x27,0x27,0x28,0x28,0x28,
610 0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x30,0x30,0x30,
611 0x31,0x31,0x31,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,
612 0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40,
613 0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,
614 0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50,
615 0x51,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x58,0x58,0x58,
616 0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x60,0x60,
617 0x61,0x61,0x61,0x62,0x62,0x62,0x63,0x63,0x63,0x64,0x64,0x64,0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x68,0x68,0x68,
618 0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x70,0x70,0x70,
619 0x71,0x71,0x71,0x72,0x72,0x72,0x73,0x73,0x73,0x74,0x74,0x74,0x75,0x75,0x75,0x76,0x76,0x76,0x77,0x77,0x77,0x78,0x78,0x78,
620 0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,
622 0x00,0x00,0x00,0x02,'t','R','N','S',0xff,0x00,0xe5,0xb7,0x30,0x4a,
623 0x00,0x00,0x00,0x0c,'I','D','A','T',0x08,0xd7,0x63,0xf8,0xff,0xff,0x3f,0x00,0x05,0xfe,0x02,0xfe,0xdc,0xcc,0x59,0xe7,
624 0x00,0x00,0x00,0x00,'I','E','N','D',0xae,0x42,0x60,0x82
627 static BOOL
is_valid_png_type_depth(int color_type
, int bit_depth
, BOOL plte
)
631 case 0: /* Grayscale */
632 return bit_depth
== 1 || bit_depth
== 2 || bit_depth
== 4 || bit_depth
== 8 || bit_depth
== 16;
634 case 2: /* True Color */
635 return bit_depth
== 8 || bit_depth
== 16;
637 case 3: /* Indexed Color */
638 return (bit_depth
== 1 || bit_depth
== 2 || bit_depth
== 4 || bit_depth
== 8) && plte
;
640 case 4: /* Grayscale with alpha */
641 return bit_depth
== 8 || bit_depth
== 16;
643 case 6: /* True Color with alpha */
644 return bit_depth
== 8 || bit_depth
== 16;
647 ok(0, "unknown PNG type %d, depth %d\n", color_type
, bit_depth
);
652 static void test_color_formats(void)
656 char bit_depth
, color_type
;
658 const GUID
*format_PLTE
;
659 const GUID
*format_PLTE_tRNS
;
664 /* 2 - PNG_COLOR_TYPE_RGB */
665 { 1, 2, NULL
, NULL
, NULL
},
666 { 2, 2, NULL
, NULL
, NULL
},
667 { 4, 2, NULL
, NULL
, NULL
},
668 { 8, 2, &GUID_WICPixelFormat24bppBGR
, &GUID_WICPixelFormat24bppBGR
, &GUID_WICPixelFormat24bppBGR
},
669 /* libpng refuses to load our test image complaining about extra compressed data,
670 * but libpng is still able to load the image with other combination of type/depth
671 * making RGB 16 bpp case special for some reason. Therefore todo = TRUE.
673 { 16, 2, &GUID_WICPixelFormat48bppRGB
, &GUID_WICPixelFormat48bppRGB
, &GUID_WICPixelFormat48bppRGB
, TRUE
, TRUE
},
674 { 24, 2, NULL
, NULL
, NULL
},
675 { 32, 2, NULL
, NULL
, NULL
},
676 /* 0 - PNG_COLOR_TYPE_GRAY */
677 { 1, 0, &GUID_WICPixelFormatBlackWhite
, &GUID_WICPixelFormatBlackWhite
, &GUID_WICPixelFormat1bppIndexed
},
678 { 2, 0, &GUID_WICPixelFormat2bppGray
, &GUID_WICPixelFormat2bppGray
, &GUID_WICPixelFormat2bppIndexed
},
679 { 4, 0, &GUID_WICPixelFormat4bppGray
, &GUID_WICPixelFormat4bppGray
, &GUID_WICPixelFormat4bppIndexed
},
680 { 8, 0, &GUID_WICPixelFormat8bppGray
, &GUID_WICPixelFormat8bppGray
, &GUID_WICPixelFormat8bppIndexed
},
681 { 16, 0, &GUID_WICPixelFormat16bppGray
, &GUID_WICPixelFormat16bppGray
, &GUID_WICPixelFormat64bppRGBA
},
682 { 24, 0, NULL
, NULL
, NULL
},
683 { 32, 0, NULL
, NULL
, NULL
},
684 /* 3 - PNG_COLOR_TYPE_PALETTE */
685 { 1, 3, &GUID_WICPixelFormat1bppIndexed
, &GUID_WICPixelFormat1bppIndexed
, &GUID_WICPixelFormat1bppIndexed
},
686 { 2, 3, &GUID_WICPixelFormat2bppIndexed
, &GUID_WICPixelFormat2bppIndexed
, &GUID_WICPixelFormat2bppIndexed
},
687 { 4, 3, &GUID_WICPixelFormat4bppIndexed
, &GUID_WICPixelFormat4bppIndexed
, &GUID_WICPixelFormat4bppIndexed
},
688 { 8, 3, &GUID_WICPixelFormat8bppIndexed
, &GUID_WICPixelFormat8bppIndexed
, &GUID_WICPixelFormat8bppIndexed
},
689 { 16, 3, NULL
, NULL
, NULL
},
690 { 24, 3, NULL
, NULL
, NULL
},
691 { 32, 3, NULL
, NULL
, NULL
},
693 char buf
[sizeof(png_1x1_data
)];
695 IWICBitmapDecoder
*decoder
;
696 IWICBitmapFrameDecode
*frame
;
698 int i
, PLTE_off
= 0, tRNS_off
= 0;
700 memcpy(buf
, png_1x1_data
, sizeof(png_1x1_data
));
701 for (i
= 0; i
< sizeof(png_1x1_data
) - 4; i
++)
703 if (!memcmp(buf
+ i
, "tRNS", 4))
705 else if (!memcmp(buf
+ i
, "PLTE", 4))
709 ok(PLTE_off
&& tRNS_off
, "PLTE offset %d, tRNS offset %d\n", PLTE_off
, tRNS_off
);
710 if (!PLTE_off
|| !tRNS_off
) return;
712 /* In order to test the image data with and without PLTE and tRNS chunks
713 * it's been decided to simply sero out the chunk id for testing puposes,
714 * and under Windows such images get loaded just fine. But unfortunately
715 * libpng refuses to load such images complaining about unknown chunk type.
716 * A workaround for this libpng limitation is to mark the "disabled" chunks
720 for (i
= 0; i
< sizeof(td
)/sizeof(td
[0]); i
++)
722 /* with the tRNS and PLTE chunks */
723 memcpy(buf
, png_1x1_data
, sizeof(png_1x1_data
));
724 buf
[24] = td
[i
].bit_depth
;
725 buf
[25] = td
[i
].color_type
;
727 hr
= create_decoder(buf
, sizeof(buf
), &decoder
);
728 if (!is_valid_png_type_depth(td
[i
].color_type
, td
[i
].bit_depth
, TRUE
))
729 ok(hr
== WINCODEC_ERR_UNKNOWNIMAGEFORMAT
, "%d: wrong error %#x\n", i
, hr
);
731 todo_wine_if(td
[i
].todo_load
)
732 ok(hr
== S_OK
, "%d: Failed to load PNG image data (type %d, bpp %d) %#x\n", i
, td
[i
].color_type
, td
[i
].bit_depth
, hr
);
733 if (hr
!= S_OK
) goto next_1
;
735 hr
= IWICBitmapDecoder_GetFrame(decoder
, 0, &frame
);
736 ok(hr
== S_OK
, "GetFrame error %#x\n", hr
);
738 hr
= IWICBitmapFrameDecode_GetPixelFormat(frame
, &format
);
739 ok(hr
== S_OK
, "GetPixelFormat error %#x\n", hr
);
740 todo_wine_if(td
[i
].todo
)
741 ok(IsEqualGUID(&format
, td
[i
].format_PLTE_tRNS
),
742 "PLTE+tRNS: expected %s, got %s (type %d, bpp %d)\n",
743 wine_dbgstr_guid(td
[i
].format_PLTE_tRNS
), wine_dbgstr_guid(&format
), td
[i
].color_type
, td
[i
].bit_depth
);
745 IWICBitmapFrameDecode_Release(frame
);
746 IWICBitmapDecoder_Release(decoder
);
749 /* without the tRNS chunk */
750 memcpy(buf
, png_1x1_data
, sizeof(png_1x1_data
));
751 buf
[24] = td
[i
].bit_depth
;
752 buf
[25] = td
[i
].color_type
;
753 memcpy(buf
+ tRNS_off
, "tEXt", 4);
755 hr
= create_decoder(buf
, sizeof(buf
), &decoder
);
756 if (!is_valid_png_type_depth(td
[i
].color_type
, td
[i
].bit_depth
, TRUE
))
757 ok(hr
== WINCODEC_ERR_UNKNOWNIMAGEFORMAT
, "%d: wrong error %#x\n", i
, hr
);
759 todo_wine_if(td
[i
].todo_load
)
760 ok(hr
== S_OK
, "%d: Failed to load PNG image data (type %d, bpp %d) %#x\n", i
, td
[i
].color_type
, td
[i
].bit_depth
, hr
);
761 if (hr
!= S_OK
) goto next_2
;
763 hr
= IWICBitmapDecoder_GetFrame(decoder
, 0, &frame
);
764 ok(hr
== S_OK
, "GetFrame error %#x\n", hr
);
766 hr
= IWICBitmapFrameDecode_GetPixelFormat(frame
, &format
);
767 ok(hr
== S_OK
, "GetPixelFormat error %#x\n", hr
);
768 ok(IsEqualGUID(&format
, td
[i
].format_PLTE
),
769 "PLTE: expected %s, got %s (type %d, bpp %d)\n",
770 wine_dbgstr_guid(td
[i
].format_PLTE
), wine_dbgstr_guid(&format
), td
[i
].color_type
, td
[i
].bit_depth
);
772 IWICBitmapFrameDecode_Release(frame
);
773 IWICBitmapDecoder_Release(decoder
);
776 /* without the tRNS and PLTE chunks */
777 memcpy(buf
, png_1x1_data
, sizeof(png_1x1_data
));
778 buf
[24] = td
[i
].bit_depth
;
779 buf
[25] = td
[i
].color_type
;
780 memcpy(buf
+ PLTE_off
, "tEXt", 4);
781 memcpy(buf
+ tRNS_off
, "tEXt", 4);
783 hr
= create_decoder(buf
, sizeof(buf
), &decoder
);
784 if (!is_valid_png_type_depth(td
[i
].color_type
, td
[i
].bit_depth
, FALSE
))
785 ok(hr
== WINCODEC_ERR_UNKNOWNIMAGEFORMAT
, "%d: wrong error %#x\n", i
, hr
);
787 todo_wine_if(td
[i
].todo_load
)
788 ok(hr
== S_OK
, "%d: Failed to load PNG image data (type %d, bpp %d) %#x\n", i
, td
[i
].color_type
, td
[i
].bit_depth
, hr
);
789 if (hr
!= S_OK
) goto next_3
;
791 hr
= IWICBitmapDecoder_GetFrame(decoder
, 0, &frame
);
792 ok(hr
== S_OK
, "GetFrame error %#x\n", hr
);
794 hr
= IWICBitmapFrameDecode_GetPixelFormat(frame
, &format
);
795 ok(hr
== S_OK
, "GetPixelFormat error %#x\n", hr
);
796 ok(IsEqualGUID(&format
, td
[i
].format
),
797 "expected %s, got %s (type %d, bpp %d)\n",
798 wine_dbgstr_guid(td
[i
].format
), wine_dbgstr_guid(&format
), td
[i
].color_type
, td
[i
].bit_depth
);
800 IWICBitmapFrameDecode_Release(frame
);
801 IWICBitmapDecoder_Release(decoder
);
804 /* without the PLTE chunk */
805 memcpy(buf
, png_1x1_data
, sizeof(png_1x1_data
));
806 buf
[24] = td
[i
].bit_depth
;
807 buf
[25] = td
[i
].color_type
;
808 memcpy(buf
+ PLTE_off
, "tEXt", 4);
810 hr
= create_decoder(buf
, sizeof(buf
), &decoder
);
811 if (!is_valid_png_type_depth(td
[i
].color_type
, td
[i
].bit_depth
, FALSE
))
812 ok(hr
== WINCODEC_ERR_UNKNOWNIMAGEFORMAT
, "%d: wrong error %#x\n", i
, hr
);
814 todo_wine_if(td
[i
].todo_load
)
815 ok(hr
== S_OK
, "%d: Failed to load PNG image data (type %d, bpp %d) %#x\n", i
, td
[i
].color_type
, td
[i
].bit_depth
, hr
);
816 if (hr
!= S_OK
) continue;
818 hr
= IWICBitmapDecoder_GetFrame(decoder
, 0, &frame
);
819 ok(hr
== S_OK
, "GetFrame error %#x\n", hr
);
821 hr
= IWICBitmapFrameDecode_GetPixelFormat(frame
, &format
);
822 ok(hr
== S_OK
, "GetPixelFormat error %#x\n", hr
);
823 todo_wine_if(td
[i
].todo
)
824 ok(IsEqualGUID(&format
, td
[i
].format_PLTE_tRNS
),
825 "tRNS: expected %s, got %s (type %d, bpp %d)\n",
826 wine_dbgstr_guid(td
[i
].format_PLTE_tRNS
), wine_dbgstr_guid(&format
), td
[i
].color_type
, td
[i
].bit_depth
);
828 IWICBitmapFrameDecode_Release(frame
);
829 IWICBitmapDecoder_Release(decoder
);
833 START_TEST(pngformat
)
837 CoInitializeEx(NULL
, COINIT_APARTMENTTHREADED
);
838 hr
= CoCreateInstance(&CLSID_WICImagingFactory
, NULL
, CLSCTX_INPROC_SERVER
,
839 &IID_IWICImagingFactory
, (void **)&factory
);
840 ok(hr
== S_OK
, "CoCreateInstance error %#x\n", hr
);
841 if (FAILED(hr
)) return;
843 test_color_contexts();
845 test_color_formats();
847 IWICImagingFactory_Release(factory
);