2017-02-08 12 views
0

Я хочу захватить изображения с помощью флеш-флешки с фронтальной камерой, аналогичной Fornt Flash.
Я знаю, что это может включать в себя еще один слой поверх предварительного просмотра камеры
как предложено here и here.
Может ли кто-нибудь опубликовать рабочее решение, которое включает в себя камеру?Фронтальная камера с флэш-памятью Android с использованием отбеливания экрана

Спасибо.

ответ

0

Обнаружено мной (и небольшая помощь от друга).
В принципе вам нужно создать эмулятор Flash View, который имеет белый фон с альфой 0,7 и видимость ушла.
при нажатии вам нужно:

показать вид - View.VISIBLE

flashEmulator.setVisibility(View.VISIBLE); 

отрегулировать screenBrightness до максимального значения

преобразовать фон флэш-эмулятор HSV

int color = Color.WHITE; 
float[] hsv = new float[3]; 
Color.colorToHSV(color, hsv); 
hsv[2] *= 1f; 
color = Color.HSVToColor(hsv); 
flashEmulator.setBackgroundColor(color); 

Полный код для и Roid передней флэш приложение

Manifest

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.frontflash.android"> 
<uses-feature android:name="android.hardware.camera" android:required="true" /> 
<uses-feature android:name="android.hardware.camera.front" android:required="false" /> 
<uses-feature android:name="android.hardware.camera.flash" /> 

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

XML

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:background="@android:color/black" 
    tools:context=".MainActivity"> 

<com.frontflash.android.CameraPreview 
    android:id="@+id/cameraPreview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

<FrameLayout 
    android:visibility="gone" 
    android:alpha="0.7" 
    android:id="@+id/flashEmulator" 
    android:background="@android:color/white" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="On" 
    android:id="@+id/button" 
    android:layout_centerVertical="false" 
    android:layout_centerHorizontal="true" /> 

MainActivity.java

package com.frontflash.android; 

import android.app.Activity; 
import android.graphics.Color; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.FrameLayout; 

public class MainActivity extends Activity { 
    private Button button; 
    private Camera camera; 
    private boolean isFlashOn; 
    private FrameLayout flashEmulator; 
    private float lastScreenBrightness; 
    private CameraPreview cameraPreview; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     int fullScreen = WindowManager.LayoutParams.FLAG_FULLSCREEN; 

     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(fullScreen, fullScreen); 
     setContentView(R.layout.activity_main); 
     button = (Button) findViewById(R.id.button); 
     flashEmulator = (FrameLayout) findViewById(R.id.flashEmulator); 
     cameraPreview = (CameraPreview)findViewById(R.id.cameraPreview); 
     startCamera(); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (isFlashOn) { 
        turnOffFlash(); 
        button.setText("On"); 
       } else { 
        turnOnFlash(); 
        button.setText("Off"); 
       } 
      } 
     }); 
    } 

    private void startCamera() { 
     if (camera == null) { 
      try { 
       camera = Camera.open(1); 
       Camera.Parameters params = camera.getParameters(); 

       params.setPreviewSize(1280, 720); 
       camera.setDisplayOrientation(90); 
       camera.setParameters(params); 
       cameraPreview.connectCamera(camera); 
       cameraPreview.startPreview(); 
      } catch (Exception e) { 
      } 
     } 
    } 

    private void turnOnFlash() { 
     if (!isFlashOn) { 
      int color = Color.WHITE; 
      float[] hsv = new float[3]; 
      final Window window = getWindow(); 
      final WindowManager.LayoutParams params = window.getAttributes(); 

      lastScreenBrightness = params.screenBrightness; 
      params.screenBrightness = 1F; 
      window.setAttributes(params); 
      flashEmulator.setVisibility(View.VISIBLE); 
      Color.colorToHSV(color, hsv); 
      hsv[2] *= 1f; 
      color = Color.HSVToColor(hsv); 
      flashEmulator.setBackgroundColor(color); 
      isFlashOn = true; 
     } 
    } 

    private void turnOffFlash() { 
     if (isFlashOn) { 
      Window window = getWindow(); 
      WindowManager.LayoutParams params = window.getAttributes(); 

      params.screenBrightness = lastScreenBrightness; 
      window.setAttributes(params); 
      flashEmulator.setVisibility(View.GONE); 
      isFlashOn = false; 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     turnOffFlash(); 
    } 

    @Override 
    protected void onRestart() { 
     super.onRestart(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     startCamera(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     if (camera != null) { 
      camera.release(); 
      camera = null; 
     } 
    } 
} 

CameraPreview.java

package com.frontflash.android; 

import android.content.Context; 
import android.hardware.Camera; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

/** 
* Created by sagi on 2/8/2017. 
*/ 

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { 
    private Camera camera; 
    private SurfaceHolder surfaceHolder; 
    private final String LOG_TAG = "CameraPreview"; 

    public CameraPreview(Context context, AttributeSet attributeSet) { 
     super(context, attributeSet); 
    } 

    public CameraPreview(Context context) { 
     super(context); 
    } 

    public void connectCamera(Camera camera) { 
     this.camera = camera; 
     surfaceHolder = getHolder(); 
     surfaceHolder.addCallback(this); 
     startPreview(); 
    } 

    public void releaseCamera() { 
     if (camera != null) { 
      stopPreview(); 
      camera = null; 
     } 
    } 

    void startPreview() { 
     if (camera != null && surfaceHolder.getSurface() != null) { 
      try { 
       camera.setPreviewDisplay(surfaceHolder); 
       camera.startPreview(); 
      } catch (Exception e) { 
       Log.e(LOG_TAG, String.format("Error setting preview display: %s", e.getMessage())); 
      } 
     } 
    } 

    void stopPreview() { 
     if (camera != null) { 
      try { 
       camera.stopPreview(); 
      } catch (Exception e) { 
       Log.e(LOG_TAG, String.format("Error stopping preview: %s", e.getMessage())); 
      } 
     } 
    } 

    public void surfaceCreated(SurfaceHolder surfaceHolder) { 
     startPreview(); 
    } 

    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { 
     stopPreview(); 
     startPreview(); 
    } 

    public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 
     stopPreview(); 
    } 
}