Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private Camera.PreviewCallback mPreviewCallback = new Camera.PreviewCallback(){
- public void onPreviewFrame(final byte[] imageData, final Camera camera) {
- if(!isThreadRunning) {
- lightIntensityHandler.post(new Runnable() {
- public void run() {
- processLightIntensity(imageData, camera);
- }
- });
- isThreadRunning = true;
- }
- }
- };
- private void processLightIntensity(byte[] data, Camera camera) {
- try {
- int frameHeight = camera.getParameters().getPreviewSize().height;
- int frameWidth = camera.getParameters().getPreviewSize().width;
- // number of pixels
- int n[] = new int[frameWidth * frameHeight];
- //transforms NV21 pixel data into RGB pixels
- int[] myPixels = decodeYUV420SP(n, data, frameWidth, frameHeight);
- int centreIndex = Math.round(myPixels.length / 2);
- int[] centrePixelGroup = Arrays.copyOfRange(myPixels, centreIndex - 200,
- centreIndex + 200);
- int sum = 0;
- for (int i = 0; i < centrePixelGroup.length; i++) {
- sum = sum + getLightnessValue(centrePixelGroup[i]);
- }
- final int lightness = Math.round(sum / centrePixelGroup.length);
- synchronized(this){
- isThreadRunning = false;
- }
- mImageListener.onImageCapturing(lightness);
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- private int getLightnessValue(int pixel) {
- float[] pixelHSV = new float[3];
- int blue = Color.blue(pixel);
- int red = Color.red(pixel);
- int green = Color.green(pixel);
- ColorUtils.RGBToHSL(red, green, blue, pixelHSV);
- int heuValue = (int) pixelHSV[0];
- float lightness = pixelHSV[2];
- float saturation = pixelHSV[1];
- int lightnessValue = (int)(lightness * 100);
- return lightnessValue;
- }
- /*Coverts NV21 pixel data to Pixel Array*/
- public int[] decodeYUV420SP(int[] rgb, byte[] yuv420sp, int width, int height) {
- final int frameSize = width * height;
- for (int j = 0, yp = 0; j < height; j++) { int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
- for (int i = 0; i < width; i++, yp++) {
- int y = (0xff & ((int) yuv420sp[yp])) - 16;
- if (y < 0)
- y = 0;
- if ((i & 1) == 0) {
- v = (0xff & yuv420sp[uvp++]) - 128;
- u = (0xff & yuv420sp[uvp++]) - 128;
- }
- int y1192 = 1192 * y;
- int r = (y1192 + 1634 * v);
- int g = (y1192 - 833 * v - 400 * u);
- int b = (y1192 + 2066 * u);
- if (r < 0)
- r = 0;
- else if (r > 262143)
- r = 262143;
- if (g < 0)
- g = 0;
- else if (g > 262143)
- g = 262143;
- if (b < 0)
- b = 0;
- else if (b > 262143)
- b = 262143;
- rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
- }
- }
- return rgb;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement