Saya sedang membangun aplikasi yang menggunakan kamera untuk mengambil gambar. Berikut kode sumber saya untuk melakukan ini:
File file = new File(Environment.getExternalStorageDirectory(),
imageFileName);
imageFilePath = file.getPath();
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE);
Pada onActivityResult()
metode, saya menggunakan BitmapFactory.decodeStream()
pickup gambar.
Saat saya menjalankan aplikasi saya di Nexus satu, itu berjalan dengan baik. Tetapi ketika saya menjalankan Samsung Galaxy S atau HTC Inspire 4G, arah gambarnya salah.
- Tangkap dengan mode potret, gambar asli (simpan di kartu SD) selalu berputar 90 derajat.
Pratinjau gambar setelah pemotretan --------- Gambar nyata pada kartu SD
- Tangkap dengan mode lanskap, semuanya bagus.
Pratinjau gambar setelah pemotretan --------- Gambar nyata pada kartu SD
android
orientation
android-camera-intent
Nguyen Minh Binh
sumber
sumber
Jawaban:
Ada beberapa topik dan masalah serupa di sekitar sini. Karena Anda tidak sedang menulis kamera Anda sendiri, saya pikir intinya adalah:
beberapa perangkat memutar gambar sebelum menyimpannya, sementara yang lain hanya menambahkan tag orientasi di data exif foto.
Saya akan merekomendasikan untuk memeriksa data exif foto dan mencari secara khusus
Karena foto ditampilkan dengan benar di aplikasi Anda, saya tidak yakin di mana masalahnya, tetapi ini pasti akan membuat Anda berada di jalur yang benar!
sumber
Saya baru saja mengalami masalah yang sama, dan menggunakan ini untuk memperbaiki orientasi:
Jika lebar Bitmap lebih besar dari tinggi, gambar yang dikembalikan dalam lanskap, jadi saya memutarnya 90 derajat.
Semoga membantu orang lain dengan masalah ini.
sumber
Ada dua hal yang dibutuhkan:
Pratinjau kamera harus sama dengan rotasi Anda. Atur ini dengan
camera.setDisplayOrientation(result);
Simpan gambar yang diambil sebagai pratinjau kamera Anda. Lakukan ini melalui
Camera.Parameters
.Semoga membantu.
sumber
parameters.setRotation(result)
, bukan?sumber
Pilihan lainnya adalah memutar bitmap di layar hasil seperti ini:
sumber
Saya juga memiliki jenis masalah yang sama untuk beberapa perangkat:
sumber
Coba cara ini: static Uri image_uri; Bitmap statis diambil_image = null;
}
sumber
Tidak perlu lagi memeriksa data exif foto. Lakukan dengan mudah dengan Glide .
Google memperkenalkan kami Perpustakaan Pemuat Gambar untuk Android yang dikembangkan oleh bumptech bernama Glide sebagai perpustakaan yang direkomendasikan oleh Google. Ini telah digunakan di banyak proyek sumber terbuka Google hingga sekarang termasuk aplikasi resmi Google I / O 2014.
Contoh: Glide.with (konteks) .load (uri) .into (imageview);
Untuk selengkapnya: https://github.com/bumptech/glide
sumber
Semoga ini bisa membantu !! Terima kasih
sumber
Saya harap ini akan membantu. Terima kasih!
sumber
Hanya mengalami masalah yang sama di sini, cuplikan kode di bawah ini berfungsi untuk saya:
semoga ini membantu :)
sumber
Coba ini di callback surfaceChanged:
sumber
// klik tombol
// metode onActivityResult
// buat jalur file kelas
public class FilePath {
}
sumber
Kode tersebut berfungsi untuk landscape dan portrait @frontCameraID = variabel mendapatkan metode klasik untuk show camera yang diinginkan
Metode untuk mendapatkan orientasi y rotasi untuk menyimpan gambar dan tampilan orientasi @result = orientasi pada tampilan pratinjau kamera @rotationPicture = rotasi diperlukan untuk menyimpan gambar dengan benar
Seseorang bertanya tentang kode, tolong beritahu saya.
sumber
dua solusi satu baris menggunakan Picasso dan perpustakaan meluncur
Setelah menghabiskan banyak waktu dengan banyak solusi untuk masalah rotasi gambar, saya akhirnya menemukan dua solusi sederhana. Kami tidak perlu melakukan pekerjaan tambahan apa pun. Picasso dan Glide adalah perpustakaan yang sangat kuat untuk menangani gambar di aplikasi Anda. Ini akan membaca data EXIF gambar dan memutar gambar secara otomatis.
Menggunakan glide library https://github.com/bumptech/glide
Menggunakan perpustakaan Picasso https://github.com/square/picasso
sumber