diff --git a/atom/common/api/atom_api_native_image.cc b/atom/common/api/atom_api_native_image.cc index 38bff3a6ade7..6b873fa7f55a 100644 --- a/atom/common/api/atom_api_native_image.cc +++ b/atom/common/api/atom_api_native_image.cc @@ -65,15 +65,9 @@ float GetScaleFactorFromPath(const base::FilePath& path) { } bool AddImageSkiaRep(gfx::ImageSkia* image, - const base::FilePath& path, + const unsigned char* data, + size_t size, double scale_factor) { - std::string file_contents; - if (!base::ReadFileToString(path, &file_contents)) - return false; - - const unsigned char* data = - reinterpret_cast(file_contents.data()); - size_t size = file_contents.size(); scoped_ptr decoded(new SkBitmap()); // Try PNG first. @@ -88,6 +82,19 @@ bool AddImageSkiaRep(gfx::ImageSkia* image, return true; } +bool AddImageSkiaRep(gfx::ImageSkia* image, + const base::FilePath& path, + double scale_factor) { + std::string file_contents; + if (!base::ReadFileToString(path, &file_contents)) + return false; + + const unsigned char* data = + reinterpret_cast(file_contents.data()); + size_t size = file_contents.size(); + return AddImageSkiaRep(image, data, size, scale_factor); +} + bool PopulateImageSkiaRepsFromPath(gfx::ImageSkia* image, const base::FilePath& path) { bool succeed = false; @@ -209,6 +216,20 @@ mate::Handle NativeImage::CreateFromPath( return Create(isolate, image); } +// static +mate::Handle NativeImage::CreateFromBuffer( + mate::Arguments* args, v8::Handle buffer) { + double scale_factor = 1.; + args->GetNext(&scale_factor); + + gfx::ImageSkia image_skia; + AddImageSkiaRep(&image_skia, + reinterpret_cast(node::Buffer::Data(buffer)), + node::Buffer::Length(buffer), + scale_factor); + return Create(args->isolate(), gfx::Image(image_skia)); +} + // static mate::Handle NativeImage::CreateFromDataURL( v8::Isolate* isolate, const GURL& url) { @@ -235,6 +256,7 @@ void Initialize(v8::Handle exports, v8::Handle unused, mate::Dictionary dict(context->GetIsolate(), exports); dict.SetMethod("createEmpty", &atom::api::NativeImage::CreateEmpty); dict.SetMethod("createFromPath", &atom::api::NativeImage::CreateFromPath); + dict.SetMethod("createFromBuffer", &atom::api::NativeImage::CreateFromBuffer); dict.SetMethod("createFromDataUrl", &atom::api::NativeImage::CreateFromDataURL); } diff --git a/atom/common/api/atom_api_native_image.h b/atom/common/api/atom_api_native_image.h index 3c669004ef46..fab93efc7021 100644 --- a/atom/common/api/atom_api_native_image.h +++ b/atom/common/api/atom_api_native_image.h @@ -21,6 +21,10 @@ namespace gfx { class Size; } +namespace mate { +class Arguments; +} + namespace atom { namespace api { @@ -36,6 +40,8 @@ class NativeImage : public mate::Wrappable { v8::Isolate* isolate, const char* buffer, size_t length); static mate::Handle CreateFromPath( v8::Isolate* isolate, const base::FilePath& path); + static mate::Handle CreateFromBuffer( + mate::Arguments* args, v8::Handle buffer); static mate::Handle CreateFromDataURL( v8::Isolate* isolate, const GURL& url);