| Index: skia/public/type_converters.cc
|
| diff --git a/skia/public/type_converters.cc b/skia/public/type_converters.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2f0191ed5e02ff093d558e4199280f3646a955f3
|
| --- /dev/null
|
| +++ b/skia/public/type_converters.cc
|
| @@ -0,0 +1,129 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "skia/public/type_converters.h"
|
| +
|
| +#include <string.h>
|
| +
|
| +#include "base/logging.h"
|
| +#include "third_party/skia/include/core/SkBitmap.h"
|
| +
|
| +namespace mojo {
|
| +
|
| +namespace {
|
| +
|
| +SkColorType MojoColorTypeToSk(skia::ColorType type) {
|
| + switch (type) {
|
| + case skia::COLOR_TYPE_UNKNOWN:
|
| + return kUnknown_SkColorType;
|
| + case skia::COLOR_TYPE_ALPHA_8:
|
| + return kAlpha_8_SkColorType;
|
| + case skia::COLOR_TYPE_RGB_565:
|
| + return kRGB_565_SkColorType;
|
| + case skia::COLOR_TYPE_ARGB_4444:
|
| + return kARGB_4444_SkColorType;
|
| + case skia::COLOR_TYPE_RGBA_8888:
|
| + return kRGBA_8888_SkColorType;
|
| + case skia::COLOR_TYPE_BGRA_8888:
|
| + return kBGRA_8888_SkColorType;
|
| + case skia::COLOR_TYPE_INDEX_8:
|
| + return kIndex_8_SkColorType;
|
| + case skia::COLOR_TYPE_GRAY_8:
|
| + return kGray_8_SkColorType;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + return kUnknown_SkColorType;
|
| +}
|
| +
|
| +SkAlphaType MojoAlphaTypeToSk(skia::AlphaType type) {
|
| + switch (type) {
|
| + case skia::ALPHA_TYPE_UNKNOWN:
|
| + return kUnknown_SkAlphaType;
|
| + case skia::ALPHA_TYPE_OPAQUE:
|
| + return kOpaque_SkAlphaType;
|
| + case skia::ALPHA_TYPE_PREMUL:
|
| + return kPremul_SkAlphaType;
|
| + case skia::ALPHA_TYPE_UNPREMUL:
|
| + return kUnpremul_SkAlphaType;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + return kUnknown_SkAlphaType;
|
| +}
|
| +
|
| +skia::ColorType SkColorTypeToMojo(SkColorType type) {
|
| + switch (type) {
|
| + case kUnknown_SkColorType:
|
| + return skia::COLOR_TYPE_UNKNOWN;
|
| + case kAlpha_8_SkColorType:
|
| + return skia::COLOR_TYPE_ALPHA_8;
|
| + case kRGB_565_SkColorType:
|
| + return skia::COLOR_TYPE_RGB_565;
|
| + case kARGB_4444_SkColorType:
|
| + return skia::COLOR_TYPE_ARGB_4444;
|
| + case kRGBA_8888_SkColorType:
|
| + return skia::COLOR_TYPE_RGBA_8888;
|
| + case kBGRA_8888_SkColorType:
|
| + return skia::COLOR_TYPE_BGRA_8888;
|
| + case kIndex_8_SkColorType:
|
| + return skia::COLOR_TYPE_INDEX_8;
|
| + case kGray_8_SkColorType:
|
| + return skia::COLOR_TYPE_GRAY_8;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + return skia::COLOR_TYPE_UNKNOWN;
|
| +}
|
| +
|
| +skia::AlphaType SkAlphaTypeToMojo(SkAlphaType type) {
|
| + switch (type) {
|
| + case kUnknown_SkAlphaType:
|
| + return skia::ALPHA_TYPE_UNKNOWN;
|
| + case kOpaque_SkAlphaType:
|
| + return skia::ALPHA_TYPE_OPAQUE;
|
| + case kPremul_SkAlphaType:
|
| + return skia::ALPHA_TYPE_PREMUL;
|
| + case kUnpremul_SkAlphaType:
|
| + return skia::ALPHA_TYPE_UNPREMUL;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + return skia::ALPHA_TYPE_UNKNOWN;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +SkBitmap TypeConverter<SkBitmap, skia::BitmapPtr>::Convert(
|
| + const skia::BitmapPtr& image) {
|
| + SkBitmap bitmap;
|
| + if (!bitmap.tryAllocPixels(SkImageInfo::Make(
|
| + image->width, image->height, MojoColorTypeToSk(image->color_type),
|
| + MojoAlphaTypeToSk(image->alpha_type)))) {
|
| + return SkBitmap();
|
| + }
|
| + if (bitmap.getSize() != image->pixel_data.size()) {
|
| + return SkBitmap();
|
| + }
|
| +
|
| + memcpy(bitmap.getPixels(), &image->pixel_data[0], bitmap.getSize());
|
| + return bitmap;
|
| +}
|
| +
|
| +skia::BitmapPtr TypeConverter<skia::BitmapPtr, SkBitmap>::Convert(
|
| + const SkBitmap& bitmap) {
|
| + skia::BitmapPtr result = skia::Bitmap::New();
|
| + const SkImageInfo& info = bitmap.info();
|
| + result->color_type = SkColorTypeToMojo(info.fColorType);
|
| + result->alpha_type = SkAlphaTypeToMojo(info.fAlphaType);
|
| + result->width = info.fWidth;
|
| + result->height = info.fHeight;
|
| + SkAutoLockPixels lock(bitmap);
|
| + size_t size = bitmap.getSize();
|
| + result->pixel_data = mojo::Array<uint8_t>::New(size);
|
| + memcpy(&result->pixel_data[0], bitmap.getPixels(), size);
|
| + return result.Pass();
|
| +}
|
| +
|
| +} // namespace mojo
|
|
|