diff --git a/src/Image.cc b/src/Image.cc index daa2ba6..3f52baa 100644 --- a/src/Image.cc +++ b/src/Image.cc @@ -124,10 +124,24 @@ Image::Save(const v8::Arguments& args){ Handle Image::ToBuffer(const v8::Arguments& args){ HandleScope scope; - //Buffer *buf = Buffer::New(mat->length); - //cv::imencode('.jpg', mat, vec, CV_IMWRITE_JPEG_QUALITY 90) + + Image *self = ObjectWrap::Unwrap(args.This()); + + vector vec(0); + vector params(0);//CV_IMWRITE_JPEG_QUALITY 90 - return scope.Close(Number::New(0)); + cv::imencode(".jpg", self->mat, vec, params); + + node::Buffer *buf = node::Buffer::New(vec.size()); + uchar* data = (uchar*) Buffer::Data(buf); + memcpy(data, &vec[0], vec.size()); + + v8::Local globalObj = v8::Context::GetCurrent()->Global(); + v8::Local bufferConstructor = v8::Local::Cast(globalObj->Get(v8::String::New("Buffer"))); + v8::Handle constructorArgs[3] = {buf->handle_, v8::Integer::New(vec.size()), v8::Integer::New(0)}; + v8::Local actualBuffer = bufferConstructor->NewInstance(3, constructorArgs); + + return scope.Close(actualBuffer); } diff --git a/test/smoke.js b/test/smoke.js index 33d6b74..134777e 100644 --- a/test/smoke.js +++ b/test/smoke.js @@ -103,7 +103,15 @@ vows.describe('Smoke Tests OpenCV').addBatch({ , ".ellipse": function(cv){ assert.equal(new cv.Image("./examples/mona.jpg").ellipse(10, 10, 10, 10), undefined) } - + + , "toBuffer": function(cv){ + var buf = fs.readFileSync('./examples/mona.jpg') + , im = new cv.Image(buf.slice(0)) + , buf0 = im.toBuffer() + assert.ok(buf0); + + //assert.equal(buf.toString('base64'), buf0.toString('base64')); + } } , "CascadeClassifier": {