content: package com.baidu.paddle.lite.demo.segmentation.preprocess;
  
  import android.graphics.Bitmap;
  import android.util.Log;
  
  import com.baidu.paddle.lite.demo.segmentation.config.Config;
  
  import static android.graphics.Color.blue;
  import static android.graphics.Color.green;
  import static android.graphics.Color.red;
  
  public class Preprocess {
  
      private static final String TAG = Preprocess.class.getSimpleName();
  
      Config config;
      int channels;
      int width;
      int height;
  
      public  float[] inputData;
  
      public void init(Config config){
          this.config = config;
          this.channels = (int) config.inputShape[1];
          this.height = (int) config.inputShape[2];
          this.width = (int) config.inputShape[3];
          this.inputData = new float[channels * width * height];
      }
  
      public boolean to_array(Bitmap inputImage){
  
          if (channels == 3) {
              int[] channelIdx = null;
              if (config.inputColorFormat.equalsIgnoreCase("RGB")) {
                  channelIdx = new int[]{0, 1, 2};
              } else if (config.inputColorFormat.equalsIgnoreCase("BGR")) {
                  channelIdx = new int[]{2, 1, 0};
              } else {
                  Log.i(TAG, "unknown color format " + config.inputColorFormat + ", only RGB and BGR color format is " +
                          "supported!");
                  return false;
              }
              int[] channelStride = new int[]{width * height, width * height * 2};
  
              for (int y = 0; y < height; y++) {
                  for (int x = 0; x < width; x++) {
                      int color = inputImage.getPixel(x, y);
                      float[] rgb = new float[]{(float) red(color) , (float) green(color) ,
                              (float) blue(color)};
                      inputData[y * width + x] = rgb[channelIdx[0]] ;
                      inputData[y * width + x + channelStride[0]] = rgb[channelIdx[1]] ;
                      inputData[y * width + x + channelStride[1]] = rgb[channelIdx[2]];
                  }
              }
          } else if (channels == 1) {
              for (int y = 0; y < height; y++) {
                  for (int x = 0; x < width; x++) {
                      int color = inputImage.getPixel(x, y);
                      float gray = (float) (red(color) + green(color) + blue(color));
                      inputData[y * width + x] = gray;
                  }
              }
          } else {
              Log.i(TAG, "unsupported channel size " + Integer.toString(channels) + ",  only channel 1 and 3 is " +
                      "supported!");
              return false;
          }
          return true;
  
      }
  
  }
  