coverage.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include <stdlib.h>
  2. #include <assert.h>
  3. #include "qcms.h"
  4. const unsigned char gray_icc[] =
  5. {0x00, 0x00, 0x01, 0x70, 0x4E, 0x4B, 0x4F, 0x4E, 0x02, 0x20, 0x00, 0x00,
  6. 0x6D, 0x6E, 0x74, 0x72, 0x47, 0x52, 0x41, 0x59, 0x58, 0x59, 0x5A, 0x20,
  7. 0x07, 0xCE, 0x00, 0x0B, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  8. 0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4C, 0x00, 0x00, 0x00, 0x00,
  9. 0x6E, 0x6F, 0x6E, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  10. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xD6,
  11. 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x2D, 0x00, 0x00, 0x00, 0x00,
  12. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  13. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  14. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  15. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
  16. 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x4B,
  17. 0x77, 0x74, 0x70, 0x74, 0x00, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x14,
  18. 0x6B, 0x54, 0x52, 0x43, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x0E,
  19. 0x63, 0x70, 0x72, 0x74, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x00, 0x2C,
  20. 0x62, 0x6B, 0x70, 0x74, 0x00, 0x00, 0x01, 0x5C, 0x00, 0x00, 0x00, 0x14,
  21. 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
  22. 0x4E, 0x69, 0x6B, 0x6F, 0x6E, 0x47, 0x72, 0x61, 0x79, 0x47, 0x31, 0x2E,
  23. 0x38, 0x20, 0x76, 0x34, 0x2E, 0x30, 0x2E, 0x30, 0x2E, 0x33, 0x30, 0x30,
  24. 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  25. 0x1A, 0x4E, 0x69, 0x6B, 0x6F, 0x6E, 0x47, 0x72, 0x61, 0x79, 0x47, 0x31,
  26. 0x2E, 0x38, 0x20, 0x76, 0x34, 0x2E, 0x30, 0x2E, 0x30, 0x2E, 0x33, 0x30,
  27. 0x30, 0x30, 0x00, 0x00, 0x58, 0x59, 0x5A, 0x20, 0x00, 0x00, 0x00, 0x00,
  28. 0x00, 0x00, 0xF3, 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x16, 0xCC,
  29. 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  30. 0x01, 0xCD, 0x00, 0x00, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00,
  31. 0x4E, 0x69, 0x6B, 0x6F, 0x6E, 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x20, 0x26,
  32. 0x20, 0x4E, 0x69, 0x6B, 0x6F, 0x6E, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F,
  33. 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x32, 0x30, 0x30, 0x31, 0x00,
  34. 0x58, 0x59, 0x5A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  35. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  36. void test_gray(qcms_profile *output_profile)
  37. {
  38. unsigned char srct[3] = { 221, 79, 129};
  39. unsigned char outt[3];
  40. qcms_transform *transform;
  41. qcms_profile *gray_profile = qcms_profile_from_memory(gray_icc, sizeof(gray_icc));
  42. assert(gray_profile);
  43. transform = qcms_transform_create(gray_profile, QCMS_DATA_GRAY_8, output_profile, QCMS_DATA_RGB_8, QCMS_INTENT_PERCEPTUAL);
  44. qcms_transform_data(transform, srct, outt, 1);
  45. assert(
  46. outt[0] == 0xe4 &&
  47. outt[1] == 0xe4 &&
  48. outt[2] == 0xe4);
  49. qcms_transform_release(transform);
  50. transform = qcms_transform_create(gray_profile, QCMS_DATA_GRAYA_8, output_profile, QCMS_DATA_RGBA_8, QCMS_INTENT_PERCEPTUAL);
  51. qcms_transform_data(transform, srct, outt, 1);
  52. assert(
  53. outt[0] == 0xe4 &&
  54. outt[1] == 0xe4 &&
  55. outt[2] == 0xe4 &&
  56. outt[3] == 79);
  57. qcms_transform_release(transform);
  58. qcms_profile_release(gray_profile);
  59. }
  60. const extern unsigned char gray_icc[];
  61. int main()
  62. {
  63. unsigned char srct[4] = { 221, 79, 129, 92};
  64. unsigned char outt[4];
  65. qcms_transform *transform;
  66. qcms_profile *input_profile, *output_profile, *rgb;
  67. qcms_CIE_xyY white_point = { 0, 0.1, 1.};
  68. qcms_CIE_xyYTRIPLE primaries = { {1, 0.01, 0}, {0, 0, 0.01}, {20, .4, 1.}};
  69. input_profile = qcms_profile_sRGB();
  70. output_profile = qcms_profile_sRGB();
  71. test_gray(output_profile);
  72. rgb = qcms_profile_create_rgb_with_gamma(white_point, primaries, 1.8);
  73. // it is not clear how to create a bogus profile with the above interface
  74. //assert(qcms_profile_is_bogus(rgb));
  75. assert(!qcms_profile_is_bogus(input_profile));
  76. assert(!qcms_profile_is_bogus(output_profile));
  77. transform = qcms_transform_create(input_profile, QCMS_DATA_RGBA_8, output_profile, QCMS_DATA_RGBA_8, QCMS_INTENT_PERCEPTUAL);
  78. qcms_transform_data(transform, srct, outt, 1);
  79. assert(outt[0] == 0xdd && outt[1] == 0x4f && outt[2] == 0x81 && outt[3] == 92);
  80. qcms_transform_release(transform);
  81. transform = qcms_transform_create(input_profile, QCMS_DATA_RGB_8, output_profile, QCMS_DATA_RGB_8, QCMS_INTENT_PERCEPTUAL);
  82. qcms_transform_data(transform, srct, outt, 1);
  83. assert(outt[0] == 0xdd && outt[1] == 0x4f && outt[2] == 0x81);
  84. qcms_transform_release(transform);
  85. qcms_profile_precache_output_transform(output_profile);
  86. transform = qcms_transform_create(input_profile, QCMS_DATA_RGBA_8, output_profile, QCMS_DATA_RGBA_8, QCMS_INTENT_PERCEPTUAL);
  87. qcms_transform_data(transform, srct, outt, 1);
  88. assert(outt[0] == 0xdd && outt[1] == 0x4f && outt[2] == 0x81 && outt[3] == 92);
  89. qcms_transform_release(transform);
  90. transform = qcms_transform_create(input_profile, QCMS_DATA_RGB_8, output_profile, QCMS_DATA_RGB_8, QCMS_INTENT_PERCEPTUAL);
  91. qcms_transform_data(transform, srct, outt, 1);
  92. assert(outt[0] == 0xdd && outt[1] == 0x4f && outt[2] == 0x81);
  93. qcms_transform_release(transform);
  94. test_gray(output_profile);
  95. qcms_profile_release(input_profile);
  96. qcms_profile_release(output_profile);
  97. return 0;
  98. }