Chromium Code Reviews| 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..d5ee883808d88abe79967a97ad4751fe1870235a |
| --- /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::Bitmap>::Convert( |
| + const skia::Bitmap& 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) { |
|
Sam McNally
2015/05/06 06:41:39
How about returning null for a null SkBitmap?
Anand Mistry (off Chromium)
2015/05/06 07:14:24
Done.
|
| + 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 |