#xml #android-studio #android-layout #android-fragments #android-styles
#xml #android-studio #android-макет #android-фрагменты #android-стили
Вопрос:
Я работаю над приложением для Android, которое должно изменять цвет изображения с помощью этой библиотеки https://github.com/divyanshub024/ColorSeekBar
, проблема, с которой я сталкиваюсь, заключается в том, что я устанавливаю цвет фона изображения, он меняет только границы. У меня есть Imageview
объект, который был преобразован из массива байтов в растровое изображение и установлен в ImageView
.
<ImageView
android:id="@ id/img_bitmap1"
android:layout_width="match_parent"
android:layout_height="@dimen/_300sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginStart="@dimen/_10sdp"
android:layout_marginEnd="@dimen/_10sdp"
/>
Как я преобразую массив байтов в растровое изображение и настраиваю в ImageView
val byteArray = intent.getByteArrayExtra("pictures")
val bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
img_bitmap1.setImageBitmap(bmp)
Как я меняю цвет
val imageview = requireActivity()!!.findViewById<View>(R.id.img_bitmap1) as ImageView
color_seek_bar.setOnColorChangeListener(object : ColorSeekBar.OnColorChangeListener {
override fun onColorChangeListener(color: Int) {
imageview.setBackgroundColor(color)
}
})
Комментарии:
1. Возможно, изображение, которое вы декодируете, имеет только границы, а не заливку 🙂
2. Я поделился своим XML-файлом Imageview выше, но я не добавил границ
Ответ №1:
вопрос в том, что показывает ваш ImageView
, что содержит val bmp
набор для него. ваша панель поиска правильно меняет фон, и вы видите только измененные границы, потому что «центр» изображения (почти весь) покрыт некоторыми bitmap
попробуйте НЕ загружать val bmp
ImageView
и не проверять, меняется ли весь фон, а не только фрейм
Комментарии:
1. На самом деле я должен загрузить это в ImageView и после этого изменить цвет изображения.
2. Но мне нужно изменить цвет изображения
3. Если я добавлю представление, оно полностью изменит свой цвет, но я хочу, чтобы содержимое в ImageView color изменилось,
4. итак, вы хотите раскрасить изображение, установленное для
ImageView
, а неImageView
само по себе? возможно, попробуйте использоватьimageView.setColorFilter(Color.RED);
5. Я решил свою проблему, добавив этот метод и получив пиксели, и если значение пикселей равно -1, означает белый, тогда только измените черный цвет, я также добавляю ответ на это
Ответ №2:
Проблема решается путем изменения цвета изображения, получая значение пикселя, и только изменяя цвет пикселей, а не белый.. это достигается с помощью этого метода.
var bitmap = (imageviewgradient.drawable as BitmapDrawable).bitmap
var newBitmap = replaceColor(bitmap, color)
Приведенный выше код преобразует изображение в растровое изображение
private fun replaceColor(src: Bitmap?, targetColor: Int): Bitmap? {
if (src == null) {
return null
}
// Source image size
val width = src.width
val height = src.height
val pixels = IntArray(width * height)
//get pixels
src.getPixels(pixels, 0, width, 0, 0, width, height)
for (x in pixels.indices) {
if(pixels[x]!=-1) {
pixels[x] = targetColor
}
}
// create result bitmap output
val result = Bitmap.createBitmap(width, height, src.config)
//set pixels
result.setPixels(pixels, 0, width, 0, 0, width, height)
return result
}
Основная работа выполняется только с помощью простого условия, т.е.
if(pixels[x]!=-1) {
pixels[x] = targetColor
}