]> git.saurik.com Git - wxWidgets.git/blobdiff - tests/image/image.cpp
XRC: make wxSplitterWindow's sashpos and minpanesize dimensions.
[wxWidgets.git] / tests / image / image.cpp
index d063621dcc1527b8922c96fbfe3e269c0f7ce317..66023ff5443ea866c462240087045574883f7c7d 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     Test wxImage
 // Author:      Francesco Montorsi
 // Created:     2009-05-31
-// RCS-ID:      $Id$
 // Copyright:   (c) 2009 Francesco Montorsi
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -79,6 +78,7 @@ private:
         CPPUNIT_TEST( GIFComment );
         CPPUNIT_TEST( DibPadding );
         CPPUNIT_TEST( BMPFlippingAndRLECompression );
+        CPPUNIT_TEST( ScaleCompare );
     CPPUNIT_TEST_SUITE_END();
 
     void LoadFromSocketStream();
@@ -94,6 +94,7 @@ private:
     void GIFComment();
     void DibPadding();
     void BMPFlippingAndRLECompression();
+    void ScaleCompare();
 
     DECLARE_NO_COPY_CLASS(ImageTestCase)
 };
@@ -908,7 +909,8 @@ void CompareImage(const wxImageHandler& handler, const wxImage& image,
 
     const bool testAlpha = (properties & wxIMAGE_HAVE_ALPHA) != 0;
     if (testAlpha
-        && !(type == wxBITMAP_TYPE_PNG || type == wxBITMAP_TYPE_TGA) )
+        && !(type == wxBITMAP_TYPE_PNG || type == wxBITMAP_TYPE_TGA
+            || type == wxBITMAP_TYPE_TIFF) )
     {
         // don't test images with alpha if this handler doesn't support alpha
         return;
@@ -965,12 +967,28 @@ void CompareImage(const wxImageHandler& handler, const wxImage& image,
     );
 }
 
+static void SetAlpha(wxImage *image)
+{
+    image->SetAlpha();
+
+    unsigned char *ptr = image->GetAlpha();
+    const int width = image->GetWidth();
+    const int height = image->GetHeight();
+    for (int y = 0; y < height; ++y)
+    {
+        for (int x = 0; x < width; ++x)
+        {
+            ptr[y*width + x] = (x*y) & wxIMAGE_ALPHA_OPAQUE;
+        }
+    }
+}
+
 void ImageTestCase::CompareSavedImage()
 {
     // FIXME-VC6: Pre-declare the loop variables for compatibility with
     // pre-standard compilers such as MSVC6 that don't implement proper scope
     // for the variables declared in the for loops.
-    int i, x, y;
+    int i;
 
     wxImage expected24("horse.png");
     CPPUNIT_ASSERT( expected24.IsOk() );
@@ -992,17 +1010,8 @@ void ImageTestCase::CompareSavedImage()
 
     // Create an image with alpha based on the loaded image
     wxImage expected32(expected24);
-    expected32.SetAlpha();
 
-    int width = expected32.GetWidth();
-    int height = expected32.GetHeight();
-    for (y = 0; y < height; ++y)
-    {
-        for (x = 0; x < width; ++x)
-        {
-            expected32.SetAlpha(x, y, (x*y) & wxIMAGE_ALPHA_OPAQUE);
-        }
-    }
+    SetAlpha(&expected32);
 
     const wxList& list = wxImage::GetHandlers();
     for ( wxList::compatibility_iterator node = list.GetFirst();
@@ -1090,9 +1099,19 @@ void ImageTestCase::SavePNG()
 
 }
 
-static void TestTIFFImage(const wxString& option, int value)
+static void TestTIFFImage(const wxString& option, int value,
+    const wxImage *compareImage = NULL)
 {
-    wxImage image("horse.png");
+    wxImage image;
+    if (compareImage)
+    {
+        image = *compareImage;
+    }
+    else
+    {
+        (void) image.LoadFile("horse.png");
+    }
+    CPPUNIT_ASSERT( image.IsOk() );
 
     wxMemoryOutputStream memOut;
     image.SetOption(option, value);
@@ -1110,6 +1129,8 @@ static void TestTIFFImage(const wxString& option, int value)
 
     WX_ASSERT_EQUAL_MESSAGE(("While testing for %s", option),
         value, savedImage.GetOptionInt(option));
+
+    WX_ASSERT_EQUAL_MESSAGE(("HasAlpha() not equal"), image.HasAlpha(), savedImage.HasAlpha());
 }
 
 void ImageTestCase::SaveTIFF()
@@ -1118,6 +1139,20 @@ void ImageTestCase::SaveTIFF()
     TestTIFFImage(wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL, 1);
     TestTIFFImage(wxIMAGE_OPTION_TIFF_PHOTOMETRIC, 0/*PHOTOMETRIC_MINISWHITE*/);
     TestTIFFImage(wxIMAGE_OPTION_TIFF_PHOTOMETRIC, 1/*PHOTOMETRIC_MINISBLACK*/);
+
+    wxImage alphaImage("horse.png");
+    CPPUNIT_ASSERT( alphaImage.IsOk() );
+    SetAlpha(&alphaImage);
+
+    // RGB with alpha
+    TestTIFFImage(wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL, 4, &alphaImage);
+
+    // Grey with alpha
+    TestTIFFImage(wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL, 2, &alphaImage);
+
+    // B/W with alpha
+    alphaImage.SetOption(wxIMAGE_OPTION_TIFF_BITSPERSAMPLE, 1);
+    TestTIFFImage(wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL, 2, &alphaImage);
 }
 
 void ImageTestCase::SaveAnimatedGIF()
