Browse Source

Started getImageData()

v1.x
Tj Holowaychuk 14 years ago
parent
commit
8bdac35743
  1. 20
      lib/context2d.js
  2. 7
      src/ImageData.cc
  3. 3
      src/ImageData.h
  4. 7
      src/PixelArray.cc
  5. 2
      src/PixelArray.h

20
lib/context2d.js

@ -12,6 +12,8 @@
var canvas = require('../build/default/canvas')
, Context2d = canvas.CanvasRenderingContext2d
, CanvasGradient = canvas.CanvasGradient
, ImageData = canvas.ImageData
, PixelArray = canvas.CanvasPixelArray
, colors = require('./colors');
/**
@ -448,4 +450,20 @@ Context2d.prototype.__defineSetter__('textAlign', function(val){
Context2d.prototype.__defineGetter__('textAlign', function(){
return this.lastTextAlignment || 'start';
});
});
/**
* Get `ImageData` with the given rect.
*
* @param {Number} x
* @param {Number} y
* @param {Number} width
* @param {Number} height
* @return {ImageData}
* @api public
*/
Context2d.prototype.getImageData = function(x, y, width, height){
var arr = new PixelArray(this.canvas, x, y, width, height);
return new ImageData(arr);
};

7
src/ImageData.cc

@ -33,8 +33,9 @@ Handle<Value>
ImageData::New(const Arguments &args) {
HandleScope scope;
// TODO: arg assertions
PixelArray *data = ObjectWrap::Unwrap<PixelArray>(args[0]->ToObject());
ImageData *imageData = new ImageData(data);
PixelArray *arr = ObjectWrap::Unwrap<PixelArray>(args[0]->ToObject());
ImageData *imageData = new ImageData(arr);
args.This()->Set(String::NewSymbol("data"), args[0]);
imageData->Wrap(args.This());
return args.This();
}
@ -57,4 +58,4 @@ Handle<Value>
ImageData::GetHeight(Local<String> prop, const AccessorInfo &info) {
ImageData *imageData = ObjectWrap::Unwrap<ImageData>(info.This());
return Number::New(imageData->pixelArray()->height());
}
}

3
src/ImageData.h

@ -20,9 +20,8 @@ class ImageData: public node::ObjectWrap {
static Handle<Value> GetHeight(Local<String> prop, const AccessorInfo &info);
inline PixelArray *pixelArray(){ return _arr; }
ImageData(PixelArray *arr): _arr(arr) {}
~ImageData() { delete _arr; };
private:
PixelArray *_arr;
};
#endif
#endif

7
src/PixelArray.cc

@ -56,7 +56,6 @@ PixelArray::New(const Arguments &args) {
default:
return ThrowException(Exception::TypeError(String::New("invalid arguments")));
}
// Let v8 handle accessors (and clamping)
args.This()->SetIndexedPropertiesToPixelData(
arr->data()
@ -81,6 +80,8 @@ PixelArray::GetLength(Local<String> prop, const AccessorInfo &info) {
PixelArray::PixelArray(Canvas *canvas, int src_x, int src_y, int width, int height):
_width(width), _height(height) {
_data = (uint8_t *) malloc(length());
memset(_data, 0, length());
}
PixelArray::PixelArray(int width, int height):
@ -90,5 +91,5 @@ PixelArray::PixelArray(int width, int height):
}
PixelArray::~PixelArray() {
}
free(_data);
}

2
src/PixelArray.h

@ -29,4 +29,4 @@ class PixelArray: public node::ObjectWrap {
int _width, _height;
};
#endif
#endif

Loading…
Cancel
Save