求一个线性插值算法例子(50分)

  • 主题发起人 主题发起人 3cs
  • 开始时间 开始时间
3

3cs

Unregistered / Unconfirmed
GUEST, unregistred user!
求一个线性插值算法例子,速度越快越好,谢谢了!
 
真的是没人了吗?我找了一个例子,但在我的机器上运行一次>100毫秒,实在无法满足我的需要,谁能给个优化方案呀,我的要求是<20ms谢谢了~ 例子如下(网上找的):

int __fastcall TResizeDlg::Stretch_Linear(Graphics::TBitmap * aDest, Graphics::TBitmap * aSrc)

{

int sw = aSrc->Width - 1, sh = aSrc->Height - 1, dw = aDest->Width - 1, dh = aDest->Height - 1;

int B, N, x, y;

int nPixelSize = GetPixelSize( aDest->PixelFormat );

BYTE * pLinePrev, *pLineNext;

BYTE * pDest;

BYTE * pA, *pB, *pC, *pD;

for ( int i = 0; i <= dh; ++i )

{

pDest = ( BYTE * )aDest->ScanLine;

y = i * sh / dh;

N = dh - i * sh % dh;

pLinePrev = ( BYTE * )aSrc->ScanLine[y++];

pLineNext = ( N == dh ) ? pLinePrev : ( BYTE * )aSrc->ScanLine[y];

for ( int j = 0; j <= dw; ++j )

{

x = j * sw / dw * nPixelSize;

B = dw - j * sw % dw;

pA = pLinePrev + x;

pB = pA + nPixelSize;

pC = pLineNext + x;

pD = pC + nPixelSize;

if ( B == dw )

{

pB = pA;

pD = pC;

}

for ( int k = 0; k < nPixelSize; ++k )

*pDest++ = ( BYTE )( int )(

( B * N * ( *pA++ - *pB - *pC + *pD ) + dw * N * *pB++

+ dh * B * *pC++ + ( dw * dh - dh * B - dw * N ) * *pD++

+ dw * dh / 2 ) / ( dw * dh )

);

}

}

return 0;

}
 
问题全部自己解决了,高兴呀[:D]散分了!快来快来!都有分的[:D]
 
后退
顶部