我正在尝试使用此代码逐个像素地在我的位图上绘制一个圆圈:
for(int j = ((int)x - 20); j < ((int)x + 20); j++){
for(int k = ((int)y - 20); k < ((int)y + 20); k++){
int colorX = bitmap.getPixel((int)j, (int)k);
if(Color.red(colorX) == 0 && Color.green(colorX) == 0 && Color.blue(colorX) == 0){
if(Math.sqrt(((j - (( int ) x )) ^ 2 ) + ((k - (( int ) y )) ^ 2) ) <= 20)
bitmap.setPixel(j, k, Color.YELLOW);
}
}
}
但是有一个问题,这不是画一个圆圈......它看起来像一个三角形..
有人可以帮助我吗?
提前多多谢谢;)
答案 0 :(得分:2)
我认为你需要使用sin / cos公式来绘制圆,下面的代码是用C ++编写的,但它可以很容易地转换为Java / Android。
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <conio.h>
#include <bios.h>
#include <math.h>
void DrawCircle(int x, int y, int r, int color)
{
static const double PI = 3.1415926535;
double i, angle, x1, y1;
for(i = 0; i < 360; i += 0.1)
{
angle = i;
x1 = r * cos(angle * PI / 180);
y1 = r * sin(angle * PI / 180);
putpixel(x + x1, y + y1, color);
}
}
答案 1 :(得分:1)
你的错误是^的错误使用,它不是权力运算符
关于我在评论中提到的xfer模式,请参阅此自定义视图:
class V extends View {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Xfermode mode = new AvoidXfermode(Color.BLACK, 0, AvoidXfermode.Mode.TARGET);
public V(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
int w = getWidth();
float h = getHeight() / 3f;
paint.setXfermode(null);
paint.setColor(Color.RED);
canvas.drawRect(0, 0, w, h, paint);
paint.setColor(Color.BLACK);
canvas.drawRect(0, h, w, 2*h, paint);
paint.setColor(Color.GREEN);
canvas.drawRect(0, 2*h, w, 3*h, paint);
// draw the circle: it draws only in the middle black strip
paint.setColor(Color.WHITE);
paint.setXfermode(mode);
canvas.drawCircle(w/2, 1.5f * h, h, paint);
}
}