J'utilise l'intention de caméra par défaut pour capturer des images dans mon activité. Après cela, je stocke leur chemin dans un tableau. À la fin de l'activité, je copie les images dans mon dossier d'application. Pour une raison quelconque, les images ne copient pas en qualité complète. Ex: Si une image dans le dossier DCIM est de 1,04 Mo, alors il n'y a qu'une ~ 2 Ko dans mon dossier d'application. J'utilise ce code dans mon application. Pour appeler l'intention de la caméra:La copie d'images du dossier DCIM vers un autre dossier entraîne une perte de qualité d'image
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
Dans onActivity Résultat que je fais:
Bitmap photo = (Bitmap) data.getExtras().get("data");
Uri tempUri = getImageUri(context, photo);
imagePath = getRealPathFromURI(tempUri);
imagesList.add(imagePath);
getImageUri() et getRealPathFromURI() sont:
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = Images.Media.insertImage(inContext.getContentResolver(),
inImage, "Title", null);
return Uri.parse(path);
}
public String getRealPathFromURI(Uri uri) {
Cursor cursor = context.getContentResolver().query(uri, null, null,
null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
À la fin de mon activité, je utilise cette méthode pour copier des images dans mon dossier d'application:
for (int i = 0; i < noteImagesList.size(); i++) {
File fileimg = new File(noteImagesList.get(i));
File newImageFile = new File(parentfolderpath,
i+"_newimage.jpg");
newImageFile.createNewFile();
Bitmap myBitmap = BitmapFactory.decodeFile(fileimg
.getAbsolutePath());
FileOutputStream fOut = new FileOutputStream(
newImageFile);
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();
if (myBitmap != null) {
if (!myBitmap.isRecycled()) {
myBitmap.recycle();
}
myBitmap = null;
}
}
Après la copie, l'image perd sa qualité et sa taille. Lorsque l'image dans le dossier DCIM est nette et autour de ~ 1 Mo, après la copie, elle est floue et autour de ~ 1 Ko.
Quelqu'un pourrait-il dire ce qui me manque lors de la copie d'images?
Modifier
code ci-dessus fonctionne très bien si je l'utilise pour sélectionner des images de la galerie, mais toujours pas de chance avec les images de la caméra.
Edit 2
j'ai utilisé ce code aussi, mais même résultat.
public void copyFile(File src, File dst) throws IOException {
FileChannel inChannel = new FileInputStream(src).getChannel();
FileChannel outChannel = new FileOutputStream(dst).getChannel();
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} finally {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
}
essayez d'utiliser 'Bitmap.CompressFormat.PNG' au lieu de' Bitmap.CompressFormat.JPEG' –
@SagarPilkhwal même résultat en utilisant CompressFormat PNG –
pourquoi vous faites 'inImage.compress (Bitmap.CompressFormat.JPEG, 100, octets) ; 'and ByteArrayOutputStream bytes = new ByteArrayOutputStream();' dans 'getImageUri()' –