2011-09-29 2 views

답변

0

프레임을 읽으려면 실제 소스 코드를 변경할 필요가 없습니다. Camera.PreviewCallback 인터페이스를 구현하면 충분합니다. 카메라에서 원시 데이터를 반환합니다.

+0

, 나는 previewcallback을 추가하는 시도하지만, 하나의 프레임을 반환, 내가 미리보기에서 모든 프레임이 필요합니다. – srikanth

+0

프레임을 읽을 때마다 프레임을 반환합니다. 당신은 그들 모두를 얻고 있습니다. – DeeV

0

카메라 응용 프로그램의 소스를 엉망으로 만들기 전에 여기에서 예제를 시도하십시오. CameraPreview 그런 다음 Camera.PreviewCallback을 구현하십시오. 캡쳐 된 프레임은 YUV420SP에서 제공되므로 컬러 비트 맵으로 변환하여 화면에 표시하려면 rgb로 변환해야합니다. 이처럼 는 : 고맙습니다 귀하의 회신을 alot을

 @Override 
     public void onPreviewFrame(byte[] data, Camera camera) { 

     int imageWidth = camera.getParameters().getPreviewSize().width ; 
     int imageHeight =camera.getParameters().getPreviewSize().height ; 
     int RGBData[] = new int[imageWidth* imageHeight]; 
     byte[] mYUVData = new byte[data.length];  
     System.arraycopy(data, 0, mYUVData, 0, data.length); 
     decodeYUV420SP(RGBData, mYUVData, imageWidth, imageHeight); 

     Bitmap bitmap = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888); 
     bitmap.setPixels(RGBData, 0, imageWidth, 0, 0, imageWidth, imageHeight); 
    } 

    static public void 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); 
      } 
     } 
    } 
관련 문제