sdlgq 发表于 2010-11-27 11:09:50

mark一下!牛人

steven_sd 发表于 2010-11-27 11:26:59

GUI方面的专家...

bmagui 发表于 2010-11-27 11:32:03

mrak

dk3chao 发表于 2010-11-30 17:22:05

mark

yuxuelang 发表于 2010-11-30 18:56:22

楼主太帅;了

AG17 发表于 2010-11-30 20:06:10

mark

ffyyy 发表于 2010-11-30 22:21:23

mark

yl604922959 发表于 2010-12-1 10:48:52

markii

denglu 发表于 2010-12-14 23:13:30

Mark

bighigh 发表于 2011-1-12 11:50:08

mark

zlj2008 发表于 2011-1-12 12:24:23

mark

jenkins 发表于 2011-1-12 12:32:36

mark

rafd 发表于 2011-1-27 16:10:34

记号一下

hy317 发表于 2011-1-27 16:20:59

mark

ndt2000 发表于 2011-1-27 16:33:49

好用

chishangpiao 发表于 2011-3-17 09:38:24

羡慕啊,顶

morion 发表于 2011-3-17 10:49:30

牛逼了不得不顶 虽然不懂

yanxiao1227 发表于 2011-3-17 10:54:40

既帅又帅啊!

tonydh 发表于 2011-3-17 11:36:01

MARK

MZ_Guo 发表于 2011-6-4 11:10:55

仰视中

our2008 发表于 2011-6-4 13:23:15

mark

zhikai_wu 发表于 2011-6-4 15:38:54

好东西,,收藏了以后用

zhikai_wu 发表于 2011-6-8 09:54:05

楼主请教个问题,刚才拿了您的代码在STM32上试了下,发现图像右上角在转动时有时会没了一个角,是移植问题吗?
http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_646714XWOZ8A.jpg
右上角没了 (原文件名:111.jpg)
http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_646717ZKX23L.jpg
右角没了 (原文件名:222.jpg)

zhikai_wu 发表于 2011-6-8 09:57:20

还有。。透明是怎么跟背图运算的。。

liuweiele 发表于 2011-6-8 10:12:07

回复【123楼】zhikai_wu
楼主请教个问题,刚才拿了您的代码在stm32上试了下,发现图像右上角在转动时有时会没了一个角,是移植问题吗?


右上角没了 (原文件名:111.jpg)

<center>
右角没了
-----------------------------------------------------------------------

你是用哪个 OS 和 GUI ?

zhikai_wu 发表于 2011-6-8 10:56:19

回复【125楼】liuweiele Liuwei
回复【123楼】zhikai_wu
楼主请教个问题,刚才拿了您的代码在stm32上试了下,发现图像右上角在转动时有时会没了一个角,是移植问题吗?


右上角没了 (原文件名:111.jpg)

<center>
右角没了
-----------------------------------------------------------------------
你是用哪个 os 和 gui ?
-----------------------------------------------------------------------

没用OS和GUI呢

liuweiele 发表于 2011-6-8 11:55:13

回复【126楼】zhikai_wu
-----------------------------------------------------------------------

检查你的 math 库函数是否正常,还有数据类型是否匹配.

zhikai_wu 发表于 2011-6-8 12:34:49

这是改后的程序,如是float radians; 定义成s32图就不会转动。


#define MAX(a,b) ((a) > (b) ? (a) : (b))
#define MIN(a,b) ((a) > (b) ? (b) : (a))
       
       
typedef struct
{
        u16 Width;
        u16 Height;
        u16 Data[];
}IMAGE;

