gpt4 book ai didi

java - 如何在 android 中平滑图像的角 [不使用路径的算法...等]

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:29:52 25 4
gpt4 key购买 nike

我问的是如何应用小林算法在android中使图像具有平滑的角我已经编写了一个算法来遍历像素并确定该像素是否应该被删除或不具有图像的角也通过使它的 alpha 值透明 255 来删除像素但是角不平滑并且我正在阅读Xiaolin algorithm for smooth line 但因为我是中级java程序员我不知道如何应用这个算法>>>任何人都可以帮助我如何应用这个算法或建议另一种算法以及如何使用它 这是我的代码

int radius = Integer.parseInt(((EditText)MainActivity.this.findViewById(R.id.editTextRadius)).getText().toString());
int xCenter ;
int yCenter;
Bitmap mutableBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.h);
Bitmap drawaBitmap = mutableBitmap.copy(Bitmap.Config.ARGB_4444, true);


for (int i = 0; i < radius; i++) {
xCenter = radius;
yCenter = radius;
for (int j = 0; j < radius; j++) {
if (Math.pow(i - xCenter , 2) + Math.pow(j - yCenter , 2) > Math.pow(radius, 2) ) {

drawaBitmap.setPixel(i, j,
Color.argb(255, 255, 255, 255));
}

}
xCenter = radius;
yCenter = drawaBitmap.getHeight()-radius;
for (int j = drawaBitmap.getHeight()-1; j > drawaBitmap.getHeight()-radius; j--) {
if (Math.pow(i - xCenter , 2) + Math.pow(j - yCenter , 2) > Math.pow(radius, 2) ) {

drawaBitmap.setPixel(i, j,
Color.argb(255, 255, 255, 255));
}

}
}
for (int i = drawaBitmap.getWidth()-1; i > drawaBitmap.getWidth()-radius; i--) {
xCenter = drawaBitmap.getWidth() - radius;
yCenter = radius;
for (int j = 0; j < radius; j++) {
if (Math.pow(i - xCenter , 2) + Math.pow(j - yCenter , 2) > Math.pow(radius, 2)) {

drawaBitmap.setPixel(i, j,
Color.argb(255, 255, 255, 255));
}

}
xCenter = drawaBitmap.getWidth()-radius;
yCenter = drawaBitmap.getHeight()-radius;
for (int j = drawaBitmap.getHeight()-1; j > drawaBitmap.getHeight()-radius; j--) {
if (Math.pow(i - xCenter , 2) + Math.pow(j - yCenter , 2) > Math.pow(radius, 2) ) {

drawaBitmap.setPixel(i, j,
Color.argb(255, 255, 255, 255));
}

}
}
((ImageView)this.findViewById(R.id.image)).setImageBitmap(drawaBitmap);

提前致谢

最佳答案

所以,我试了一下你的代码,它对我来说工作得很好。我确实添加了我建议给你的更改。这是 ImageView 的 xml:

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layerType="hardware"/>

您看到黑色而不是透明像素的原因可能是因为未设置 layerType。更正后的代码:

// hardcoded this value for testing purposes
int radius = 120;
int xCenter;
int yCenter;
Bitmap mutableBitmap = BitmapFactory.decodeResource(
this.getResources(), R.drawable.h);

// ARGB_8888 // ARGB_4444 has been deprecated
Bitmap drawaBitmap = mutableBitmap.copy(Bitmap.Config.ARGB_8888, true);

for (int i = 0; i < radius; i++) {
xCenter = radius;
yCenter = radius;

for (int j = 0; j < radius; j++) {
if (Math.pow(i - xCenter , 2) + Math.pow(j - yCenter , 2) > Math.pow(radius, 2) ) {

drawaBitmap.setPixel(i, j,
Color.argb(0, 0, 0, 0));
}

}

xCenter = radius;
yCenter = drawaBitmap.getHeight()-radius;

for (int j = drawaBitmap.getHeight()-1; j > drawaBitmap.getHeight()-radius; j--) {

if (Math.pow(i - xCenter , 2) + Math.pow(j - yCenter , 2) > Math.pow(radius, 2) ) {

drawaBitmap.setPixel(i, j,
Color.argb(0, 0, 0, 0));
}

}
}
for (int i = drawaBitmap.getWidth()-1; i > drawaBitmap.getWidth()-radius; i--) {
xCenter = drawaBitmap.getWidth() - radius;
yCenter = radius;

for (int j = 0; j < radius; j++) {
if (Math.pow(i - xCenter , 2) + Math.pow(j - yCenter , 2) > Math.pow(radius, 2)) {

drawaBitmap.setPixel(i, j,
Color.argb(0, 0, 0, 0));
}

}

xCenter = drawaBitmap.getWidth()-radius;
yCenter = drawaBitmap.getHeight()-radius;

for (int j = drawaBitmap.getHeight()-1; j > drawaBitmap.getHeight()-radius; j--) {
if (Math.pow(i - xCenter , 2) + Math.pow(j - yCenter , 2) > Math.pow(radius, 2) ) {

drawaBitmap.setPixel(i, j,
Color.argb(0, 0, 0, 0));


}

}

}

((ImageView) findViewById(R.id.image)).
setBackgroundColor(getResources().getColor(android.R.color.transparent));

((ImageView) findViewById(R.id.imageView1)).setImageBitmap(drawaBitmap);

顺便说一下,您还可以使用 Color.TRANSPARENT 代替 Color.argb(0, 0, 0, 0)

结果:原始和处理

enter image description here

关于java - 如何在 android 中平滑图像的角 [不使用路径的算法...等],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18694000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com