Intereting Posts
Как читать и редактировать события календаря Android с помощью нового Android 4.0 Ice Cream Sandwich API? Макет дизайна для нескольких экранов Android-браузер по умолчанию не прокручивает веб-страницу AsyncTask, должен ли он принять такой удар по производительности …? Android EditText и addTextChangedListener Безопасность потоков в библиотеках Android Android RecyclerView добавление и удаление элементов Разрешение canvas js export не работает на устройстве Android Как установить Android Studio на Ubuntu? Как программно заставить обнаружение услуг с низким энергопотреблением Bluetooth на Android без использования кеша Правило Threading AsyncTask. Может ли оно действительно использоваться только один раз? Как использовать MediaSessionCompat? Варианты и лучшие практики для выпуска бесплатной и платной версии того же приложения в Android Market Рекомендуемый подход для представления форматированного текста в 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); } }