Mercurial > hg > orthanc
comparison UnitTestsSources/ImageTests.cpp @ 2699:52217dc47a4e
new image/pam MIME TYPE supported in /instances/../frames/../image-uint8... routes
author | am@osimis.io |
---|---|
date | Thu, 05 Jul 2018 12:25:00 +0200 |
parents | 878b59270859 |
children | 38a3054b22ff |
comparison
equal
deleted
inserted
replaced
2687:2c684841da15 | 2699:52217dc47a4e |
---|---|
39 #include "../Core/Images/ImageProcessing.h" | 39 #include "../Core/Images/ImageProcessing.h" |
40 #include "../Core/Images/JpegReader.h" | 40 #include "../Core/Images/JpegReader.h" |
41 #include "../Core/Images/JpegWriter.h" | 41 #include "../Core/Images/JpegWriter.h" |
42 #include "../Core/Images/PngReader.h" | 42 #include "../Core/Images/PngReader.h" |
43 #include "../Core/Images/PngWriter.h" | 43 #include "../Core/Images/PngWriter.h" |
44 #include "../Core/Images/PamReader.h" | |
45 #include "../Core/Images/PamWriter.h" | |
44 #include "../Core/Toolbox.h" | 46 #include "../Core/Toolbox.h" |
45 #include "../Core/TemporaryFile.h" | 47 #include "../Core/TemporaryFile.h" |
46 #include "../OrthancServer/OrthancInitialization.h" // For the FontRegistry | 48 #include "../OrthancServer/OrthancInitialization.h" // For the FontRegistry |
47 | 49 |
48 #include <stdint.h> | 50 #include <stdint.h> |
267 | 269 |
268 Orthanc::PngWriter w; | 270 Orthanc::PngWriter w; |
269 w.WriteToFile("UnitTestsResults/font.png", s); | 271 w.WriteToFile("UnitTestsResults/font.png", s); |
270 } | 272 } |
271 | 273 |
274 TEST(PamWriter, ColorPattern) | |
275 { | |
276 Orthanc::PamWriter w; | |
277 unsigned int width = 17; | |
278 unsigned int height = 61; | |
279 unsigned int pitch = width * 3; | |
280 | |
281 std::vector<uint8_t> image(height * pitch); | |
282 for (unsigned int y = 0; y < height; y++) | |
283 { | |
284 uint8_t *p = &image[0] + y * pitch; | |
285 for (unsigned int x = 0; x < width; x++, p += 3) | |
286 { | |
287 p[0] = (y % 3 == 0) ? 255 : 0; | |
288 p[1] = (y % 3 == 1) ? 255 : 0; | |
289 p[2] = (y % 3 == 2) ? 255 : 0; | |
290 } | |
291 } | |
292 | |
293 Orthanc::ImageAccessor accessor; | |
294 accessor.AssignReadOnly(Orthanc::PixelFormat_RGB24, width, height, pitch, &image[0]); | |
295 | |
296 w.WriteToFile("UnitTestsResults/ColorPattern.pam", accessor); | |
297 | |
298 std::string f, md5; | |
299 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/ColorPattern.pam"); | |
300 Orthanc::Toolbox::ComputeMD5(md5, f); | |
301 ASSERT_EQ("81a3441754e88969ebbe53e69891e841", md5); | |
302 } | |
303 | |
304 TEST(PamWriter, Gray8Pattern) | |
305 { | |
306 Orthanc::PamWriter w; | |
307 int width = 17; | |
308 int height = 256; | |
309 int pitch = width; | |
310 | |
311 std::vector<uint8_t> image(height * pitch); | |
312 for (int y = 0; y < height; y++) | |
313 { | |
314 uint8_t *p = &image[0] + y * pitch; | |
315 for (int x = 0; x < width; x++, p++) | |
316 { | |
317 *p = y; | |
318 } | |
319 } | |
320 | |
321 Orthanc::ImageAccessor accessor; | |
322 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale8, width, height, pitch, &image[0]); | |
323 | |
324 w.WriteToFile("UnitTestsResults/Gray8Pattern.pam", accessor); | |
325 | |
326 std::string f, md5; | |
327 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray8Pattern.pam"); | |
328 Orthanc::Toolbox::ComputeMD5(md5, f); | |
329 ASSERT_EQ("7873c408d26a9d11dd1c1de5e69cc0a3", md5); | |
330 } | |
331 | |
332 TEST(PamWriter, Gray16Pattern) | |
333 { | |
334 Orthanc::PamWriter w; | |
335 int width = 256; | |
336 int height = 256; | |
337 int pitch = width * 2 + 16; | |
338 | |
339 std::vector<uint8_t> image(height * pitch); | |
340 | |
341 int v = 0; | |
342 for (int y = 0; y < height; y++) | |
343 { | |
344 uint16_t *p = reinterpret_cast<uint16_t*>(&image[0] + y * pitch); | |
345 for (int x = 0; x < width; x++, p++, v++) | |
346 { | |
347 *p = v; | |
348 } | |
349 } | |
350 | |
351 Orthanc::ImageAccessor accessor; | |
352 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale16, width, height, pitch, &image[0]); | |
353 w.WriteToFile("UnitTestsResults/Gray16Pattern.pam", accessor); | |
354 | |
355 std::string f, md5; | |
356 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray16Pattern.pam"); | |
357 Orthanc::Toolbox::ComputeMD5(md5, f); | |
358 ASSERT_EQ("b268772bf28f3b2b8520ff21c5e3dcb6", md5); | |
359 } | |
360 | |
361 TEST(PamWriter, EndToEnd) | |
362 { | |
363 Orthanc::PamWriter w; | |
364 unsigned int width = 256; | |
365 unsigned int height = 256; | |
366 unsigned int pitch = width * 2 + 16; | |
367 | |
368 std::vector<uint8_t> image(height * pitch); | |
369 | |
370 int v = 0; | |
371 for (unsigned int y = 0; y < height; y++) | |
372 { | |
373 uint16_t *p = reinterpret_cast<uint16_t*>(&image[0] + y * pitch); | |
374 for (unsigned int x = 0; x < width; x++, p++, v++) | |
375 { | |
376 *p = v; | |
377 } | |
378 } | |
379 | |
380 Orthanc::ImageAccessor accessor; | |
381 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale16, width, height, pitch, &image[0]); | |
382 | |
383 std::string s; | |
384 w.WriteToMemory(s, accessor); | |
385 | |
386 { | |
387 Orthanc::PamReader r; | |
388 r.ReadFromMemory(s); | |
389 | |
390 ASSERT_EQ(r.GetFormat(), Orthanc::PixelFormat_Grayscale16); | |
391 ASSERT_EQ(r.GetWidth(), width); | |
392 ASSERT_EQ(r.GetHeight(), height); | |
393 | |
394 v = 0; | |
395 for (unsigned int y = 0; y < height; y++) | |
396 { | |
397 const uint16_t *p = reinterpret_cast<const uint16_t*>((const uint8_t*) r.GetConstBuffer() + y * r.GetPitch()); | |
398 ASSERT_EQ(p, r.GetConstRow(y)); | |
399 for (unsigned int x = 0; x < width; x++, p++, v++) | |
400 { | |
401 ASSERT_EQ(v, *p); | |
402 } | |
403 } | |
404 } | |
405 | |
406 { | |
407 Orthanc::TemporaryFile tmp; | |
408 Orthanc::SystemToolbox::WriteFile(s, tmp.GetPath()); | |
409 | |
410 Orthanc::PamReader r2; | |
411 r2.ReadFromFile(tmp.GetPath()); | |
412 | |
413 ASSERT_EQ(r2.GetFormat(), Orthanc::PixelFormat_Grayscale16); | |
414 ASSERT_EQ(r2.GetWidth(), width); | |
415 ASSERT_EQ(r2.GetHeight(), height); | |
416 | |
417 v = 0; | |
418 for (unsigned int y = 0; y < height; y++) | |
419 { | |
420 const uint16_t *p = reinterpret_cast<const uint16_t*>((const uint8_t*) r2.GetConstBuffer() + y * r2.GetPitch()); | |
421 ASSERT_EQ(p, r2.GetConstRow(y)); | |
422 for (unsigned int x = 0; x < width; x++, p++, v++) | |
423 { | |
424 ASSERT_EQ(*p, v); | |
425 } | |
426 } | |
427 } | |
428 } | |
429 |