图片每30度旋转.txt

来自「收集到的一些J2ME资料。。 包括图片的角度翻转。。A*算法和一些其他文章」· 文本 代码 · 共 28 行

TXT
28
字号
经常看到大家在搞j2me开发时,问到图形旋转的问题,虽然midp2.0提供了sprite类,可以进行图像的旋转,但也只能是90度的倍数,对于任意角度的旋转就成了问题,本人在写一个游戏中,就碰到了要对图形进行30度倍数旋转的问题,为此,我特请图像专家兼本站技术管理员阿新写了下面这个图像旋转的算法,希望对大家有所帮助!

 // 这是一个把图像绕中心点旋转一个角度的程序代码
 // OriginImage传入原始图像,函数的返回值是旋转后的图像
 // 这段代码只能旋转30度的整数倍角度,如果要旋转更精细
 // 改一下tabCos,tabSin就行了,这两个数组保存的是cos和sin乘于4096的值
 int[] tabCos = {4096,3547,2048,0,-2048,-3547,-4096,-3547,-2048,0,2048,3547};
 int[] tabSin = {0,2048,3547,4096,3547,2048,0,-2048,-3547,-4096,-3547,-2048};
 private Image TransferImage(Image OriginImage, int angle) {
  int w         = OriginImage.getWidth();
  int h         = OriginImage.getHeight();
  int ARGBData[]     = new int[w * h];
  int TranARGBData[] = new int[w * h];
  OriginImage.getRGB(ARGBData, 0, w, 0, 0, w, h);
  int centerX = (w + 1)/2;
  int centerY = (h + 1)/2;
  int i = angle / 30;
  for(int y1 = 0; y1 < h; y1++) {
   for(int x1 = 0; x1 < w; x1++)   {
    int x2 = (((x1 - centerX) * tabCos[i]) >> 12) - (((y1 - centerY) * tabSin[i]) >> 12) + centerX;
    int y2 = (((x1 - centerX) * tabSin[i]) >> 12) + (((y1 - centerY) * tabCos[i]) >> 12) + centerY;
    if ((x2 >= 0)&&(x2 < w)&&(y2 >= 0)&&(y2 < h)) {
     TranARGBData[y2 * w + x2] = ARGBData[y1 * w + x1];
    }
   }
  }
  return Image.createRGBImage(TranARGBData, w, h, true);
 }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?