00001 #include "PaletteTests.h"
00002
00003
00004 struct RGB {
00005 byte red;
00006 byte green;
00007 byte blue;
00008 };
00009
00010 struct BGR {
00011 byte blue;
00012 byte green;
00013 byte red;
00014 };
00015
00016
00017 void
00018 PaletteTests::testAPI() {
00019
00020 auto_ptr<Image> img1(CreateImage(32, 32, PF_I8,
00021 256, PF_R8G8B8));
00022 byte* pixels = (byte*)img1->getPixels();
00023 RGB* palette = (RGB*)img1->getPalette();
00024 for (int i = 0; i < 32 * 32; ++i) {
00025 pixels[i] = i % 256;
00026 }
00027 for (int i = 0; i < 256; ++i) {
00028 palette[i].red = i;
00029 palette[i].green = i;
00030 palette[i].blue = i;
00031 }
00032
00033 CPPUNIT_ASSERT(img1->getFormat() == PF_I8);
00034 CPPUNIT_ASSERT(img1->getPaletteFormat() == PF_R8G8B8);
00035
00036
00037 auto_ptr<Image> clone(CloneImage(img1.get()));
00038 CPPUNIT_ASSERT(clone->getFormat() == PF_I8);
00039 CPPUNIT_ASSERT(clone->getPaletteFormat() == PF_R8G8B8);
00040 CPPUNIT_ASSERT(clone->getPaletteSize() == 256);
00041
00042 AssertImagesEqual("Comparing clone of palettized image",
00043 img1.get(), clone.get());
00044
00045
00046 auto_ptr<Image> conv(CloneImage(img1.get(), PF_R8G8B8));
00047 CPPUNIT_ASSERT(conv->getFormat() == PF_R8G8B8);
00048 CPPUNIT_ASSERT(conv->getPalette() == 0);
00049 CPPUNIT_ASSERT(conv->getPaletteFormat() == PF_DONTCARE);
00050 CPPUNIT_ASSERT(conv->getPaletteSize() == 0);
00051
00052
00053 RGB* conv_pixels = (RGB*)conv->getPixels();
00054 bool exact = true;
00055 for (int i = 0; i < 32 * 32; ++i) {
00056 exact = exact && (conv_pixels[i].red == i % 256 &&
00057 conv_pixels[i].green == i % 256 &&
00058 conv_pixels[i].blue == i % 256);
00059 }
00060 CPPUNIT_ASSERT(exact == true);
00061
00062
00063 auto_ptr<Image> img2(CreateImage(32, 32, PF_I8, 255, PF_R8G8B8));
00064 auto_ptr<Image> img3(CreateImage(32, 32, PF_I8, 257, PF_R8G8B8));
00065 CPPUNIT_ASSERT(img2.get() == 0);
00066 CPPUNIT_ASSERT(img3.get() == 0);
00067
00068
00069
00070 auto_ptr<Image> img4(CreateImage(32, 32, PF_I8));
00071 auto_ptr<Image> img5(CreateImage(32, 32, PF_R8G8B8, 256, PF_R8G8B8));
00072 auto_ptr<Image> img6(CreateImage(32, 32, PF_R8G8B8, 256, PF_I8));
00073 CPPUNIT_ASSERT(img4.get() == 0);
00074 CPPUNIT_ASSERT(img5.get() == 0);
00075 CPPUNIT_ASSERT(img6.get() == 0);
00076
00077
00078
00079
00080 auto_ptr<Image> img7(CreateImage(16, 16, PF_I8, 256, PF_R8G8B8));
00081 CPPUNIT_ASSERT(img7.get() != 0);
00082
00083 pixels = (byte*)img7->getPixels();
00084 for (int i = 0; i < 16 * 16; ++i) {
00085 pixels[i] = i;
00086 }
00087 palette = (RGB*)img7->getPalette();
00088 for (int i = 0; i < 256; ++i) {
00089 palette[i].red = i;
00090 palette[i].green = 255 - i;
00091 palette[i].blue = 127 + (i % 2);
00092 }
00093
00094 auto_ptr<Image> img8(ConvertPalette(CloneImage(img7.get()), PF_B8G8R8));
00095 CPPUNIT_ASSERT(img8.get() != 0);
00096 CPPUNIT_ASSERT(img8->getWidth() == 16);
00097 CPPUNIT_ASSERT(img8->getHeight() == 16);
00098 CPPUNIT_ASSERT(img8->getFormat() == PF_I8);
00099 CPPUNIT_ASSERT(img8->getPaletteSize() == 256);
00100 CPPUNIT_ASSERT(img8->getPaletteFormat() == PF_B8G8R8);
00101
00102 bool pixels_correct = true;
00103 pixels = (byte*)img8->getPixels();
00104 for (int i = 0; i < 16 * 16; ++i) {
00105 pixels_correct = pixels_correct && (pixels[i] == i);
00106 }
00107 CPPUNIT_ASSERT(pixels_correct == true);
00108
00109 bool palette_correct = true;
00110 BGR* bgr_palette = (BGR*)img8->getPalette();
00111 for (int i = 0; i < 256; ++i) {
00112 palette_correct = palette_correct && (
00113 bgr_palette[i].red == i &&
00114 bgr_palette[i].green == 255 - i &&
00115 bgr_palette[i].blue == 127 + (i % 2));
00116 }
00117 CPPUNIT_ASSERT(palette_correct == true);
00118 }
00119
00120
00121 void
00122 PaletteTests::testImages() {
00123 auto_ptr<Image> pcx(OpenImage("images/palettized/pcx.pcx"));
00124
00125
00126
00127
00128 CPPUNIT_ASSERT(pcx.get() && pcx->getFormat() == PF_I8);
00129 }
00130
00131
00132 Test*
00133 PaletteTests::suite() {
00134 typedef TestCaller<PaletteTests> Caller;
00135
00136 TestSuite* suite = new TestSuite();
00137 suite->addTest(new Caller("Palettized Image Tests", &PaletteTests::testAPI));
00138 suite->addTest(new Caller("Palettized Images", &PaletteTests::testImages));
00139 return suite;
00140 }