Я хочу выбрать цвет из изображения с помощью палитры.
Во-первых, я разделил свое растровое изображение на 32. Во-вторых, я хочу показать его в виде сетки переработчика с представительным цветом изображения.
Дело А.
нарезать 32 изображения и выбрать цвет
Bitmap org_bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
ArrayList<Integer> colors= new ArrayList<>();
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 8; j++) {
float box_width = width / 8;
float box_height = height / 4;
float x = startX + (box_width * (j - 1));
float y = startY + (box_height * (i - 1));
Bitmap spot_bitmap = Bitmap.createBitmap(image_bitmap, (int) x, (int) y, (int) box_width, (int) box_height);
Palette.from(spot_bitmap).generate(new Palette.PaletteAsyncListener() {
public void onGenerated(Palette p) {
// Use generated instance
Palette.Swatch vibrantSwatch = p.getVibrantSwatch();
if (vibrantSwatch != null) {
int rgb = vibrantSwatch.getRgb();
colors.add(rgb)
}
}
});
}
}
RecyclerView rv_colors= findViewById(R.id.rv_colors);
ImageColorAdpater adapter = new ImageGridAdpater(colors);
GridLayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 8);
rv_colors.setLayoutManager(layoutManager);
rv_colors.setAdapter(adapter);
Дело B.
срез 32 изображений (MainActivity.java)
Bitmap org_bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
ArrayList<Bitmap> bg_image = new ArrayList<>();
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 8; j++) {
float box_width = width / 8;
float box_height = height / 4;
float x = startX + (box_width * (j - 1));
float y = startY + (box_height * (i - 1));
Bitmap spot_bitmap = Bitmap.createBitmap(image_bitmap, (int) x, (int) y, (int) box_width, (int) box_height);
bg_image.add(spot_bitmap);
}
}
RecyclerView rv_images= findViewById(R.id.rv_images);
ImageGridAdpater adapter = new ImageGridAdpater(bg_image, getApplicationContext());
GridLayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 8);
rv_images.setLayoutManager(layoutManager);
rv_images.setAdapter(adapter);
выбор цвета и отображение с использованием палитры (ImageGridAdpater.Java)
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
public void onGenerated(Palette p) {
// Use generated instance
Palette.Swatch vibrantSwatch = p.getVibrantSwatch();
if (vibrantSwatch != null) {
int rgb = vibrantSwatch.getRgb();
holder.item_color_grid_background_ll.setBackgroundColor(rgb);
}
}
});
holder.item_color_grid_ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Palette palette = Palette.from(colors.get(position)).generate();
Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
if (vibrantSwatch != null) {
int rgb = vibrantSwatch.getRgb();
holder.item_color_grid_background_ll.setBackgroundColor(rgb);
}
}
});
На самом деле я хочу сделать как случай А. Но это просто выбрать один цвет.
Итак, я пытаюсь CaseB.
Случай B - я пытался установить фон при просмотре с привязкой с использованием асинхронной палитры.и если он не может установить цвет, когда я щелкаю элемент, устанавливающий фон, используя синхронизацию палитры.
, но это не работает.как я могу это исправить?спасибо