博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MIDP2.0中如何通过代码画半透明的圆和椭圆
阅读量:6228 次
发布时间:2019-06-21

本文共 1296 字,大约阅读时间需要 4 分钟。

  hot3.png

        画圆的思路很简单,就是生成一个半径两倍的正方开的RGB数组,有来装圆上每个点的象素的颜色,如果这个点与圆心的距离 <= 半径,则这个点在圆里面,颜色为半透明的,如果与圆心的距离 > 半径,则这个点在圆外面,全透明,代码如下:

private int[] getCircleAry(int radius, int alpha) {  int[] aryTmp = new int[4*radius*radius];    for (int i = 0; i < 4*radius*radius; i++) {   int x = (int)(i / (2*radius));   int y = i % (2*radius);   int iSum = (radius - x)*(radius - x) + (radius - y)*(radius - y);   if (iSum > radius*radius)    aryTmp = 0x00FF0000; //全透明   else    aryTmp = (alpha << 24) | 0x00FF0000;//半透明  }    return aryTmp;  }

椭圆的思路与圆的很相似,假设椭圆的X轴的半径是6,Y轴的半径是4,帽椭圆的公式v如下:         

         x2/36 + y2/16 = 1

用数学知识处理一下,分子都乘36*16,则公式变成如下:

        16*x2 + 36*y2 = 36*16

再用这个公式来判断点是不是在椭圆里面,是则半透明,否则全透明,代码如下:

private int[] getEllipseAry(int radiusX, int radiusY, int alpha) {  int[] aryTmp = new int[4 * radiusX * radiusY];  int iPosX, iPosY, iSum1, iSum2;  iSum1 = radiusX * radiusX * radiusY * radiusY;    for (int i = 0; i < 4 * radiusX * radiusY; i++) {   iPosX = i % (2 * radiusX);    iPosY = (int)(i / (2 * radiusX));   iSum2 = (radiusX - iPosX) * (radiusX - iPosX) * radiusY * radiusY +    (radiusY - iPosY) * (radiusY - iPosY) * radiusX * radiusX;   if (iSum2 > iSum1)    aryTmp = 0x00FF0000; //全透明   else    aryTmp = (alpha << 24) | (0x0000FF & 0x00FFFFFF); //半透明  }    return aryTmp;  }

转载于:https://my.oschina.net/nmjkl/blog/83514

你可能感兴趣的文章
微信公众平台源码
查看>>
Struts2--HelloWord
查看>>
linux C学习笔记05--信号量与共享内存(进程同步)
查看>>
go-mysql,一个易用的mysql接口框架实现
查看>>
POJ3320 Jessica's Reading Problem【尺取法】
查看>>
201671010117 2016-2017-2《Java程序设计》第八周学习Java心得
查看>>
画廊视图(Gallery)的功能和用法
查看>>
自己动手编写一个VS插件(七)
查看>>
Android里面的Toast
查看>>
mysql双机热备的实现
查看>>
前加绩中国、信雅达高级全栈工程师:吴劲松
查看>>
-bash: pod: command not found 解决办法
查看>>
GCD hdu1695容斥原理
查看>>
Node.js:回调函数
查看>>
python 发送邮件 <QQ+腾讯企业邮箱>
查看>>
细数JDK里的设计模式
查看>>
Linux~上部署.net MVC出现的问题与解决
查看>>
DDD~充血模型和失血模型
查看>>
android DPI与分辨率的关系及计算方式
查看>>
forward_list
查看>>