@@ -1309,6 +1344,48 @@ void ImageTestCase::BMPFlippingAndRLECompression()
 
     CompareBMPImage("image/horse_rle4.bmp", "image/horse_rle4_flipped.bmp");
 }
+
+
+#define ASSERT_IMAGE_EQUAL_TO_FILE(image, file) \
+    { \
+        wxImage imageFromFile(file); \
+        CPPUNIT_ASSERT_MESSAGE( "Failed to load " file, imageFromFile.IsOk() ); \
+        CPPUNIT_ASSERT_EQUAL( imageFromFile, image ); \
+    }
+
+void ImageTestCase::ScaleCompare()
+{
+    wxImage original;
+    CPPUNIT_ASSERT(original.LoadFile("horse.bmp"));
+
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale( 50,  50, wxIMAGE_QUALITY_BICUBIC),
+                               "image/horse_bicubic_50x50.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(100, 100, wxIMAGE_QUALITY_BICUBIC),
+                               "image/horse_bicubic_100x100.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(150, 150, wxIMAGE_QUALITY_BICUBIC),
+                               "image/horse_bicubic_150x150.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(300, 300, wxIMAGE_QUALITY_BICUBIC),
+                               "image/horse_bicubic_300x300.png");
+
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale( 50,  50, wxIMAGE_QUALITY_BOX_AVERAGE),
+                               "image/horse_box_average_50x50.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(100, 100, wxIMAGE_QUALITY_BOX_AVERAGE),
+                               "image/horse_box_average_100x100.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(150, 150, wxIMAGE_QUALITY_BOX_AVERAGE),
+                               "image/horse_box_average_150x150.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(300, 300, wxIMAGE_QUALITY_BOX_AVERAGE),
+                               "image/horse_box_average_300x300.png");
+
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale( 50,  50, wxIMAGE_QUALITY_BILINEAR),
+                               "image/horse_bilinear_50x50.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(100, 100, wxIMAGE_QUALITY_BILINEAR),
+                               "image/horse_bilinear_100x100.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(150, 150, wxIMAGE_QUALITY_BILINEAR),
+                               "image/horse_bilinear_150x150.png");
+    ASSERT_IMAGE_EQUAL_TO_FILE(original.Scale(300, 300, wxIMAGE_QUALITY_BILINEAR),
+                               "image/horse_bilinear_300x300.png");
+}
+
 #endif //wxUSE_IMAGE