Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

PaletteTests.cpp

Go to the documentation of this file.
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   // make sure basic palettized image stuff works
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   // duplicate
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   // convert to R8G8B8
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   // make sure the converted image is right
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   // passing in an invalid palette size should fail
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   // can't create palettized images with direct-color CreateImage and
00069   // vice versa
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   // test ConvertPaletteFormat
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   // @todo  test BMP images
00125   // @todo  test PNG images
00126   // @todo  test GIF images
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 }

Generated on Thu Oct 2 12:59:31 2003 for corona by doxygen1.3-rc1