Jak wyciąć prostokątny obraz (600 x 300) z lewej i prawej strony, aby zmieścić się w kwadratowym ImageView? Nie chcę, aby zmienić rozmiar obrazu, po prostu chcę, aby go przyciąć, aby być 300 x 300.Przycinanie obrazu do kwadratu - Android
[ROZWIĄZANIE]
Jak @blackbelt powiedział
Bitmap cropImg = Bitmap.createBitmap(src, startX, startY, dstWidth, dstHeight);
jest wielki do przycinania obrazów. Jak więc automatycznie przycinać obrazy o różnych rozmiarach? Tworzę ten prosty kod, który:
// From drawable
Bitmap src= BitmapFactory.decodeResource(context.getResources(), R.drawable.image);
// From URL
Bitmap src = null;
try {
String URL = "http://www.example.com/image.jpg";
InputStream in = new java.net.URL(URL).openStream();
src = BitmapFactory.decodeStream(in);
} catch (Exception e) {
e.printStackTrace();
}
int width = src.getWidth();
int height = src.getHeight();
int crop = (width - height)/2;
Bitmap cropImg = Bitmap.createBitmap(src, crop, 0, height, height);
ImageView.setImageBitmap(cropImg);
To jest dokładnie to, czego szukasz, aby uzyskać idealnie okrągłe obrazy i nie owalne. Jeśli jednak wysokość obrazu jest większa niż szerokość, nie jest przycinana w środku, ponieważ wartość y param wynosi 0 w metodzie createBitmap. Oto, jak można to naprawić: Dodaj te 2 linie: 'int cropH = (height - width)/2; \t cropH = (cropH <0)? 0: cropH; 'Użyj wartości cropH jako y. \t 'Bitmap cropImg = Bitmap.createBitmap (mapa bitowa, cropW, cropH, newWidth, newHeight);' –
Fajnie, widzę twój punkt .... Zasadniczo, aby wykonać te same obliczenia zarówno dla szerokości jak i wysokości. –