说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

菜鸟:求一个24位彩色图片旋转的函数代码

编辑:说三道四文库 发布时间:2018-07-18 05:14
HTML文档下载 WORD文档下载 PDF文档下载
要求旋转后的图片不要出现明显的层次感,我现在用了一个旋转的函数效果不是很好,旋转后整个图像有层次,边缘出现锯齿,然而在photoshop中图片旋转后效果就很好几乎看不到什么层次和锯齿,过渡处理的很好。

请各位高手指点~~~~~~~~

把你现在的函数加上平滑处理
平滑以后感觉图片模糊了,photoshop对256色图像旋转后效果不明显,同样有层次和边缘锯齿,但是彩色图片旋转后效果非常好。
做旋转,可将RGB三个通道分开做,我做过,效果很好
to: chegtion(关玉夫) 能不能发个旋转的函数给我 
Rotate(double Angle)//24位旋转
{
if ( pPixels == NULL )
return Empty;

double dx,dy,dx1,dy1;
int Tcx,Tcy;
dx1 = (double)mSize.cx/2 ;
dy1 = (double)mSize.cy/2;

double sinA = sin(Angle);
double cosA = cos(Angle);
double DstX1,DstY1,DstX2,DstY2,DstX3,DstY3,DstX4,DstY4;//目标图四角坐标(以图像中心为坐标原点)
DstX1 = -cosA*dx1 + sinA*dy1 ;
DstY1 =  sinA*dx1 + cosA*dy1 ;
DstX2 =  cosA*dx1 + sinA*dy1 ;
DstY2 = -sinA*dx1 + cosA*dy1 ;
DstX3 = -cosA*dx1 - sinA*dy1 ;
DstY3 =  sinA*dx1 - cosA*dy1 ;
DstX4 =  cosA*dx1 - sinA*dy1 ;
DstY4 = -sinA*dx1 - cosA*dy1 ;

dx = max(fabs(DstX4-DstX1),fabs(DstX3-DstX2));
dy = max(fabs(DstY4-DstY1),fabs(DstY3-DstY2));

img_Matrix3x3 Matrix3x3 = {  cosA, sinA, 0,
-sinA, cosA, 0,
DstX1+dx/2, DstY4+dy/2, 1}; //clockwize

Tcx = int(dx) ;
Tcy = int(dy) ;
BYTE *pBuf = new BYTE [Tcx * Tcy ];
int i,j;
int SrcLength = mSize.cx * mSize.cy ;
int TarLength = Tcx * Tcy ;
BYTE *pSrcChannel = new BYTE [SrcLength] ;
BYTE *pTarChannel = new BYTE [TarLength] ;
BYTE *pSrc = (BYTE*)pPixels ;
BYTE *pTar = (BYTE*)pBuf ;

for (j = 0 ; j < 3 ; j++)
{
for (i = 0 ; i < SrcLength ; i++)
*(pSrcChannel+i) = *(pSrc + i*3 + j) ;

AffineTransform(pTarChannel, Tcx, Tcy,
pSrcChannel, mSize.cx, mSize.cy, Matrix3x3);

for (i = 0 ; i < TarLength ; i++)
*(pTar + i*3 + j) = *(pTarChannel+i) ;
}
delete []pSrcChannel ;
delete []pTarChannel ;
return true;
}
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