Android: le Redimensionnement des images bitmap sans perte de qualité
j'ai vraiment fouillé sur le web entier avant de poster. Mon problème est que je ne peut pas redimensionner les bitmap sans perdre la qualité de l'image (la qualité est vraiment mauvaise et pixélisé).
Je prends l'image à partir de la caméra et puis, je dois à la baisse, afin que je puisse le télécharger sur le serveur beaucoup plus rapide.
C'est la fonction qui fait l'échantillonnage
public Bitmap resizeBitmap(Bitmap bitmap){
Canvas canvas = new Canvas();
Bitmap resizedBitmap = null;
if (bitmap !=null) {
int h = bitmap.getHeight();
int w = bitmap.getWidth();
int newWidth=0;
int newHeight=0;
if(h>w){
newWidth = 600;
newHeight = 800;
}
if(w>h){
newWidth = 800;
newHeight = 600;
}
float scaleWidth = ((float) newWidth) / w;
float scaleHeight = ((float) newHeight) / h;
Matrix matrix = new Matrix();
//resize the bit map
matrix.preScale(scaleWidth, scaleHeight);
resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(resizedBitmap, matrix, paint);
}
return resizedBitmap;
et ce est la façon dont je reçois l'image de l'activité résultat
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if(resultCode != RESULT_CANCELED){
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
getContentResolver().notifyChange(mImageUri, null);
ContentResolver cr = this.getContentResolver();
try
{
b = android.provider.MediaStore.Images.Media.getBitmap(cr, mImageUri);
Log.d("foto", Integer.toString(b.getWidth()));
Log.d("foto", Integer.toString(b.getHeight()));
addPhoto.setImageBitmap(b);
}
catch (Exception e)
{
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show();
Log.d("TAG", "Failed to load", e);
}
}
}
Je commence à penser que la meilleure façon d'obtenir une petite taille d'image est de définir la résolution de la caméra. Quelqu'un d'autre peut vous aider?
OriginalL'auteur Vahn84 | 2013-05-09
Vous devez vous connecter pour publier un commentaire.
Essayer Bitmap.createScaledBitmap.
Il dispose également d'une option pour filtrer la source.
Je vois. Dernier conseil que j'ai à l'esprit est que vous vérifiez la BitmapFactory.La classe d'Options, d'initialiser et de l'utilisation de la qualité des options lors du décodage de votre Image. Voici l'API lien: developer.android.com/reference/android/graphics/...
j'en suis arrivé à quelque chose au moins, acceptable par le décodage de l'image à partir d'uri avec l'image bitmap.usine options. Mais c'est toujours pas la qualité que j'ai pensé. Comment facebook et g+ gérer le téléchargement de photos? Je vois qu'ils redimensionner toutes les images que vous téléchargez. Comment ils font ça sans perdre un seul pixel de qualité?
J'aimerais explorer davantage la BitmapFactory.Options - juste au cas où vous avez manqué quelque chose. Je sais c'est pas très utile de réponse, mais je ne sais pas comment faire pour vous aider 🙁
pouvez-vous mettre à jour avec ce que vous avez réellement fini par aller avec?
OriginalL'auteur Mena
Bonne désagrégation de l'algorithme (pas de voisin le plus proche comme) se compose de seulement 2 étapes (ainsi que le calcul de l'exacte Rect pour l'entrée/la sortie des images de la récolte):
Voici l'explication détaillée comment SonyMobile résolu cette tâche: http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for-your-android-application/
Voici le code source de SonyMobile échelle utils: http://developer.sonymobile.com/downloads/code-example-module/image-scaling-code-example-for-android/
j'ai essayé AJUSTEMENT de la méthode et c'était exactement la même qualité que l'utilisation par défaut image Bitmap.createScaledBitmap. Peut-être plus rapide/moins de mémoire consommée, mais la qualité est la même.
upd - viens de vérifier de temps, les deux méthodes utilisent le même laps de temps, dans mon cas, ceux qui étaient de 2 à 3 ms. Et je n'ai pas utiliser leur décoder méthodes, comme j'ai eu un prêt de Bitmap en entrée, donc pas de changements dans l'utilisation de la mémoire aussi.
Malheureusement, dans mon cas, les deux liens ne fonctionnent plus. Une redirige vers developer.sony.com
OriginalL'auteur goRGon
Essayer mentionnées ci-dessous de code pour le redimensionnement d'image bitmap.
J'ai utilisé ce code pour réduire la taille de mon image et son de qualité, bien.. , était acceptable.
Espère que cette aide.
Aucune amélioration de la qualité d'image Bitmap, obtenant les mêmes résultats que le précédent
OriginalL'auteur CRUSADER