diff --git a/ext/opencv/cvmat.cpp b/ext/opencv/cvmat.cpp index d234099..5a6d1af 100644 --- a/ext/opencv/cvmat.cpp +++ b/ext/opencv/cvmat.cpp @@ -1546,16 +1546,19 @@ VALUE rb_flip_bang(int argc, VALUE *argv, VALUE self) { VALUE format; - int mode = 0; + int mode = 1; if (rb_scan_args(argc, argv, "01", &format) > 0) { - if (rb_to_id(format) == rb_intern("x")) + Check_Type(format, T_SYMBOL); + ID flip_mode = rb_to_id(format); + if (flip_mode == rb_intern("x")) { mode = 1; - else if (rb_to_id(format) == rb_intern("y")) + } + else if (flip_mode == rb_intern("y")) { mode = 0; - else if (rb_to_id(format) == rb_intern("xy")) + } + else if (flip_mode == rb_intern("xy")) { mode = -1; - else - rb_warn("argument may be :x or :y or :xy"); + } } try { cvFlip(CVARR(self), NULL, mode); diff --git a/test/test_cvmat.rb b/test/test_cvmat.rb index 017fe1b..c71fa65 100755 --- a/test/test_cvmat.rb +++ b/test/test_cvmat.rb @@ -809,10 +809,17 @@ class TestCvMat < OpenCVTestCase assert_cvscalar_equal(m0[rj, i], m4[j, i]) assert_cvscalar_equal(m0[rj, ri], m5[j, i]) assert_cvscalar_equal(m0[rj, ri], m6[j, i]) - assert_cvscalar_equal(m0[rj, i], m7[j, i]) - assert_cvscalar_equal(m0[rj, i], m8[j, i]) + assert_cvscalar_equal(m0[j, ri], m7[j, i]) + assert_cvscalar_equal(m0[j, ri], m8[j, i]) } } + + assert_raise(TypeError) { + m0.flip(DUMMY_OBJ) + } + assert_raise(TypeError) { + m0.flip!(DUMMY_OBJ) + } end def test_split