diff options
author | reed <reed@chromium.org> | 2014-12-25 14:16:21 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-25 14:16:21 -0800 |
commit | b2a5d7e02fd588d343baf6a7433c483f7af9fd43 (patch) | |
tree | 5bde338961e609ff4d2c7e8675455e677e083034 /src/c | |
parent | b4f629cd688b680eba21a5a08daeaf82bbe65b28 (diff) |
add image-from-codec to c api
BUG=skia:
TBR=
Review URL: https://codereview.chromium.org/822203002
Diffstat (limited to 'src/c')
-rw-r--r-- | src/c/sk_surface.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/c/sk_surface.cpp b/src/c/sk_surface.cpp index 6653a298c4..59c810a56e 100644 --- a/src/c/sk_surface.cpp +++ b/src/c/sk_surface.cpp @@ -6,12 +6,14 @@ */ #include "sk_canvas.h" +#include "sk_data.h" #include "sk_image.h" #include "sk_paint.h" #include "sk_path.h" #include "sk_surface.h" #include "SkCanvas.h" +#include "SkData.h" #include "SkImage.h" #include "SkMaskFilter.h" #include "SkMatrix.h" @@ -119,6 +121,14 @@ static bool from_c_path_direction(sk_path_direction_t cdir, SkPath::Direction* d return false; } +static SkData* AsData(const sk_data_t* cdata) { + return reinterpret_cast<SkData*>(const_cast<sk_data_t*>(cdata)); +} + +static sk_data_t* ToData(SkData* data) { + return reinterpret_cast<sk_data_t*>(data); +} + static sk_rect_t ToRect(const SkRect& rect) { return reinterpret_cast<const sk_rect_t&>(rect); } @@ -143,6 +153,10 @@ static const SkImage* AsImage(const sk_image_t* cimage) { return reinterpret_cast<const SkImage*>(cimage); } +static sk_image_t* ToImage(SkImage* cimage) { + return reinterpret_cast<sk_image_t*>(cimage); +} + static const SkPaint& AsPaint(const sk_paint_t& cpaint) { return reinterpret_cast<const SkPaint&>(cpaint); } @@ -216,6 +230,21 @@ sk_image_t* sk_image_new_raster_copy(const sk_imageinfo_t* cinfo, const void* pi return (sk_image_t*)SkImage::NewRasterCopy(info, pixels, rowBytes); } +#include "SkDecodingImageGenerator.h" + +sk_image_t* sk_image_new_from_data(const sk_data_t* cdata) { + SkImageGenerator* gen = SkDecodingImageGenerator::Create(AsData(cdata), + SkDecodingImageGenerator::Options()); + if (NULL == gen) { + return NULL; + } + return ToImage(SkImage::NewFromGenerator(gen)); +} + +sk_data_t* sk_image_encode(const sk_image_t* cimage) { + return ToData(AsImage(cimage)->encode()); +} + void sk_image_ref(const sk_image_t* cimage) { AsImage(cimage)->ref(); } @@ -591,6 +620,36 @@ sk_maskfilter_t* sk_maskfilter_new_blur(sk_blurstyle_t cstyle, float sigma) { } /////////////////////////////////////////////////////////////////////////////////////////// + +sk_data_t* sk_data_new_with_copy(const void* src, size_t length) { + return ToData(SkData::NewWithCopy(src, length)); +} + +sk_data_t* sk_data_new_from_malloc(const void* memory, size_t length) { + return ToData(SkData::NewFromMalloc(memory, length)); +} + +sk_data_t* sk_data_new_subset(const sk_data_t* csrc, size_t offset, size_t length) { + return ToData(SkData::NewSubset(AsData(csrc), offset, length)); +} + +void sk_data_ref(const sk_data_t* cdata) { + SkSafeRef(AsData(cdata)); +} + +void sk_data_unref(const sk_data_t* cdata) { + SkSafeUnref(AsData(cdata)); +} + +size_t sk_data_get_size(const sk_data_t* cdata) { + return AsData(cdata)->size(); +} + +const void* sk_data_get_data(const sk_data_t* cdata) { + return AsData(cdata)->data(); +} + +/////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// void sk_test_capi(SkCanvas* canvas) { |