198 uint8_t pattern[40] = {
199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
200 0x00, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
201 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
202 0x00, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
207 uint8_t pattern20[40] = {
208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
209 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
210 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
211 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
216 uint8_t pattern22[40] = {
217 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
218 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
219 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
220 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 uint8_t pattern161[40] = {
226 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
228 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243 auto expected161 =
std::make_unique<
CJBig2_Image>(25, 5, 8, pattern161);
247 auto sub = img32->SubImage(0, 0, 0, 0);
248 EXPECT_EQ(sub->width(), 0);
249 EXPECT_EQ(sub->height(), 0);
252 sub = img32->SubImage(0, 0, 32, 5);
253 EXPECT_EQ(sub->width(), 32);
254 EXPECT_EQ(sub->height(), 5);
255 CheckImageEq(img32.get(), sub.get(), __LINE__);
257 sub = img37->SubImage(0, 0, 32, 5);
258 EXPECT_EQ(sub->width(), 32);
259 EXPECT_EQ(sub->height(), 5);
260 CheckImageEq(img32.get(), sub.get(), __LINE__);
263 sub = img32->SubImage(2, 0, 30, 5);
264 CheckImageEq(expected20.get(), sub.get(), __LINE__);
266 sub = img37->SubImage(2, 2, 30, 5);
267 CheckImageEq(expected22.get(), sub.get(), __LINE__);
270 sub = img37->SubImage(16, 1, 25, 5);
271 CheckImageEq(expected161.get(), sub.get(), __LINE__);
274 sub = img37->SubImage(32, 0, 32, 5);
275 CheckImageEq(expected_zeros.get(), sub.get(), __LINE__);
278 sub = img37->SubImage(2000, 0, 32, 5);
279 CheckImageEq(expected_zeros.get(), sub.get(), __LINE__);
282 sub = img37->SubImage(0, 2000, 32, 5);
283 CheckImageEq(expected_zeros.get(), sub.get(), __LINE__);
286 sub = img37->SubImage(-1, 0, 32, 5);
287 CheckImageEq(expected_zeros.get(), sub.get(), __LINE__);
290 sub = img37->SubImage(0, -1, 32, 5);
291 CheckImageEq(expected_zeros.get(), sub.get(), __LINE__);
294 sub = img37->SubImage(-1, 0, 32, 5);
295 CheckImageEq(expected_zeros.get(), sub.get(), __LINE__);
298 sub = img37->SubImage(0, -1, 32, 5);
299 CheckImageEq(expected_zeros.get(), sub.get(), __LINE__);
302 sub = img37->SubImage(0, 0, 128, 5);
303 EXPECT_EQ(128, sub->width());
304 EXPECT_EQ(5, sub->height());
307 sub = img37->SubImage(0, 0, 32, 40);
308 EXPECT_EQ(32, sub->width());
309 EXPECT_EQ(40, sub->height());
315 uint8_t pattern[24] = {
316 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
317 0x00, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
318 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321 uint8_t expected_pattern[24] = {
322 0x00, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
323 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
324 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
329 auto expected =
std::make_unique<
CJBig2_Image>(37, 3, 8, expected_pattern);
340 img->CopyLine(-1, 0);
342 img->CopyLine(-1, -1);
345 CheckImageEq(expected.get(), img.get(), __LINE__);