2016-10-06 3 views
-1

Я не привык к C#/мобильному программированию/Xamarin, поэтому, пожалуйста, не обвиняйте меня в моих немых ошибках. Я пытаюсь сделать программу, которая покажет, на что способна камера моего устройства. Вот пример кода:Android Camera2 API показывает характеристики камеры

TextView a = new TextView (this); 
A = Java.Lang.Integer ((int)CameraCharacteristics.ColorCorrectionAvailableAberrationModes); 

И ошибка:

"CameraCharacteristics.ColorCorrectionAvailableAberrationModes must declare a body because it is not marked abstract extern or partial" 

Что мне делать?

+0

Что мне делать? прежде всего, изучите C#, поскольку то, что вы написали, очевидно, что вы никогда не программировали с C# и переходите к Xamarin с нулевым знанием C#, это похоже на попытку пилотировать ракеты, даже не прочитав руководство. – Gusman

+0

Я никогда не говорил, что я вообще не программировал на C# - я имел в виду, что я не использую его много. – airbournenation

+0

Тогда почему вы пытаетесь передать список элементов в целое число, а затем в целое число java? если вы действительно знаете C# (что я сомневаюсь), то это прекрасный пример вопроса RTFM. Вы даже пытались прочитать помощь? – Gusman

ответ

1

Вот код в java для печати нескольких характеристик Camera2 Api. Вы можете использовать ту же концепцию и попробовать реализовать в C#. Это может быть не эффективный код, но будет служить вашей цели.

Некоторые характеристики не будут работать на некоторых телефонах, поэтому это зависит от того, какой телефон вы используете для тестирования. Я пробовал с телефонами Nexus 5 и Lenovo.

Характеристики конфигурации контура потока. Из этого link:

private void setupCamera(int width, int height) { 
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 
    try { 
     for(String cameraId: cameraManager.getCameraIdList()) { 
      CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId); 
      if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT) { 
       continue; 
      } 
      StreamConfigurationMap map = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 

//GET OUTPUT SIZES 
mOutputsize = map.getOutputSizes(SurfaceTexture.class); 
for(int i=0; i<mOutputsize.length; i++) { 
    Log.d("OUTPUT SIZES", String.valueOf(mOutputsize[i])); 
} 

//GET HIGH SPEED VIDEO SIZE 
//All the sizes listed in this method are the subset of getOutputSizes(int) method 
mHighSpeedVideoSize = map.getHighSpeedVideoSizes(); 
for(int j=0; j<mHighSpeedVideoSize.length; j++) { 
     Log.d("OUTPUT SIZES", "High speed video sizes"); 
     Log.d("OUTPUT SIZES", mHighSpeedVideoSize[j].toString()); 
} 

//GET THE IMAGE OUTPUT FORMAT (make sure you check if the array is pointing is null or not, otherwise you will have null point exception. The best way is to comment and see one by one) 
mOutputFormat = map.getOutputFormats(); 
Log.d("OUTPUT SIZES", "Image Output Format: "); 
Log.d("OUTPUT SIZES", "Image.format = RAW_SENSOR, Constant Value: 32 (0x00000020) " + String.valueOf(mOutputFormat[0])); 
Log.d("OUTPUT SIZES", "Image.format = JPEG, Constant Value: 256 (0x00000100) " + String.valueOf(mOutputFormat[1])); 
Log.d("OUTPUT SIZES", "Image.format = PRIVATE, Constant Value: 34 (0x00000022) " + String.valueOf(mOutputFormat[2])); 
Log.d("OUTPUT SIZES", "Image.format = YUV_420_888, Constant Value: 35 (0x00000023) " + String.valueOf(mOutputFormat[3])); 

Я даже пытался напечатать некоторые характеристики от этого link. Вот так:

//COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES 
    int[] aberration = cameraCharacteristics.get(CameraCharacteristics.COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES); 
    String str2; 
    for(int i=0; i<aberration.length; i++) { 
     str2 = String.valueOf(aberration[i]); 
     Log.d("OUTPUT SIZES ABR ", str2); 
    } 
     Log.d("OUTPUT SIZES Length: ", String.valueOf(aberration.length)); 

//CONTROL_AE_COMPENSATION_RANGE 
Range<Integer> exposureRange = cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE); 
String maxRange = String.valueOf(exposureRange); 
Log.d("OUTPUT SIZES EXPO range", maxRange + "\n"); 

//CONTROL_AE_COMPENSATION_STEP 
    Rational step = cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP); 
    Log.d("OUTPUT SIZE COMP step", String.valueOf(step)); 


//CONTROL_AE_LOCK_AVAILABLE 
    boolean lock = cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_LOCK_AVAILABLE); 
    Log.d("OUTPUT SIZES LOCK avai", String.valueOf(lock)); 


//CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES 
    int[] videoStabilizationModes = cameraCharacteristics.get(CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 
    for(int i=0; i<videoStabilizationModes.length; i++) { 
     Log.d("OUTPUT SIZES STABI mode", String.valueOf(videoStabilizationModes[i])); 
    } 

//CONTROL_MAX_REGIONS_AWB 
    Integer regionsAWB = cameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AWB); 
    Log.d("OUTPUT SIZES REGION AWB", String.valueOf(regionsAWB)); 

//JPEG_AVAILABLE_THUMBNAIL_SIZES 
    Size[] jpegThumbnail = cameraCharacteristics.get(CameraCharacteristics.JPEG_AVAILABLE_THUMBNAIL_SIZES); 
    for(int i=0; i<jpegThumbnail.length; i++) { 
    Log.d("OUTPUT SIZES JPEG THUMB", String.valueOf(jpegThumbnail[i])); 
    } 


//SENSOR_BLACK_LEVEL_PATTERN 
    BlackLevelPattern blackLevelPattern = cameraCharacteristics.get(CameraCharacteristics.SENSOR_BLACK_LEVEL_PATTERN); 
    Log.d("OUTPUT SIZES BLCK PTRN", String.valueOf(blackLevelPattern)); 


    mCameraId = cameraId; 
      return; 
     } 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 

} 

PS: Это еще не полный код. Это фрагмент кода, который я написал для приложения камеры для этого ответа. Думаю, вам просто нужно знать характеристики. Есть несколько varibles, которые я использовал в коде, но не декларировал в этом ответе. На данный момент я не думаю, что вам нужна эта информация. Happy coding :)

Смежные вопросы