MCPcopy Create free account
hub / github.com/alibaba/MNN / setRectToRect

Method setRectToRect

source/cv/Matrix_CV.cpp:389–438  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

387///////////////////////////////////////////////////////////////////////////////
388
389bool Matrix::setRectToRect(const Rect& src, const Rect& dst, ScaleToFit align) {
390 if (src.isEmpty()) {
391 this->reset();
392 return false;
393 }
394
395 if (dst.isEmpty()) {
396 ::memset(fMat, 0, 8 * sizeof(float));
397 fMat[kMPersp2] = 1;
398 this->setTypeMask(kScale_Mask | kRectStaysRect_Mask);
399 } else {
400 float tx, sx = dst.width() / src.width();
401 float ty, sy = dst.height() / src.height();
402 bool xLarger = false;
403
404 if (align != kFill_ScaleToFit) {
405 if (sx > sy) {
406 xLarger = true;
407 sx = sy;
408 } else {
409 sy = sx;
410 }
411 }
412
413 tx = dst.fLeft - src.fLeft * sx;
414 ty = dst.fTop - src.fTop * sy;
415 if (align == kCenter_ScaleToFit || align == kEnd_ScaleToFit) {
416 float diff;
417
418 if (xLarger) {
419 diff = dst.width() - src.width() * sy;
420 } else {
421 diff = dst.height() - src.height() * sy;
422 }
423
424 if (align == kCenter_ScaleToFit) {
425 diff = 0.5f * (diff);
426 }
427
428 if (xLarger) {
429 tx += diff;
430 } else {
431 ty += diff;
432 }
433 }
434
435 this->setScaleTranslate(sx, sy, tx, ty);
436 }
437 return true;
438}
439
440///////////////////////////////////////////////////////////////////////////////
441

Callers 3

MakeRectToRectFunction · 0.80
runMethod · 0.80
MakeRectToRectFunction · 0.80

Calls 4

resetMethod · 0.95
isEmptyMethod · 0.80
widthMethod · 0.45
heightMethod · 0.45

Tested by 1

runMethod · 0.64