@@ -504,6 +504,54 @@ mate::Handle<NativeImage> NativeImage::CreateFromPath(
504504 return handle;
505505}
506506
507+ // static
508+ mate::Handle<NativeImage> NativeImage::CreateFromBitmap (
509+ mate::Arguments* args,
510+ v8::Local<v8::Value> buffer,
511+ const mate::Dictionary& options) {
512+ if (!node::Buffer::HasInstance (buffer)) {
513+ args->ThrowError (" buffer must be a node Buffer" );
514+ return mate::Handle<NativeImage>();
515+ }
516+
517+ unsigned int width = 0 ;
518+ unsigned int height = 0 ;
519+ double scale_factor = 1 .;
520+
521+ if (!options.Get (" width" , &width)) {
522+ args->ThrowError (" width is required" );
523+ return mate::Handle<NativeImage>();
524+ }
525+
526+ if (!options.Get (" height" , &height)) {
527+ args->ThrowError (" height is required" );
528+ return mate::Handle<NativeImage>();
529+ }
530+
531+ auto info = SkImageInfo::MakeN32 (width, height, kPremul_SkAlphaType );
532+ auto size_bytes = info.computeMinByteSize ();
533+
534+ if (size_bytes != node::Buffer::Length (buffer)) {
535+ args->ThrowError (" invalid buffer size" );
536+ return mate::Handle<NativeImage>();
537+ }
538+
539+ options.Get (" scaleFactor" , &scale_factor);
540+
541+ if (width == 0 || height == 0 ) {
542+ return CreateEmpty (args->isolate ());
543+ }
544+
545+ SkBitmap bitmap;
546+ bitmap.allocN32Pixels (width, height, false );
547+ bitmap.setPixels (node::Buffer::Data (buffer));
548+
549+ gfx::ImageSkia image_skia;
550+ image_skia.AddRepresentation (gfx::ImageSkiaRep (bitmap, scale_factor));
551+
552+ return Create (args->isolate (), gfx::Image (image_skia));
553+ }
554+
507555// static
508556mate::Handle<NativeImage> NativeImage::CreateFromBuffer (
509557 mate::Arguments* args,
@@ -618,6 +666,7 @@ void Initialize(v8::Local<v8::Object> exports,
618666 mate::Dictionary dict (context->GetIsolate (), exports);
619667 dict.SetMethod (" createEmpty" , &atom::api::NativeImage::CreateEmpty);
620668 dict.SetMethod (" createFromPath" , &atom::api::NativeImage::CreateFromPath);
669+ dict.SetMethod (" createFromBitmap" , &atom::api::NativeImage::CreateFromBitmap);
621670 dict.SetMethod (" createFromBuffer" , &atom::api::NativeImage::CreateFromBuffer);
622671 dict.SetMethod (" createFromDataURL" ,
623672 &atom::api::NativeImage::CreateFromDataURL);
0 commit comments