首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

[资料]MIDP2.0中怎么通过代码画半透明的圆和椭圆

2012-09-03 
[资料]MIDP2.0中如何通过代码画半透明的圆和椭圆??? 最近在做一个小Demo时,需要画一个半透明的圆,看遍MIDP

[资料]MIDP2.0中如何通过代码画半透明的圆和椭圆

??? 最近在做一个小Demo时,需要画一个半透明的圆,看遍MIDP的API及Nokia UI包的文档,发现没有一个函数能做出此功能,没办法了,只好自已写了.????

?

??? ?画圆的思路很简单,就是生成一个半径两倍的正方开的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;??
}

下面是做出来的效果:
[资料]MIDP2.0中怎么通过代码画半透明的圆和椭圆??[资料]MIDP2.0中怎么通过代码画半透明的圆和椭圆
???

椭圆的思路与圆的很相似,假设椭圆的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;??
}

下面是做出来的效果:
[资料]MIDP2.0中怎么通过代码画半透明的圆和椭圆??[资料]MIDP2.0中怎么通过代码画半透明的圆和椭圆

转贴来自于: http://www.j2medev.com/Article/Class1/Class12/200607/2810.html

?

热点排行