@@ -391,103 +391,59 @@ class Mat extends CvStruct<cvg.Mat> {
391391 T atVec <T >(int row, int col) {
392392 // Vec2b, Vec3b, Vec4b
393393 if (T == Vec2b ) {
394- final p = calloc< cvg.Vec2b > ();
395- cvRun (() => ccore.Mat_GetVec2b (ref, row, col, p));
396- return Vec2b .fromPointer (p) as T ;
394+ return Vec2b .fromPointer (ccore.Mat_GetVec2b (ref, row, col)) as T ;
397395 } else if (T == Vec3b ) {
398- final p = calloc< cvg.Vec3b > ();
399- cvRun (() => ccore.Mat_GetVec3b (ref, row, col, p));
400- return Vec3b .fromPointer (p) as T ;
396+ return Vec3b .fromPointer (ccore.Mat_GetVec3b (ref, row, col)) as T ;
401397 } else if (T == Vec4b ) {
402- final p = calloc< cvg.Vec4b > ();
403- cvRun (() => ccore.Mat_GetVec4b (ref, row, col, p));
404- return Vec4b .fromPointer (p) as T ;
398+ return Vec4b .fromPointer (ccore.Mat_GetVec4b (ref, row, col)) as T ;
405399 }
406400 // Vec2w, Vec3w, Vec4w
407401 else if (T == Vec2w ) {
408- final p = calloc< cvg.Vec2w > ();
409- cvRun (() => ccore.Mat_GetVec2w (ref, row, col, p));
410- return Vec2w .fromPointer (p) as T ;
402+ return Vec2w .fromPointer (ccore.Mat_GetVec2w (ref, row, col)) as T ;
411403 } else if (T == Vec3w ) {
412- final p = calloc< cvg.Vec3w > ();
413- cvRun (() => ccore.Mat_GetVec3w (ref, row, col, p));
414- return Vec3w .fromPointer (p) as T ;
404+ return Vec3w .fromPointer (ccore.Mat_GetVec3w (ref, row, col)) as T ;
415405 } else if (T == Vec4w ) {
416- final p = calloc< cvg.Vec4w > ();
417- cvRun (() => ccore.Mat_GetVec4w (ref, row, col, p));
418- return Vec4w .fromPointer (p) as T ;
406+ return Vec4w .fromPointer (ccore.Mat_GetVec4w (ref, row, col)) as T ;
419407 }
420408 // Vec2s, Vec3s, Vec4s
421409 else if (T == Vec2s ) {
422- final p = calloc< cvg.Vec2s > ();
423- cvRun (() => ccore.Mat_GetVec2s (ref, row, col, p));
424- return Vec2s .fromPointer (p) as T ;
410+ return Vec2s .fromPointer (ccore.Mat_GetVec2s (ref, row, col)) as T ;
425411 } else if (T == Vec3s ) {
426- final p = calloc< cvg.Vec3s > ();
427- cvRun (() => ccore.Mat_GetVec3s (ref, row, col, p));
428- return Vec3s .fromPointer (p) as T ;
412+ return Vec3s .fromPointer (ccore.Mat_GetVec3s (ref, row, col)) as T ;
429413 } else if (T == Vec4s ) {
430- final p = calloc< cvg.Vec4s > ();
431- cvRun (() => ccore.Mat_GetVec4s (ref, row, col, p));
432- return Vec4s .fromPointer (p) as T ;
414+ return Vec4s .fromPointer (ccore.Mat_GetVec4s (ref, row, col)) as T ;
433415 }
434416 // Vec2i, Vec3i, Vec4i, Vec6i, Vec8i
435417 else if (T == Vec2i ) {
436- final p = calloc< cvg.Vec2i > ();
437- cvRun (() => ccore.Mat_GetVec2i (ref, row, col, p));
438- return Vec2i .fromPointer (p) as T ;
418+ return Vec2i .fromPointer (ccore.Mat_GetVec2i (ref, row, col)) as T ;
439419 } else if (T == Vec3i ) {
440- final p = calloc< cvg.Vec3i > ();
441- cvRun (() => ccore.Mat_GetVec3i (ref, row, col, p));
442- return Vec3i .fromPointer (p) as T ;
420+ return Vec3i .fromPointer (ccore.Mat_GetVec3i (ref, row, col)) as T ;
443421 } else if (T == Vec4i ) {
444- final p = calloc< cvg.Vec4i > ();
445- cvRun (() => ccore.Mat_GetVec4i (ref, row, col, p));
446- return Vec4i .fromPointer (p) as T ;
422+ return Vec4i .fromPointer (ccore.Mat_GetVec4i (ref, row, col)) as T ;
447423 } else if (T == Vec6i ) {
448- final p = calloc< cvg.Vec6i > ();
449- cvRun (() => ccore.Mat_GetVec6i (ref, row, col, p));
450- return Vec6i .fromPointer (p) as T ;
424+ return Vec6i .fromPointer (ccore.Mat_GetVec6i (ref, row, col)) as T ;
451425 } else if (T == Vec8i ) {
452- final p = calloc< cvg.Vec8i > ();
453- cvRun (() => ccore.Mat_GetVec8i (ref, row, col, p));
454- return Vec8i .fromPointer (p) as T ;
426+ return Vec8i .fromPointer (ccore.Mat_GetVec8i (ref, row, col)) as T ;
455427 }
456428 // Vec2f, Vec3f, Vec4f, Vec6f
457429 else if (T == Vec2f ) {
458- final p = calloc< cvg.Vec2f > ();
459- cvRun (() => ccore.Mat_GetVec2f (ref, row, col, p));
460- return Vec2f .fromPointer (p) as T ;
430+ return Vec2f .fromPointer (ccore.Mat_GetVec2f (ref, row, col)) as T ;
461431 } else if (T == Vec3f ) {
462- final p = calloc< cvg.Vec3f > ();
463- cvRun (() => ccore.Mat_GetVec3f (ref, row, col, p));
464- return Vec3f .fromPointer (p) as T ;
432+ return Vec3f .fromPointer (ccore.Mat_GetVec3f (ref, row, col)) as T ;
465433 } else if (T == Vec4f ) {
466- final p = calloc< cvg.Vec4f > ();
467- cvRun (() => ccore.Mat_GetVec4f (ref, row, col, p));
468- return Vec4f .fromPointer (p) as T ;
434+ return Vec4f .fromPointer (ccore.Mat_GetVec4f (ref, row, col)) as T ;
469435 } else if (T == Vec6f ) {
470- final p = calloc< cvg.Vec6f > ();
471- cvRun (() => ccore.Mat_GetVec6f (ref, row, col, p));
472- return Vec6f .fromPointer (p) as T ;
436+ return Vec6f .fromPointer (ccore.Mat_GetVec6f (ref, row, col)) as T ;
473437 }
474438 // Vec2d, Vec3d, Vec4d, Vec6d
475439 else if (T == Vec2d ) {
476- final p = calloc< cvg.Vec2d > ();
477- cvRun (() => ccore.Mat_GetVec2d (ref, row, col, p));
478- return Vec2d .fromPointer (p) as T ;
440+ return Vec2d .fromPointer (ccore.Mat_GetVec2d (ref, row, col)) as T ;
479441 } else if (T == Vec3d ) {
480- final p = calloc< cvg.Vec3d > ();
481- cvRun (() => ccore.Mat_GetVec3d (ref, row, col, p));
482- return Vec3d .fromPointer (p) as T ;
442+ return Vec3d .fromPointer (ccore.Mat_GetVec3d (ref, row, col)) as T ;
483443 } else if (T == Vec4d ) {
484- final p = calloc< cvg.Vec4d > ();
485- cvRun (() => ccore.Mat_GetVec4d (ref, row, col, p));
486- return Vec4d .fromPointer (p) as T ;
444+ return Vec4d .fromPointer (ccore.Mat_GetVec4d (ref, row, col)) as T ;
487445 } else if (T == Vec6d ) {
488- final p = calloc< cvg.Vec6d > ();
489- cvRun (() => ccore.Mat_GetVec6d (ref, row, col, p));
490- return Vec6d .fromPointer (p) as T ;
446+ return Vec6d .fromPointer (ccore.Mat_GetVec6d (ref, row, col)) as T ;
491447 } else {
492448 throw UnsupportedError ("at<$T >() for ${type .asString ()} is not supported!" );
493449 }
@@ -653,14 +609,12 @@ class Mat extends CvStruct<cvg.Mat> {
653609 ///
654610 /// https://docs.opencv.org/4.x/d3/d63/classcv_1_1Mat.html#a8b2912f6a6f5d55a3c9a7aae9134d862
655611 ffi.Pointer <T > ptrAt< T extends ffi.NativeType > (int i0, [int ? i1, int ? i2]) {
656- final step = this .step;
657-
658- ffi.Pointer <U8 > pp = dataPtr + i0 * step.$1;
659- if (i1 != null ) {
660- pp += i1 * step.$2;
661- if (i2 != null ) pp += i2 * step.$3;
662- }
663- return pp.cast <T >();
612+ return switch ((i1, i2)) {
613+ (null , null ) => ccore.Mat_Ptr_u8_1 (ref, i0).cast <T >(),
614+ (final int i1, null ) => ccore.Mat_Ptr_u8_2 (ref, i0, i1).cast <T >(),
615+ (final int i1, final int i2) => ccore.Mat_Ptr_u8_3 (ref, i0, i1, i2).cast <T >(),
616+ _ => throw UnsupportedError ("ptrAt<$T >() for i1=$i1 , i2=$i2 is not supported!" ),
617+ };
664618 }
665619
666620 Float16P ptrAtF16 (int i0, [int ? i1, int ? i2]) => ptrAt <U16 >(i0, i1, i2).asFp16 ();
0 commit comments