| Index: tests/ARGBImageEncoderTest.cpp
|
| ===================================================================
|
| --- tests/ARGBImageEncoderTest.cpp (working copy)
|
| +++ tests/ARGBImageEncoderTest.cpp (working copy)
|
| @@ -1,4 +1,3 @@
|
| -
|
| /*
|
| * Copyright 2012 Google Inc.
|
| *
|
| @@ -6,92 +5,74 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -/**
|
| - * Tests for SkBitmapTransformer.h and SkBitmapTransformer.cpp
|
| - */
|
| +/** Tests for ARGBImageEncoder. */
|
|
|
| #include "Test.h"
|
| #include "SkBitmap.h"
|
| -#include "SkBitmapTransformer.h"
|
| +#include "SkCanvas.h"
|
| +#include "SkImageEncoder.h"
|
| +#include "SkStream.h"
|
|
|
| namespace skiatest {
|
| - class BitmapTransformerTestClass : public Test {
|
| - public:
|
| - static Test* Factory(void*) {return SkNEW(BitmapTransformerTestClass); }
|
| - protected:
|
| - virtual void onGetName(SkString* name) { name->set("BitmapTransformer"); }
|
| - virtual void onRun(Reporter* reporter) {
|
| - this->fReporter = reporter;
|
| - RunTest();
|
| - }
|
| - private:
|
| - void RunTest() {
|
| - SkBitmap bitmap;
|
| - SkBitmap::Config supportedConfig = SkBitmap::kARGB_8888_Config;
|
| - SkBitmap::Config unsupportedConfig = SkBitmap::kARGB_4444_Config;
|
| - SkBitmapTransformer::PixelFormat supportedPixelFormat =
|
| - SkBitmapTransformer::kARGB_8888_Premul_PixelFormat;
|
| - const int kWidth = 55;
|
| - const int kHeight = 333;
|
|
|
| - // Transformations that we know are unsupported:
|
| - {
|
| - bitmap.setConfig(unsupportedConfig, kWidth, kHeight);
|
| - SkBitmapTransformer transformer = SkBitmapTransformer(bitmap, supportedPixelFormat);
|
| - REPORTER_ASSERT(fReporter, !transformer.isValid());
|
| - }
|
| +class BitmapTransformerTestClass : public Test {
|
| +public:
|
| + static Test* Factory(void*) { return SkNEW(BitmapTransformerTestClass); }
|
| +protected:
|
| + virtual void onGetName(SkString* name) SK_OVERRIDE { name->set("ARGBImageEncoder"); }
|
| + virtual void onRun(Reporter* reporter) SK_OVERRIDE;
|
| +};
|
|
|
| - // Valid transformations:
|
| - {
|
| - // Bytes we expect to get:
|
| - const int kWidth = 3;
|
| - const int kHeight = 5;
|
| - const unsigned char comparisonBuffer[] = {
|
| - // kHeight rows, each with kWidth pixels, premultiplied ARGB for each pixel
|
| - 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, // red
|
| - 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, // green
|
| - 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
|
| - 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
|
| - 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
|
| - };
|
| +static SkBitmap::Config configs[] = {
|
| + SkBitmap::kRGB_565_Config,
|
| + SkBitmap::kARGB_4444_Config,
|
| + SkBitmap::kARGB_8888_Config,
|
| +};
|
|
|
| - // A bitmap that should generate the above bytes:
|
| - bitmap.setConfig(supportedConfig, kWidth, kHeight);
|
| - REPORTER_ASSERT(fReporter, bitmap.allocPixels());
|
| - bitmap.setIsOpaque(true);
|
| - bitmap.eraseColor(SK_ColorBLUE);
|
| - bitmap.lockPixels();
|
| - // Change rows [0,1] from blue to [red,green].
|
| - SkColor oldColor = SK_ColorBLUE;
|
| - SkColor newColors[] = {SK_ColorRED, SK_ColorGREEN};
|
| - for (int y = 0; y <= 1; y++) {
|
| - for (int x = 0; x < kWidth; x++) {
|
| - REPORTER_ASSERT(fReporter, bitmap.getColor(x, y) == oldColor);
|
| - SkPMColor* pixel = static_cast<SkPMColor *>(bitmap.getAddr(x, y));
|
| - *pixel = SkPreMultiplyColor(newColors[y]);
|
| - REPORTER_ASSERT(fReporter, bitmap.getColor(x, y) == newColors[y]);
|
| - }
|
| - }
|
| - bitmap.unlockPixels();
|
| +void BitmapTransformerTestClass::onRun(Reporter* reporter) {
|
| + // Bytes we expect to get:
|
| + const int kWidth = 3;
|
| + const int kHeight = 5;
|
| + const unsigned char comparisonBuffer[] = {
|
| + // kHeight rows, each with kWidth pixels, premultiplied ARGB for each pixel
|
| + 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, // red
|
| + 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, // green
|
| + 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
|
| + 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
|
| + 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue
|
| + };
|
|
|
| - // Transform the bitmap and confirm we got the expected results.
|
| - SkBitmapTransformer transformer = SkBitmapTransformer(bitmap, supportedPixelFormat);
|
| - REPORTER_ASSERT(fReporter, transformer.isValid());
|
| - REPORTER_ASSERT(fReporter, transformer.bytesNeededPerRow() == kWidth * 4);
|
| - REPORTER_ASSERT(fReporter, transformer.bytesNeededTotal() == kWidth * kHeight * 4);
|
| - int bufferSize = transformer.bytesNeededTotal();
|
| - SkAutoMalloc pixelBufferManager(bufferSize);
|
| - char *pixelBuffer = static_cast<char *>(pixelBufferManager.get());
|
| - REPORTER_ASSERT(fReporter,
|
| - transformer.copyBitmapToPixelBuffer(pixelBuffer, bufferSize));
|
| - REPORTER_ASSERT(fReporter, bufferSize == sizeof(comparisonBuffer));
|
| - REPORTER_ASSERT(fReporter, memcmp(pixelBuffer, comparisonBuffer, bufferSize) == 0);
|
| - }
|
| -
|
| + SkAutoTDelete<SkImageEncoder> enc(CreateARGBImageEncoder());
|
| + for (size_t configIndex = 0; configIndex < SK_ARRAY_COUNT(configs); ++configIndex) {
|
| + // A bitmap that should generate the above bytes:
|
| + SkBitmap bitmap;
|
| + {
|
| + bitmap.setConfig(configs[configIndex], kWidth, kHeight);
|
| + REPORTER_ASSERT(reporter, bitmap.allocPixels());
|
| + bitmap.setIsOpaque(true);
|
| + bitmap.eraseColor(SK_ColorBLUE);
|
| + // Change rows [0,1] from blue to [red,green].
|
| + SkCanvas canvas(bitmap);
|
| + SkPaint paint;
|
| + paint.setColor(SK_ColorRED);
|
| + canvas.drawIRect(SkIRect::MakeLTRB(0, 0, kWidth, 1), paint);
|
| + paint.setColor(SK_ColorGREEN);
|
| + canvas.drawIRect(SkIRect::MakeLTRB(0, 1, kWidth, 2), paint);
|
| }
|
|
|
| - Reporter* fReporter;
|
| - };
|
| + // Transform the bitmap.
|
| + int bufferSize = bitmap.width() * bitmap.height() * 4;
|
| + SkAutoMalloc pixelBufferManager(bufferSize);
|
| + char *pixelBuffer = static_cast<char *>(pixelBufferManager.get());
|
| + SkMemoryWStream out(pixelBuffer, bufferSize);
|
| + REPORTER_ASSERT(reporter, enc->encodeStream(&out, bitmap, SkImageEncoder::kDefaultQuality));
|
|
|
| - static TestRegistry gReg(BitmapTransformerTestClass::Factory);
|
| + // Confirm we got the expected results.
|
| + REPORTER_ASSERT(reporter, bufferSize == sizeof(comparisonBuffer));
|
| + REPORTER_ASSERT(reporter, memcmp(pixelBuffer, comparisonBuffer, bufferSize) == 0);
|
| + }
|
| }
|
| +
|
| +static TestRegistry gReg(BitmapTransformerTestClass::Factory);
|
| +
|
| +}
|
|
|