/*******************************************************************************
函数:
功能: 图片旋转
参数: u16 x, u16 y,
返回: x,y: ,hImg : 图片,angle:角度
********************************************************************************/
void RotateImage(int x,int y,IMAGE *hImg,int angle)
{
   float radians;
   s32 cos_a,sin_a,cos_ay,sin_ay;
   s32 point1x,point1y,point2x,point2y,point3x,point3y;
   s32 minx,miny,maxx,maxy;
   s32 xx,yy,xx0,yy0,xx1,yy1,cx,cy,src_dx,src_dy,dst_dx,dst_dy;
   u16 color;
   IMAGE *img;

   ///////////
   //算法优化思路:小数除法->整数除法->乘法->加法
       
   img=hImg;

   src_dx= img->Width;
   src_dy= img->Height;
   angle%= 360;
       
        //计算外接矩形坐标
   radians = (2*(float)3.1415*angle)/(float)360.0;
   cos_a   = (s32)(cos(radians)*(float)65536.0);
   sin_a   = (s32)(sin(radians)*(float)65536.0);
   point1x = (-src_dy*sin_a)>>16;
   point1y = (src_dy*cos_a)>>16;
   point2x = (src_dx*cos_a-src_dy*sin_a)>>16;
   point2y = (src_dy*cos_a+src_dx*sin_a)>>16;
   point3x = (src_dx*cos_a)>>16;
   point3y = (src_dx*sin_a)>>16;
       
       
   minx = MIN(0,MIN(point1x,MIN(point2x,point3x)));
   miny = MIN(0,MIN(point1y,MIN(point2y,point3y)));
       
   maxx = MAX(point1x,MAX(point2x,point3x));
   maxy = MAX(point1y,MAX(point2y,point3y));


   // 取得最小整数
   if(angle>90&&angle<180)
   {
      dst_dx=(int)ceil(-minx);
   }
   else
   {
      dst_dx=(int)ceil(maxx-minx);
   }

   if(angle>180&&angle<270)
   {
      dst_dy=(int)ceil(-miny);
   }
   else
   {
      dst_dy=(int)ceil(maxy-miny);
   }

   cx        =(dst_dx>>1);        //目标位置中心点的x偏移
   cy        =(dst_dy>>1);        //目标位置中心点的y偏移
       
       
   cos_ay        =(miny*cos_a)>>16;       
   sin_ay        =(miny*sin_a)>>16;
   ////////////
//-------------------------------------------------------------
/*        if(((IMAGE*)hImg)->Bpp==32)
   {
   
      //ARGB 8888格式(带Alpha通道)
      for(yy=0;yy<dst_dy;yy++)
      {
         cos_ay        =((yy+miny)*cos_a)>>16;       
         sin_ay        =((yy+miny)*sin_a)>>16;
      ////
         yy0        =y+yy-cy;
                       
         if(yy0<0)                        continue;
         if(yy0>pdc->ymax)        return;
                       
         for(xx=0;xx<dst_dx;xx++)
         {
         ////
            xx1        =((((xx+minx)*cos_a)>>16)+sin_ay); //计算坐标
            yy1        =(cos_ay-(((xx+minx)*sin_a)>>16));
            ////
                               
            xx0        =x+xx-cx;
                               
            if(xx1>=0&&xx1<src_dx&&yy1>=0&&yy1<src_dy&&xx0>0&&xx0<pdc->xmax)
            {
               color        =img->Data;
                                               
               pdc->PutPixel(pdc,xx0,yy0,AlphaBlendColor(color,GetPixel(hdc,xx0,yy0),img->AlphaData));
            }
         }
      }
   }
        else
        {
*/
   //其它格式(不带Alpha通道)
      for(yy=0;yy<dst_dy;yy++)
      {
         cos_ay        =((yy+miny)*cos_a)>>16;
         sin_ay        =((yy+miny)*sin_a)>>16;
         ////
         yy0        =y+yy-cy;
         if(yy0<0)        continue;
         if(yy0>LCD_Ymax)        return;
                       
         for(xx=0;xx<dst_dx;xx++)
         {
            xx1        =((((xx+minx)*cos_a)>>16)+sin_ay);        //计算坐标
            yy1        =(cos_ay-(((xx+minx)*sin_a)>>16));
                                ////
            xx0        =x+xx-cx;
                                       
            if(xx1>=0&&xx1<src_dx&&yy1>=0&&yy1<src_dy&&xx0>0&&xx0<LCD_Xmax)
            {
               color = img->Data;

               LCD_SetCursor(xx0,yy0);   
               TFT_DRAW_Point(color);// 1
            }
         }
      }
//        }
}

zhikai_wu 发表于 2011-6-8 12:39:13

用的是IAR编译

skystalker 发表于 2011-6-9 10:29:52

我做虚拟仪表也是用的旋转图像的办法
就是简单的坐标变换

271736108 发表于 2011-6-9 22:48:13

过来膜拜 下

usingavr 发表于 2011-6-10 09:06:48

mark

xsx728 发表于 2011-6-11 19:01:52

wo ca

shaoyidong 发表于 2011-6-11 19:11:06

mark

SDbeijixing 发表于 2011-6-11 22:21:10

mark

wso75839840 发表于 2011-6-12 20:23:15

太牛逼了

fyyy4030 发表于 2011-6-16 23:16:35

MARK

dianzifanfan 发表于 2011-6-24 12:45:49

mark

ptz19861212 发表于 2011-7-26 10:30:24

mark

xiaosi1102 发表于 2011-8-16 00:46:47

楼主威武!记号备用!

zspzwal 发表于 2011-12-6 18:34:17

好东西 图像旋转

p4s5j6 发表于 2011-12-6 19:24:37

tony_200812 发表于 2011-12-7 11:52:46

mark

jyg886688666 发表于 2011-12-7 15:28:53

膜拜中

taojie 发表于 2011-12-13 14:17:11

厉害

maimaige 发表于 2012-3-1 14:38:46

太牛了,以后也得研究一下这个

d-link2 发表于 2012-3-2 21:03:14

mark

hncjs 发表于 2012-3-4 17:03:28

不错的旋转gui

wutaoforever 发表于 2012-3-4 20:04:04

马克

lixupeng 发表于 2012-3-4 20:15:43

mark

FpvCamera 发表于 2012-3-4 22:12:26

mark 图像旋转

youxin2004 发表于 2012-3-8 08:19:52

好东西又翻出来了

Forever 发表于 2012-3-8 09:09:02

mark

anjf163 发表于 2012-3-8 09:27:39

mark

Achin 发表于 2012-3-8 13:56:29

再做一把MARK党

armku 发表于 2012-3-8 14:28:11

mark

腾飞的北极熊 发表于 2012-4-6 10:19:24

强烈要求楼主写一篇自传,让我们分享一下学习经验{:victory:}

itsun 发表于 2012-4-15 11:54:19

{:time:}{:call:}

Mr_Mo 发表于 2013-1-18 23:52:22

mark 有空再仔细看看。。。

panwenjian 发表于 2013-1-19 08:29:51

mark 收了慢慢看

liujingbin 发表于 2013-1-19 11:31:07

{:3_48:}学习下
页: 1 [2]
查看完整版本: 高效率 图像任意角度旋转算法(用整数运算实现)