FineUI 官方论坛

标题: 谁能给翻译成C#? [打印本页]

作者: 别逼我动豆腐    时间: 2016-3-15 18:02
标题: 谁能给翻译成C#?
//旋转图像内容不变,尺寸相应变大  
IplImage* rotateImage2(IplImage* img, int degree)   
{   
    double angle = degree  * CV_PI / 180.;   
    double a = sin(angle), b = cos(angle);   
    int width=img->width, height=img->height;  
    //旋转后的新图尺寸  
    int width_rotate= int(height * fabs(a) + width * fabs(b));   
    int height_rotate=int(width * fabs(a) + height * fabs(b));   
    IplImage* img_rotate = cvCreateImage(cvSize(width_rotate, height_rotate), img->depth, img->nChannels);   
    cvZero(img_rotate);   
    //保证原图可以任意角度旋转的最小尺寸  
    int tempLength = sqrt((double)width * width + (double)height *height) + 10;   
    int tempX = (tempLength + 1) / 2 - width / 2;   
    int tempY = (tempLength + 1) / 2 - height / 2;   
    IplImage* temp = cvCreateImage(cvSize(tempLength, tempLength), img->depth, img->nChannels);   
    cvZero(temp);   
    //将原图复制到临时图像tmp中心  
    cvSetImageROI(temp, cvRect(tempX, tempY, width, height));   
    cvCopy(img, temp, NULL);   
    cvResetImageROI(temp);   
    //旋转数组map  
    // [ m0  m1  m2 ] ===>  [ A11  A12   b1 ]  
    // [ m3  m4  m5 ] ===>  [ A21  A22   b2 ]  
    float m[6];   
    int w = temp->width;   
    int h = temp->height;   
    m[0] = b;   
    m[1] = a;   
    m[3] = -m[1];   
    m[4] = m[0];   
    // 将旋转中心移至图像中间   
    m[2] = w * 0.5f;   
    m[5] = h * 0.5f;   
    CvMat M = cvMat(2, 3, CV_32F, m);   
    cvGetQuadrangleSubPix(temp, img_rotate, &M);   
    cvReleaseImage(&temp);   
    return img_rotate;  
}





欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4