Intereting Posts
Почему значение берется из value-mdpi, если я работаю с Galaxy Nexus Добавление проекта андроидной библиотеки в проект андроида предотвращает создание Ant Как изменить значок меню переполнения Android Кодирование и декодирование звука для записи звука в формат G711 (PCMU – uLaw) Установить / Получить список Java <> из кода C Android: Как изменить текст в поле EditText? Что такое Android Pre-Dexing и как повысить производительность? Как скрыть клавиатуру в диалоговом окне Интерактивное слово внутри TextView в android Android на Intellij, показывающий ошибку: не является активностью Адаптация Повторная настройка ответов с использованием GSON Firebase NullPointerException в игровых сервисах 9.2.1 Android как закончить деятельность от другой деятельности SupportMapFragment загружается чрезвычайно медленно в первый раз, но быстро в последующих нагрузках (включая различные действия) Можно ли отключить (а не просто отключить) MenuItem в Android?

Создайте новый растровый рисунок и нарисуйте в него новые пиксели

Я пытаюсь сделать приложение, которое будет делать два снимка, которые вы укажете через editText, сравнить цвета каждого пикселя на обоих изображениях и создать новое изображение (растровое изображение) (которое вы можете сохранить на SD-карте), содержащее различия между Две оригинальные фотографии.

У меня возникла проблема с созданием этого нового растрового изображения. Как я могу достичь своей цели? Я действительно не знаю, как это сделать, сначала создаю новую растровую карту, а затем записываю в нее или сначала получаю различия, а затем рисую растровое изображение? Изображения будут ок. 300×300 пикселей.

Solutions Collecting From Web of "Создайте новый растровый рисунок и нарисуйте в него новые пиксели"

Этот код только что вышел из моей головы и непроверен, но он должен помочь вам на правильном пути.

final int w1 = b1.getWidth(); final int w2 = b2.getWidth(); final int h1 = b1.getHeight(); final int h2 = b2.getHeight(); final int w = Math.max(w1, w2); final int h = Math.max(h2, h2); Bitmap compare = Bitmap.createBitmap(w, h, Config.ARGB_8888); int color1, color2, a, r, g, b; for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { if (x < w1 && y < h1) { color1 = b1.getPixel(x, y); } else { color1 = Color.BLACK; } if (x < w2 && y < h2) { color2 = b2.getPixel(x, y); } else { color2 = Color.BLACK; } a = Math.abs(Color.alpha(color1) - Color.alpha(color2)); r = Math.abs(Color.red(color1) - Color.red(color2)); g = Math.abs(Color.green(color1) - Color.green(color2)); b = Math.abs(Color.blue(color1) - Color.blue(color1)); compare.setPixel(x, y, Color.argb(a, r, g, b)); } } b1.recycle(); b2.recycle(); 

Сначала я создал растровое изображение и вычислил различия между каждым пикселем, но сначала вы можете сначала вычислить различия, а затем использовать Bitmap.copyPixels, но я думаю, что проще понять первый способ. Вот пример:

 // Load the two bitmaps Bitmap input1 = BitmapFactory.decodeFile(/*first input filename*/); Bitmap input2 = BitmapFactory.decodeFile(/*second input filename*/); // Create a new bitmap. Note you'll need to handle the case when the two input // bitmaps are not the same size. For this example I'm assuming both are the // same size Bitmap differenceBitmap = Bitmap.createBitmap(input1.getWidth(), input1.getHeight(), Bitmap.Config.ARGB_8888); // Iterate through each pixel in the difference bitmap for(int x = 0; x < /*bitmap width*/; x++) { for(int y = 0; y < /*bitmap height*/; y++) { int color1 = input1.getPixel(x, y); int color2 = input2.getPixel(x, y); int difference = // Compute the difference between pixels here // Set the color of the pixel in the difference bitmap differenceBitmap.setPixel(x, y, difference); } }