【问题标题】:Create a new bitmap and draw new pixels into it创建一个新位图并在其中绘制新像素
【发布时间】:2016-02-15 22:32:39
【问题描述】:

我正在尝试制作一个应用程序,它将拍摄您通过 editText 指定的两张图片,比较两张图片上每个像素的颜色并创建一张包含两张原图的区别。

我在创建这个新位图时遇到了问题。我怎样才能实现我的目标?我真的不知道该怎么做,我是先创建新位图然后写入它,还是先获取差异然后从中绘制位图?图片将是大约。 300x300 像素。

【问题讨论】:

    标签: android bitmap


    【解决方案1】:

    这段代码只是我想出来的,未经测试,但它应该能让你走上正轨。

    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();
    

    【讨论】:

      【解决方案2】:

      我会先创建位图并计算每个像素之间的差异,但欢迎您先计算差异然后使用 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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-01-23
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-21
        • 1970-01-01
        • 1970-01-01
        • 2015-06-17
        相关资源
        最近更新 更多