From 03e444071c110bd46cd1e55e4739637f6ad89ac6 Mon Sep 17 00:00:00 2001 From: Peter Braden Date: Mon, 15 Oct 2012 13:09:37 -0700 Subject: [PATCH] Fix Get / Set - closes #15 --- src/Matrix.cc | 19 +++++++++++++------ test/unit.js | 8 ++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Matrix.cc b/src/Matrix.cc index d738314..cfeac3b 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -129,9 +129,9 @@ Matrix::DblGet(cv::Mat mat, int i, int j){ switch(mat.type()){ case CV_32FC3: pix = mat.at(i, j); - pint &= (uchar) pix.val[2]; - pint &= ((uchar) pix.val[1]) << 8; - pint &= ((uchar) pix.val[0]) << 16; + pint |= (uchar) pix.val[2]; + pint |= ((uchar) pix.val[1]) << 8; + pint |= ((uchar) pix.val[0]) << 16; val = (double) pint; break; @@ -166,6 +166,7 @@ Matrix::Set(const Arguments& args){ int i = args[0]->IntegerValue(); int j = args[1]->IntegerValue(); double val = args[2]->NumberValue(); + int vint = 0; if(args.Length() == 4) { self->mat.at(i,j)[args[3]->NumberValue()] = val; @@ -174,10 +175,16 @@ Matrix::Set(const Arguments& args){ switch(self->mat.type()){ case CV_32FC3: - self->mat.at(i,j)[0] = static_cast (val + 0.5) >> 16; - self->mat.at(i,j)[1] = static_cast (val + 0.5) >> 8; - self->mat.at(i,j)[2] = static_cast (val + 0.5); + vint = static_cast(val + 0.5); + self->mat.at(i,j)[0] = (uchar) (vint >> 16) & 0xff; + self->mat.at(i,j)[1] = (uchar) (vint >> 8) & 0xff; + self->mat.at(i,j)[2] = (uchar) (vint) & 0xff; + //printf("!!!i %x, %x, %x", (vint >> 16) & 0xff, (vint >> 8) & 0xff, (vint) & 0xff); + break; + + default: + self->mat.at(i,j) = val; } diff --git a/test/unit.js b/test/unit.js index 668b270..171bc0e 100755 --- a/test/unit.js +++ b/test/unit.js @@ -72,6 +72,14 @@ vows.describe('Smoke Tests OpenCV').addBatch({ assert.ok(new cv.Matrix); assert.ok(new cv.Matrix(1,2)); } + + , "set/row" : function(cv){ + var mat = new cv.Matrix(1, 2); + mat.set(0,0,3) + mat.set(0,1,5000) + assert.deepEqual(mat.row(0), [3,5000]); + } + , "get/set" : function(cv){ var mat = new cv.Matrix(1,2); assert.equal(mat.set(0,0,3), undefined);