2 Stimmen

Android: Ändern der Größe und Skalieren eines Teils des Bildes

Bei einem Bild möchte ich nur einen Teil des Bildes skalieren können. Sagen wir, ich möchte die Hälfte des Bildes so vergrößern, dass diese Hälfte den gesamten Raum einnimmt.

Wie ist das möglich?

Wird ImageView fitXY Arbeit, weil ich dachte, es wird nur für das gesamte Originalbild zu arbeiten.

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout linearLayout = new LinearLayout(this); 

           Bitmap bitmap = BitmapFactory.decodeResource(getResources(),       R.drawable.icon);   

            int width = bitmap.getWidth();   

             int height = bitmap.getHeight();   

            int newWidth = 640;   

            int newHeight = 480;   

             float scaleWidth = ((float) newWidth) / width;   

            float scaleHeight = ((float) newHeight) / height;   

            Matrix matrix = new Matrix();   

            matrix.postScale(scaleWidth, scaleHeight);   

             // create the new Bitmap object   

             Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 50, 50, width,   

                     height, matrix, true);   

             BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);   

             ImageView imageView = new ImageView(this);   

             imageView.setImageDrawable(bmd);   

             imageView.setScaleType(ScaleType.CENTER);   

             linearLayout.addView(imageView, new LinearLayout.LayoutParams(   

                     LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));   

             setContentView(linearLayout);   
  } 
} 

Dies funktioniert nur, wenn in createBitmap, die X- und Y-Koordinaten der ersten Pixel in der Quelle sind 0. bedeutet, ich bin nicht in der Lage, eine Teilmenge des Bildes zu nehmen. Ich kann nur das ganze Bild skalieren. Aber createBitmap ist dafür gedacht, ein Bild zu unterteilen.

Im Protokoll, wenn die Parameter nicht 0 sind, erhalte ich die folgende Ausnahme: java.lang.IllegalArgumentException: x + width must be <= bitmap.width()

Bitte um Hilfe

2voto

Chandra Sekhar Punkte 17730

Zuerst müssen Sie eine neue Bitmap mit dem Teil erstellen, das Sie skalieren möchten, indem Sie

createBitmap() //pass the source bitmap, req height and width

Aus der Ergebnis-Bitmap müssen Sie nun Ihre skalierte Bitmap erstellen, indem Sie

createScaledbitmap() //pass the result bitmap , req width, height

Zum Beispiel:

Bitmap originalBitmap = BitmapFactory.decodeResource(res, id);
Bitmap partImage = originalBitmap.createBitmap(width, height, config);
Bitmap scaledImage = partImage.createScaledBitmap(partImage, dstWidth, dstHeight, filter);

1voto

Hasan Punkte 41

Ich musste also ein paar Tippfehler korrigieren, aber dieses Beispiel hat mir gute Dienste geleistet. http://www.anddev.org/resize_and_rotate_image_-_example-t621.html Tippfehler:

int width = bitmapOrg.width();
int height = bitmapOrg.height();

werden:

int width = bitmapOrg.getWidth();
int height = bitmapOrg.getHeight();

Ansonsten funktionierte es, als ich es mit SDK 7 erneut versuchte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X