Sto analizzando un sito Web per visualizzare i contenuti in un URL, in quanto alcune immagini ci sono. Voglio ritagliare le immagini che vengono analizzate dal sito. Sto davvero lottando per questo, qualcuno mi può aiutare riguardo a questo?Come ritagliare l'immagine analizzata in Android?
risposta
Immagino che tu abbia già "scaricato" le immagini dal sito web e desideri ridimensionarle invece di ritagliare? Cioè creare miniature.
questo caso, è possibile utilizzare il seguente:
// load the origial BitMap (500 x 500 px)
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),
R.drawable.android);
int width = bitmapOrg.width();
int height = bitmapOrg.height();
int newWidth = 200;
int newHeight = 200;
// calculate the scale - in this case = 0.4f
float scaleWidth = ((float) newWidth)/width;
float scaleHeight = ((float) newHeight)/height;
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,
width, height, matrix, true);
// make a Drawable from Bitmap to allow to set the BitMap
// to the ImageView, ImageButton or what ever
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
ImageView imageView = new ImageView(this);
// set the Drawable on the ImageView
imageView.setImageDrawable(bmd);
// center the Image
imageView.setScaleType(ScaleType.CENTER);
<ImageView android:id="@+id/title_logo"
android:src="@drawable/logo"
android:scaleType="centerCrop" android:padding="4dip"/>
Contact Manager Android EditContactActivity utilizza Intent("com.android.camera.action.CROP")
Si tratta di un codice di esempio:
Intent intent = new Intent("com.android.camera.action.CROP");
// this will open all images in the Galery
intent.setDataAndType(photoUri, "image/*");
intent.putExtra("crop", "true");
// this defines the aspect ration
intent.putExtra("aspectX", aspectY);
intent.putExtra("aspectY", aspectX);
// this defines the output bitmap size
intent.putExtra("outputX", sizeX);
intent.putExtra("outputY", xizeY);
// true to return a Bitmap, false to directly save the cropped iamge
intent.putExtra("return-data", false);
//save output image in uri
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
Poi, startActivityWithResult()
noto se l'utente ha premuto OK o Annulla. Nel primo caso, l'immagine ritagliata verrà salvata in uri
.
Buona idea ma "com.android.camera.action.CROP" non è ufficiale e potrebbe non funzionare su alcuni telefoni. –
Esiste una versione ufficiale? – noelicus
migliore collegamento github ->AndroidImageCrop
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
photoPicker();
}
private void photoPicker() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);
}
private void crop(Uri photoUri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(photoUri);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, RESULT_CROP);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
Uri photoUri = intent.getData();
if (photoUri != null) {
Log.i("TAG", "Start Crop!!");
crop(photoUri);
}
} else if (resultCode == RESULT_CROP) {
Toast.makeText(this, "Image crop", Toast.LENGTH_SHORT).show();
}
}
grandi opere. ho una domanda però: la classe bitmap supporta la modifica delle sue dimensioni quando è mutabile? o consente solo di modificare i suoi dati? se può cambiare la sua dimensione, cosa faresti al tuo codice per evitare di creare una nuova bitmap? –
Solo fyi, non è necessario creare una bitmap ridimensionata. È possibile semplicemente impostare la matrice su imageView e quindi impostare la bitmap. ImageView applicherà la matrice alla bitmap. –
Questo è scala, non ritaglio ... questo non è esattamente esattamente. –