Mit etwas Mathe habe ich die folgende Java-Funktion erstellt, um eine Bitmap einzugeben, und ein zentriertes Quadrat ausschneiden, in dem ein Kreis wieder mit einem schwarzen Rand abgeschnitten wird . Der Rest des Platzes sollte transparent sein. Zusätzlich gibt es einen transparenten Abstand zu den Seiten, um die Vorschau nicht zu beschädigen, wenn das Bild über Boten gesendet wird.Beschneidungsbild senkt Qualität und Rand sieht schlecht aus
Der Code meiner Funktion ist wie folgt:
public static Bitmap edit_image(Bitmap src,boolean makeborder) {
int width = src.getWidth();
int height = src.getHeight();
int A, R, G, B;
int pixel;
int middlex = width/2;
int middley = height/2;
int seitenlaenge,startx,starty;
if(width>height)
{
seitenlaenge=height;
starty=0;
startx = middlex - (seitenlaenge/2);
}
else
{
seitenlaenge=width;
startx=0;
starty = middley - (seitenlaenge/2);
}
int kreisradius = seitenlaenge/2;
int mittx = startx + kreisradius;
int mitty = starty + kreisradius;
int border=2;
int seitenabstand=55;
Bitmap bmOut = Bitmap.createBitmap(seitenlaenge+seitenabstand, seitenlaenge+seitenabstand, Bitmap.Config.ARGB_8888);
bmOut.setHasAlpha(true);
for(int x = 0; x < width; ++x) {
for(int y = 0; y < height; ++y) {
int distzumitte = (int) (Math.pow(mittx-x,2) + Math.pow(mitty-y,2)); // (Xm-Xp)^2 + (Ym-Yp)^2 = dist^2
distzumitte = (int) Math.sqrt(distzumitte);
pixel = src.getPixel(x, y);
A = Color.alpha(pixel);
R = (int)Color.red(pixel);
G = (int)Color.green(pixel);
B = (int)Color.blue(pixel);
int color = Color.argb(A, R, G, B);
int afterx=x-startx+(seitenabstand/2);
int aftery=y-starty+(seitenabstand/2);
if(x < startx || y < starty || afterx>=seitenlaenge+seitenabstand || aftery>=seitenlaenge+seitenabstand) //seitenrand
{
continue;
}
else if(distzumitte > kreisradius)
{
color=0x00FFFFFF;
}
else if(distzumitte > kreisradius-border && makeborder) //border
{
color = Color.argb(A, 0, 0, 0);
}
bmOut.setPixel(afterx, aftery, color);
}
}
return bmOut;
}
Diese Funktion funktioniert gut, aber es gibt einige Probleme auftreten, dass ich noch lösen nicht in der Lage war.
- Die Qualität des Bildes ist
- Die Grenze ist nicht wirklich rund deutlich zurückgegangen, scheint aber an den Rand des Bildes flach zu sein (bei einigen Geräten ?!)
I‘ Ich schätze jede Hilfe in Bezug auf diese Probleme. Ich muss zugeben, dass ich nicht der Beste in Mathe bin und es sollte wahrscheinlich eine bessere Formel geben, um die Grenze zu beenden.
+1 für die Übersetzung hilft –