2014-09-22 118 views
1

我開發了一個應用程序,用戶拍攝一張照片,然後將圖像臨時寫入文件以檢查網絡連接,如果網絡可用,請上傳到服務器。低質量圖像輸出相機API

我一直在測試,它的工作原理就像一種享受。但是,我開始在LG Nexus 4上測試,圖像質量很差。預覽是完美的質量,但是當它上傳並顯示在應用程序中時,它的質量如此之低,甚至無法制作出圖像。

我對三星s3和s4進行測試,顯示的圖像是完美的。我在onPictureTaken方法中記錄了字節數組的大小,並且與其他兩個設備產生的值相比,大小非常低。

我在日誌中發現的貓,我得到這樣的:

09-22 10:15:13.001  196-4548/? E/mm-camera﹕ sensor_load_chromatix: libchromatix_imx111_preview.so: 30 
09-22 10:15:13.101  196-4548/? E/mm-camera﹕ vfe_ops_init: E 
09-22 10:15:13.111  196-4548/? E/mm-camera﹕ vfe_legacy_stats_buffer_init: AEC_STATS_BUFNUM 
09-22 10:15:13.111  196-4548/? E/mm-camera﹕ vfe_legacy_stats_buffer_init: AEC_STATS_BUFNUM 
09-22 10:15:13.121  196-4548/? E/mm-camera﹕ mctl_init_stats_proc_info: snap_max_line_cnt =30096 
09-22 10:15:13.131  174-174/? E/QCameraHWI﹕ android::status_t android::QCameraHardwareInterface::setPreviewWindow(preview_stream_ops_t*): mPreviewWindow = 0x0xb79ae9d8, mStreamDisplay = 0x0xb79a8448 
09-22 10:15:13.131  174-174/? D/QCameraHWI﹕ android::status_t android::QCameraHardwareInterface::startPreview(): start preview now 
09-22 10:15:13.131  174-174/? I/QCameraHWI﹕ android::status_t android::QCameraHardwareInterface::startPreview2():Setting ZSL mode 
09-22 10:15:13.131  196-4548/? E/mm-camera﹕ config_proc_CAMERA_SET_INFORM_STARTPREVIEW 
09-22 10:15:13.131  196-4548/? E/mm-camera﹕ config_update_stream_info Storing stream parameters for video inst 1 as : width = 640, height 480, format = 1 inst_handle = 810081 cid = 0 
09-22 10:15:13.151  196-4548/? E/mm-camera﹕ config_update_stream_info Storing stream parameters for video inst 3 as : width = 640, height 480, format = 1 inst_handle = 830083 cid = 0 
09-22 10:15:13.151  196-4548/? E/mm-camera﹕ config_update_stream_info Storing stream parameters for video inst 4 as : width = 512, height 384, format = 1 inst_handle = 840084 cid = 0 
09-22 10:15:13.171  196-4548/? E/mm-camera﹕ config_decide_vfe_outputs: Ports Used 3, Op mode 1 
09-22 10:15:13.171  196-4548/? E/mm-camera﹕ config_decide_vfe_outputs Current mode 0 Full size streaming : Disabled 
09-22 10:15:13.171  196-4548/? E/mm-camera﹕ config_decide_vfe_outputs: Primary: 640x480, extra_pad: 0x0, Fmt: 1, Type: 1, Path: 1 
09-22 10:15:13.171  196-4548/? E/mm-camera﹕ config_decide_vfe_outputs: Secondary: 640x480, extra_pad: 0x0, Fmt: 1, Type: 3, Path: 4 
09-22 10:15:13.171  196-4548/? E/mm-camera﹕ config_update_inst_handles Updated the inst handles as 810081, 830083, 0, 0 
09-22 10:15:13.312  196-4548/? E/mm-camera﹕ sensor_load_chromatix: libchromatix_imx111_zsl.so: 26 
09-22 10:15:13.402  196-4548/? E/mm-camera﹕ camif_client_set_params: camif has associated with obj mask 0x1 
09-22 10:15:13.402  196-4548/? E/mm-camera﹕ config_v2_CAMERA_START_common CAMIF_PARAMS_ADD_OBJ_ID failed -1 
09-22 10:15:13.402  196-4548/? E/mm-camera﹕ vfe_operation_config: format 3 
09-22 10:15:13.402  196-4548/? E/mm-camera﹕ vfe_operation_config:vfe_op_mode=5 
09-22 10:15:13.402  196-4548/? E/mm-camera﹕ Invalid ASD Set Params Type 
09-22 10:15:13.402  196-4548/? E/mm-camera﹕ vfe_set_bestshot: Bestshot mode not changed 

所以我只是要求,希望如果有人遇到過嗎?還是會有人有任何關於它的信息,因爲我不知道如何着手?

感謝

編輯 爲了嘗試解決這個問題,我添加以下代碼:

Camera.Parameters parameters = camera.getParameters(); 
List<Camera.Size> supportedPreviewSizes = camera.getParameters().getSupportedPreviewSizes(); 
List<Camera.Size> supportedPictureSize = camera.getParameters().getSupportedPictureSizes(); 
Log.i("SUPPORTED SIZES: ", String.valueOf(supportedPreviewSizes.size())); 
Log.i("SUPPORTED PICTURE SIZES: ", String.valueOf(supportedPictureSize.size())); 
parameters.setPreviewSize(supportedPreviewSizes.get(0).width, supportedPreviewSizes.get(0).height); 
parameters.setPictureSize(supportedPictureSize.get(1).width, supportedPictureSize.get(1).height); 

正如我以爲使用不支持的圖片大小。

+0

沒有看到您的代碼,很難提供幫助。很好,你在評論中解釋說你沒有使用意圖 - 這是不可能從原始問題中理解的。無論如何,一個瘋狂的猜測:你選擇的Nexus 4相機不支持的圖片尺寸和/或格式。 – 2014-09-23 08:48:19

+0

@AlexCohn對不起,我認爲在相關主題中提及Camera Api會自動排除我正在使用意圖,並​​再次表示歉意。我其實並沒有選擇大小/格式,而是試圖解決我在代碼中添加的這個問題(我已經將它包含在上面的編輯中),但它不適用於我,所以我真的不知道是什麼要做的是,之後我壓縮了這些圖像,但它是來自onpicturetaken的字節[],就我所知,這是問題所在! – 2014-09-23 09:28:46

+0

那麼,你的設備上的'supportedPictureSize.get(1)'是什麼?它是相機還是前置攝像頭? – 2014-09-23 12:48:53

回答

0
Intent captureIntent = new Intent(
          MediaStore.ACTION_IMAGE_CAPTURE); 
        captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
          uri); 
        startActivityForResult(captureIntent, TAKE_PHOTO); 

這將有助於您捕捉高品質的圖像並存儲在uri指出的文件中。 (如果您不打算添加MediaStore.EXTRA_OUTPUT,它將返回低質量的圖像)。

+0

但我們無法從我們的應用更改相機應用分辨率 – praveen 2014-09-22 10:34:59

+0

@Nooh我正在使用相機API,我沒有使用捕獲意圖。 – 2014-09-22 12:03:42

+0

@praveen是的,我知道所以我很困惑,爲什麼會發生這種情況,當我拍照並顯示圖像預覽時看起來不錯,但是,當我檢查jpegcallback中byte []的大小時,它確實是真的與三星設備 – 2014-09-22 12:05:24