adds bitmap support to createFromBuffer

This commit is contained in:
gellert 2016-12-10 00:12:36 +01:00
parent 3290c6b335
commit 39875c90f1
3 changed files with 30 additions and 5 deletions

View file

@ -79,6 +79,8 @@ float GetScaleFactorFromPath(const base::FilePath& path) {
bool AddImageSkiaRep(gfx::ImageSkia* image, bool AddImageSkiaRep(gfx::ImageSkia* image,
const unsigned char* data, const unsigned char* data,
size_t size, size_t size,
int width,
int height,
double scale_factor) { double scale_factor) {
std::unique_ptr<SkBitmap> decoded(new SkBitmap()); std::unique_ptr<SkBitmap> decoded(new SkBitmap());
@ -87,8 +89,17 @@ bool AddImageSkiaRep(gfx::ImageSkia* image,
// Try JPEG. // Try JPEG.
decoded = gfx::JPEGCodec::Decode(data, size); decoded = gfx::JPEGCodec::Decode(data, size);
if (!decoded) if (!decoded) {
return false; // Try Bitmap
if (width > 0 && height > 0) {
decoded.reset(new SkBitmap);
decoded->allocN32Pixels(width, height, false);
decoded->setPixels(
const_cast<void*>(reinterpret_cast<const void*>(data)));
} else {
return false;
}
}
image->AddRepresentation(gfx::ImageSkiaRep(*decoded, scale_factor)); image->AddRepresentation(gfx::ImageSkiaRep(*decoded, scale_factor));
return true; return true;
@ -104,7 +115,7 @@ bool AddImageSkiaRep(gfx::ImageSkia* image,
const unsigned char* data = const unsigned char* data =
reinterpret_cast<const unsigned char*>(file_contents.data()); reinterpret_cast<const unsigned char*>(file_contents.data());
size_t size = file_contents.size(); size_t size = file_contents.size();
return AddImageSkiaRep(image, data, size, scale_factor); return AddImageSkiaRep(image, data, size, 0, 0, scale_factor);
} }
bool PopulateImageSkiaRepsFromPath(gfx::ImageSkia* image, bool PopulateImageSkiaRepsFromPath(gfx::ImageSkia* image,
@ -395,6 +406,13 @@ mate::Handle<NativeImage> NativeImage::CreateFromPath(
// static // static
mate::Handle<NativeImage> NativeImage::CreateFromBuffer( mate::Handle<NativeImage> NativeImage::CreateFromBuffer(
mate::Arguments* args, v8::Local<v8::Value> buffer) { mate::Arguments* args, v8::Local<v8::Value> buffer) {
int width = 0;
int height = 0;
if (args->Length() >= 3) {
args->GetNext(&width);
args->GetNext(&height);
}
double scale_factor = 1.; double scale_factor = 1.;
args->GetNext(&scale_factor); args->GetNext(&scale_factor);
@ -402,6 +420,8 @@ mate::Handle<NativeImage> NativeImage::CreateFromBuffer(
AddImageSkiaRep(&image_skia, AddImageSkiaRep(&image_skia,
reinterpret_cast<unsigned char*>(node::Buffer::Data(buffer)), reinterpret_cast<unsigned char*>(node::Buffer::Data(buffer)),
node::Buffer::Length(buffer), node::Buffer::Length(buffer),
width,
height,
scale_factor); scale_factor);
return Create(args->isolate(), gfx::Image(image_skia)); return Create(args->isolate(), gfx::Image(image_skia));
} }

View file

@ -137,15 +137,17 @@ let image = nativeImage.createFromPath('/Users/somebody/images/icon.png')
console.log(image) console.log(image)
``` ```
### `nativeImage.createFromBuffer(buffer[, scaleFactor])` ### `nativeImage.createFromBuffer(buffer[width, height, scaleFactor])`
* `buffer` [Buffer][buffer] * `buffer` [Buffer][buffer]
* `width` Integer (optional)
* `height` Integer (optional)
* `scaleFactor` Double (optional) * `scaleFactor` Double (optional)
Returns `NativeImage` Returns `NativeImage`
Creates a new `NativeImage` instance from `buffer`. The default `scaleFactor` is Creates a new `NativeImage` instance from `buffer`. The default `scaleFactor` is
1.0. 1.0. If `buffer` is a bitmap, specify `width` and `height` of the image.
### `nativeImage.createFromDataURL(dataURL)` ### `nativeImage.createFromDataURL(dataURL)`

View file

@ -25,6 +25,9 @@ describe('nativeImage module', () => {
const imageC = nativeImage.createFromBuffer(imageA.toJPEG(100)) const imageC = nativeImage.createFromBuffer(imageA.toJPEG(100))
assert.deepEqual(imageC.getSize(), {width: 538, height: 190}) assert.deepEqual(imageC.getSize(), {width: 538, height: 190})
const imageD = nativeImage.createFromBuffer(imageA.toBitmap(), 538, 190)
assert.deepEqual(imageD.getSize(), {width: 538, height: 190})
}) })
}) })