Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2012 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkImageEncoder.h"
      9 
     10 #include "SkBitmap.h"
     11 #include "SkCanvas.h"
     12 #include "SkStream.h"
     13 #include "Test.h"
     14 
     15 static SkColorType gColorTypes[] = {
     16     kRGB_565_SkColorType,
     17     kN32_SkColorType,
     18 };
     19 
     20 DEF_TEST(ARGBImageEncoder, reporter) {
     21     // Bytes we expect to get:
     22     const int kWidth = 3;
     23     const int kHeight = 5;
     24     const unsigned char comparisonBuffer[] = {
     25         // kHeight rows, each with kWidth pixels, premultiplied ARGB for each pixel
     26         0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, // red
     27         0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, // green
     28         0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
     29         0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
     30         0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
     31     };
     32 
     33     SkAutoTDelete<SkImageEncoder> enc(CreateARGBImageEncoder());
     34     for (size_t ctIndex = 0; ctIndex < SK_ARRAY_COUNT(gColorTypes); ++ctIndex) {
     35         // A bitmap that should generate the above bytes:
     36         SkBitmap bitmap;
     37         {
     38             bool success = bitmap.allocPixels(SkImageInfo::Make(kWidth, kHeight,
     39                                                         gColorTypes[ctIndex], kOpaque_SkAlphaType));
     40             REPORTER_ASSERT(reporter, success);
     41             bitmap.eraseColor(SK_ColorBLUE);
     42             // Change rows [0,1] from blue to [red,green].
     43             SkCanvas canvas(bitmap);
     44             SkPaint paint;
     45             paint.setColor(SK_ColorRED);
     46             canvas.drawIRect(SkIRect::MakeLTRB(0, 0, kWidth, 1), paint);
     47             paint.setColor(SK_ColorGREEN);
     48             canvas.drawIRect(SkIRect::MakeLTRB(0, 1, kWidth, 2), paint);
     49         }
     50 
     51         // Transform the bitmap.
     52         int bufferSize = bitmap.width() * bitmap.height() * 4;
     53         SkAutoMalloc pixelBufferManager(bufferSize);
     54         char *pixelBuffer = static_cast<char *>(pixelBufferManager.get());
     55         SkMemoryWStream out(pixelBuffer, bufferSize);
     56         REPORTER_ASSERT(reporter, enc->encodeStream(&out, bitmap, SkImageEncoder::kDefaultQuality));
     57 
     58         // Confirm we got the expected results.
     59         REPORTER_ASSERT(reporter, bufferSize == sizeof(comparisonBuffer));
     60         REPORTER_ASSERT(reporter, memcmp(pixelBuffer, comparisonBuffer, bufferSize) == 0);
     61     }
     62 }
     63