SK_C_API uint32_t sk_bitmap_get_addr_32(sk_bitmap_t* cbitmap, int x, int y);
SK_C_API void* sk_bitmap_get_addr(sk_bitmap_t* cbitmap, int x, int y);
SK_C_API sk_color_t sk_bitmap_get_pixel_color(sk_bitmap_t* cbitmap, int x, int y);
-SK_C_API sk_color_t sk_bitmap_get_index8_color(sk_bitmap_t* cbitmap, int x, int y);
+SK_C_API sk_pmcolor_t sk_bitmap_get_index8_color(sk_bitmap_t* cbitmap, int x, int y);
SK_C_API void sk_bitmap_set_pixel_color(sk_bitmap_t* cbitmap, int x, int y, sk_color_t color);
SK_C_API bool sk_bitmap_ready_to_draw(sk_bitmap_t* cbitmap);
SK_C_API bool sk_bitmap_copy_pixels_to(sk_bitmap_t* cbitmap, void* const dst, size_t dstSize, size_t dstRowBytes, bool preserveDstPad);
SK_C_API void sk_codec_get_scaled_dimensions(sk_codec_t* codec, float desiredScale, sk_isize_t* dimensions);
SK_C_API bool sk_codec_get_valid_subset(sk_codec_t* codec, sk_irect_t* desiredSubset);
SK_C_API sk_encoded_format_t sk_codec_get_encoded_format(sk_codec_t* codec);
-SK_C_API sk_codec_result_t sk_codec_get_pixels(sk_codec_t* codec, const sk_imageinfo_t* info, void* pixels, size_t rowBytes, const sk_codec_options_t* options, sk_color_t ctable[], int* ctableCount);
+SK_C_API sk_codec_result_t sk_codec_get_pixels(sk_codec_t* codec, const sk_imageinfo_t* info, void* pixels, size_t rowBytes, const sk_codec_options_t* options, sk_pmcolor_t ctable[], int* ctableCount);
SK_C_API sk_codec_result_t sk_codec_get_pixels_using_defaults(sk_codec_t* codec, const sk_imageinfo_t* info, void* pixels, size_t rowBytes);
-SK_C_API sk_codec_result_t sk_codec_start_incremental_decode(sk_codec_t* codec, const sk_imageinfo_t* info, void* pixels, size_t rowBytes, const sk_codec_options_t* options, sk_color_t ctable[], int* ctableCount);
+SK_C_API sk_codec_result_t sk_codec_start_incremental_decode(sk_codec_t* codec, const sk_imageinfo_t* info, void* pixels, size_t rowBytes, const sk_codec_options_t* options, sk_pmcolor_t ctable[], int* ctableCount);
SK_C_API sk_codec_result_t sk_codec_incremental_decode(sk_codec_t* codec, int* rowsDecoded);
-SK_C_API sk_codec_result_t sk_codec_start_scanline_decode(sk_codec_t* codec, const sk_imageinfo_t* info, const sk_codec_options_t* options, sk_color_t ctable[], int* ctableCount);
+SK_C_API sk_codec_result_t sk_codec_start_scanline_decode(sk_codec_t* codec, const sk_imageinfo_t* info, const sk_codec_options_t* options, sk_pmcolor_t ctable[], int* ctableCount);
SK_C_API int sk_codec_get_scanlines(sk_codec_t* codec, void* dst, int countLines, size_t rowBytes);
SK_C_API bool sk_codec_skip_scanlines(sk_codec_t* codec, int countLines);
SK_C_API sk_codec_scanline_order_t sk_codec_get_scanline_order(sk_codec_t* codec);
SK_C_PLUS_PLUS_BEGIN_GUARD
SK_C_API void sk_colortable_unref(sk_colortable_t* ctable);
-SK_C_API sk_colortable_t* sk_colortable_new(const sk_color_t* colors, int count);
+SK_C_API sk_colortable_t* sk_colortable_new(const sk_pmcolor_t* colors, int count);
SK_C_API int sk_colortable_count(const sk_colortable_t* ctable);
-SK_C_API void sk_colortable_read_colors(const sk_colortable_t* ctable, sk_color_t** colors);
+SK_C_API void sk_colortable_read_colors(const sk_colortable_t* ctable, sk_pmcolor_t** colors);
SK_C_PLUS_PLUS_END_GUARD
SK_C_API bool sk_bitmapscaler_resize(const sk_pixmap_t* dst, const sk_pixmap_t* src, sk_bitmapscaler_resizemethod_t method);
+SK_C_API sk_color_t sk_color_unpremultiply(const sk_pmcolor_t pmcolor);
+SK_C_API sk_pmcolor_t sk_color_premultiply(const sk_color_t color);
+SK_C_API void sk_color_unpremultiply_array(const sk_pmcolor_t* pmcolors, int size, sk_color_t* colors);
+SK_C_API void sk_color_premultiply_array(const sk_color_t* colors, int size, sk_pmcolor_t* pmcolors);
+
SK_C_PLUS_PLUS_END_GUARD
#endif
SK_C_PLUS_PLUS_BEGIN_GUARD
typedef uint32_t sk_color_t;
+typedef uint32_t sk_pmcolor_t;
/* This macro assumes all arguments are >=0 and <=255. */
#define sk_color_set_argb(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
return AsBitmap(cbitmap)->getColor(x, y);
}
-sk_color_t sk_bitmap_get_index8_color(sk_bitmap_t* cbitmap, int x, int y)
+sk_pmcolor_t sk_bitmap_get_index8_color(sk_bitmap_t* cbitmap, int x, int y)
{
return AsBitmap(cbitmap)->getIndex8Color(x, y);
}
return (sk_encoded_format_t)AsCodec(codec)->getEncodedFormat();
}
-sk_codec_result_t sk_codec_get_pixels(sk_codec_t* codec, const sk_imageinfo_t* cinfo, void* pixels, size_t rowBytes, const sk_codec_options_t* coptions, sk_color_t ctable[], int* ctableCount)
+sk_codec_result_t sk_codec_get_pixels(sk_codec_t* codec, const sk_imageinfo_t* cinfo, void* pixels, size_t rowBytes, const sk_codec_options_t* coptions, sk_pmcolor_t ctable[], int* ctableCount)
{
SkImageInfo info;
from_c(*cinfo, &info);
return (sk_codec_result_t)AsCodec(codec)->getPixels(info, pixels, rowBytes);
}
-sk_codec_result_t sk_codec_start_incremental_decode(sk_codec_t* codec, const sk_imageinfo_t* cinfo, void* pixels, size_t rowBytes, const sk_codec_options_t* coptions, sk_color_t ctable[], int* ctableCount)
+sk_codec_result_t sk_codec_start_incremental_decode(sk_codec_t* codec, const sk_imageinfo_t* cinfo, void* pixels, size_t rowBytes, const sk_codec_options_t* coptions, sk_pmcolor_t ctable[], int* ctableCount)
{
SkImageInfo info;
from_c(*cinfo, &info);
return (sk_codec_result_t)AsCodec(codec)->incrementalDecode(rowsDecoded);
}
-sk_codec_result_t sk_codec_start_scanline_decode(sk_codec_t* codec, const sk_imageinfo_t* cinfo, const sk_codec_options_t* coptions, sk_color_t ctable[], int* ctableCount)
+sk_codec_result_t sk_codec_start_scanline_decode(sk_codec_t* codec, const sk_imageinfo_t* cinfo, const sk_codec_options_t* coptions, sk_pmcolor_t ctable[], int* ctableCount)
{
SkImageInfo info;
from_c(*cinfo, &info);
SkSafeUnref(AsColorTable(ctable));
}
-sk_colortable_t* sk_colortable_new(const sk_color_t* colors, int count) {
+sk_colortable_t* sk_colortable_new(const sk_pmcolor_t* colors, int count) {
return ToColorTable(new SkColorTable(colors, count));
}
return AsColorTable(ctable)->count();
}
-void sk_colortable_read_colors(const sk_colortable_t* ctable, sk_color_t** colors) {
+void sk_colortable_read_colors(const sk_colortable_t* ctable, sk_pmcolor_t** colors) {
*colors = (SkColor*) AsColorTable(ctable)->readColors();
}
const SkPixmap& src = AsPixmap(*csrc);
return SkBitmapScaler::Resize(dst, src, (SkBitmapScaler::ResizeMethod)method);
}
+
+sk_color_t sk_color_unpremultiply(const sk_pmcolor_t pmcolor)
+{
+ return SkUnPreMultiply::PMColorToColor(pmcolor);
+}
+
+sk_pmcolor_t sk_color_premultiply(const sk_color_t color)
+{
+ return SkPreMultiplyColor(color);
+}
+
+void sk_color_unpremultiply_array(const sk_pmcolor_t* pmcolors, int size, sk_color_t* colors)
+{
+ for (int i = 0; i < size; ++i) {
+ colors[i] = SkUnPreMultiply::PMColorToColor(pmcolors[i]);
+ }
+}
+
+void sk_color_premultiply_array(const sk_color_t* colors, int size, sk_pmcolor_t* pmcolors)
+{
+ for (int i = 0; i < size; ++i) {
+ pmcolors[i] = SkPreMultiplyColor(colors[i]);
+ }
+}