Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1015)

Side by Side Diff: skia/public/type_converters.cc

Issue 2014013002: Add SkBitmap StructTraits for skia::mojo::Bitmap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync and rebase. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « skia/public/type_converters.h ('k') | skia/skia.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "skia/public/type_converters.h"
6
7 #include <stddef.h>
8 #include <stdint.h>
9 #include <string.h>
10
11 #include "base/logging.h"
12 #include "third_party/skia/include/core/SkBitmap.h"
13
14 namespace mojo {
15
16 namespace {
17
18 SkColorType MojoColorTypeToSk(skia::mojom::ColorType type) {
19 switch (type) {
20 case skia::mojom::ColorType::UNKNOWN:
21 return kUnknown_SkColorType;
22 case skia::mojom::ColorType::ALPHA_8:
23 return kAlpha_8_SkColorType;
24 case skia::mojom::ColorType::RGB_565:
25 return kRGB_565_SkColorType;
26 case skia::mojom::ColorType::ARGB_4444:
27 return kARGB_4444_SkColorType;
28 case skia::mojom::ColorType::RGBA_8888:
29 return kRGBA_8888_SkColorType;
30 case skia::mojom::ColorType::BGRA_8888:
31 return kBGRA_8888_SkColorType;
32 case skia::mojom::ColorType::INDEX_8:
33 return kIndex_8_SkColorType;
34 case skia::mojom::ColorType::GRAY_8:
35 return kGray_8_SkColorType;
36 default:
37 NOTREACHED();
38 }
39 return kUnknown_SkColorType;
40 }
41
42 SkAlphaType MojoAlphaTypeToSk(skia::mojom::AlphaType type) {
43 switch (type) {
44 case skia::mojom::AlphaType::UNKNOWN:
45 return kUnknown_SkAlphaType;
46 case skia::mojom::AlphaType::ALPHA_TYPE_OPAQUE:
47 return kOpaque_SkAlphaType;
48 case skia::mojom::AlphaType::PREMUL:
49 return kPremul_SkAlphaType;
50 case skia::mojom::AlphaType::UNPREMUL:
51 return kUnpremul_SkAlphaType;
52 default:
53 NOTREACHED();
54 }
55 return kUnknown_SkAlphaType;
56 }
57
58 skia::mojom::ColorType SkColorTypeToMojo(SkColorType type) {
59 switch (type) {
60 case kUnknown_SkColorType:
61 return skia::mojom::ColorType::UNKNOWN;
62 case kAlpha_8_SkColorType:
63 return skia::mojom::ColorType::ALPHA_8;
64 case kRGB_565_SkColorType:
65 return skia::mojom::ColorType::RGB_565;
66 case kARGB_4444_SkColorType:
67 return skia::mojom::ColorType::ARGB_4444;
68 case kRGBA_8888_SkColorType:
69 return skia::mojom::ColorType::RGBA_8888;
70 case kBGRA_8888_SkColorType:
71 return skia::mojom::ColorType::BGRA_8888;
72 case kIndex_8_SkColorType:
73 return skia::mojom::ColorType::INDEX_8;
74 case kGray_8_SkColorType:
75 return skia::mojom::ColorType::GRAY_8;
76 default:
77 NOTREACHED();
78 }
79 return skia::mojom::ColorType::UNKNOWN;
80 }
81
82 skia::mojom::AlphaType SkAlphaTypeToMojo(SkAlphaType type) {
83 switch (type) {
84 case kUnknown_SkAlphaType:
85 return skia::mojom::AlphaType::UNKNOWN;
86 case kOpaque_SkAlphaType:
87 return skia::mojom::AlphaType::ALPHA_TYPE_OPAQUE;
88 case kPremul_SkAlphaType:
89 return skia::mojom::AlphaType::PREMUL;
90 case kUnpremul_SkAlphaType:
91 return skia::mojom::AlphaType::UNPREMUL;
92 default:
93 NOTREACHED();
94 }
95 return skia::mojom::AlphaType::UNKNOWN;
96 }
97
98 } // namespace
99
100 SkBitmap TypeConverter<SkBitmap, skia::mojom::BitmapPtr>::Convert(
101 const skia::mojom::BitmapPtr& image) {
102 SkBitmap bitmap;
103 if (image.is_null())
104 return bitmap;
105 if (!bitmap.tryAllocPixels(SkImageInfo::Make(
106 image->width, image->height, MojoColorTypeToSk(image->color_type),
107 MojoAlphaTypeToSk(image->alpha_type)))) {
108 return SkBitmap();
109 }
110 if (bitmap.getSize() != image->pixel_data.size() || !bitmap.getPixels()) {
111 return SkBitmap();
112 }
113
114 memcpy(bitmap.getPixels(), &image->pixel_data[0], bitmap.getSize());
115 return bitmap;
116 }
117
118 skia::mojom::BitmapPtr TypeConverter<skia::mojom::BitmapPtr, SkBitmap>::Convert(
119 const SkBitmap& bitmap) {
120 if (bitmap.isNull())
121 return nullptr;
122
123 // NOTE: This code doesn't correctly serialize Index8 bitmaps.
124 const SkImageInfo& info = bitmap.info();
125 DCHECK_NE(info.colorType(), kIndex_8_SkColorType);
126 if (info.colorType() == kIndex_8_SkColorType)
127 return nullptr;
128 skia::mojom::BitmapPtr result = skia::mojom::Bitmap::New();
129 result->color_type = SkColorTypeToMojo(info.colorType());
130 result->alpha_type = SkAlphaTypeToMojo(info.alphaType());
131 result->width = info.width();
132 result->height = info.height();
133 size_t size = bitmap.getSize();
134 size_t row_bytes = bitmap.rowBytes();
135 result->pixel_data = mojo::Array<uint8_t>::New(size);
136 if (!bitmap.readPixels(info, &result->pixel_data[0], row_bytes, 0, 0))
137 return nullptr;
138 return result;
139 }
140
141 } // namespace mojo
OLDNEW
« no previous file with comments | « skia/public/type_converters.h ('k') | skia/skia.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698