我試圖獲取字節數組並從那裏複製到另一個數組的某些行的圖片預覽whith onPreviewFrame()
。所以我準備相機和新的字節數組onPreviewFrame返回錯誤的字節[]長度
try {
if (cam != null) {
Camera.Parameters parameters = cam.getParameters();
parameters.setPreviewFrameRate(25);
parameters.setPictureFormat(ImageFormat.JPEG);
cam.setParameters(parameters);
cam.setPreviewDisplay(holder);
cam.startPreview();
arr = new byte[(parameters.getPreviewSize().height)
* (parameters.getPreviewSize().width)];
Log.i("" + parameters.getPictureSize().height, " "
+ parameters.getPictureSize().width);
}
} catch (IOException e) {
Log.d("CAMERA", e.getMessage());
}
和日誌告訴的我:
480 640
所以arr.length = 307200
但是:
public void onPreviewFrame(byte[] data, Camera camera) {
Log.i(arr.length+" ",data.length+"");
}
arr.length = 307200
(其中課程m是指合同幀大小= 640 * 480)
但 data.length = 460800
(它意味着幀大小= 800 * 576)
,當我嘗試將數據複製到與System.arraycopy(data, 0, arr, 0, arr.length);
編曲,然後導出圖片:
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream("/sdcard/new.jpg");
Camera.Parameters parameters = cam.getParameters();
Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(arr, parameters.getPreviewFormat(),
size.width, size.height, null);
image.compressToJpeg(
new Rect(0, 0, image.getWidth(), image.getHeight()), 90,
outStream);
outStream.flush();
outStream.close();
} catch (FileNotFoundException e) {
Log.d("CAMERA", e.getMessage());
} catch (IOException e) {
Log.d("CAMERA", e.getMessage());
}
圖片變成綠色:
那麼,我需要做什麼使數據陣列變成640 * 480?或者,也許你知道另一種從(例如)位圖獲取單行並將其添加到另一個位圖的方法?
明白了!謝謝! – Vitaliy