Сохранение захваченного изображения через намерение или из галереи в базу данных комнаты.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сохранение захваченного изображения через намерение или из галереи в базу данных комнаты.

Сообщение Anonymous »

Я пытаюсь сохранить захваченное изображение в базе данных помещений и позже загрузить его на сервер с другими деталями. Код захвата изображения приведен ниже
val activityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data: Intent? = result.data
val uri: Uri? = if (data?.data != null){ data.data }else{ billUri }
if (uri != null) {

chequeBitmap = uriToBitmap(this, uri)

binding.chequeimage.setImageBitmap(chequeBitmap)
binding.addimage.visibility = View.GONE

binding.chequeimage.setOnClickListener {
// Clear the image and show the add image button
binding.chequeimage.setImageResource(R.drawable.image_upload)
binding.addimage.visibility = View.VISIBLE
}
} else {
Toast.makeText(this, "No Image Found", Toast.LENGTH_SHORT).show()
}
}

}

binding.addimage.setOnClickListener {
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "image/*"
intent.putExtra(MediaStore.EXTRA_MEDIA_TITLE, "Gallery")

val captureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)

val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmm_ss",
Locale.getDefault()).format(Date())
val storageDir: File? = getExternalFilesDir("DO_NOT_DELETE")
val photoFile: File? = File.createTempFile(
"Bill_${timeStamp}_", /* prefix */
".jpg", /* suffix */
storageDir /* directory */
)
photoFile?.let { file ->
val billURI: Uri = FileProvider.getUriForFile(this, "$packageName.provider", file)
billUri = billURI
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, billURI)
}

когда я загружаю его в базу данных, он загружается успешно, но из-за большого размера строки в базе данных sqlite он не читается приложением. А затем приложение постоянно вылетает, пока база данных не будет удалена.
Я пытаюсь сохранить изображение как ByteArray в базе данных комнаты
data class DepositData(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
var bill: String,
val payimage: ByteArray
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as DepositData

return payimage.contentEquals(other.payimage)
}

override fun hashCode(): Int {
return payimage.contentHashCode()

Я хочу, чтобы размер изображения был уменьшен до 1,5 МБ (максимум) и сохранен в базе данных комнаты, не испортив качество изображения или его четкость. Раньше я сохранял изображения в виде миниатюр, но для получения четких изображений это бесполезно. Изображение при загрузке размывается. Я не хочу сохранять URI изображения в комнате, так как он может быть удален пользователем, и из-за этого приложение может выйти из строя.
Чтобы загрузить его в базу данных, я использую код ниже:
Чтобы загрузить его в базу данных, я использую код ниже:
р>
binding.save.setOnClickListener {
val payImage: ByteArray = bitmapToByteArray(chequeBitmap)!!

val data = DepositData(0, bill = bill, payimage = payImage)
collectionViewModel.insertRecord(data)
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... m-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»