3
我已經使用我在網上找到的代碼設置了一個簡單的相機應用程序。我修改了很多,直到它按我喜歡的方式工作。但是,即使預覽看起來不錯,但由於某種原因,所需的圖像仍會垂直拉伸。我運行一個Galaxy Nexus的來自pictureTaken的圖片延伸
下面這個程序是什麼樣子時,與內置的攝像頭應用程序採取這樣的:
而且這裏是我的應用程序的形象是這樣的:
任何想法爲什麼這是?這兩個圖像是相同的尺寸
在此先感謝。我的代碼是低於
public class CameraActivity extends Activity implements SurfaceHolder.Callback,
OnClickListener {
private static final String TAG = "CameraTest";
Camera mCamera;
boolean mPreviewRunning = false;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.i(TAG, "onCreate");
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.surface_camera);
mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
mSurfaceView.setOnClickListener(this);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
Camera.PictureCallback mJpegCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {
if (imageData != null) {
handleJPEGData(imageData);
mCamera.startPreview();
}
}
};
Camera.PictureCallback mRawCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferQualityOverSpeed = true;
opts.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length, opts);
Log.i(TAG, "Saving picture");
MediaStore.Images.Media.insertImage(getContentResolver(), bmp, "1234", "124");
Log.i(TAG, "Picture Saved");
}
};
private void handleJPEGData(byte[] data) {
Log.i(TAG, "Saving picture");
ContentValues vals = new ContentValues();
vals.put(Images.Media.DATE_TAKEN, new Date().getTime());
vals.put(Images.Media.DATE_ADDED, new Date().getTime());
vals.put(Images.Media.MIME_TYPE, "images/jpeg");
// vals.put(Images.Media., value)
Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());
OutputStream imageFileOS;
try {
imageFileOS = getContentResolver().openOutputStream(uriTarget);
imageFileOS.write(data);
imageFileOS.flush();
imageFileOS.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.i(TAG, "Picture Saved");
mRawCallback.onPictureTaken(data, mCamera);
}
@Override
protected void onResume() {
Log.i(TAG, "onResume");
super.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onStop() {
Log.i(TAG, "onStop");
super.onStop();
}
public void surfaceCreated(SurfaceHolder holder) {
Log.i(TAG, "surfaceCreated");
mCamera = Camera.open();
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Log.i(TAG, "surfaceChanged");
// XXX stopPreview() will crash if preview is not running
if (mPreviewRunning) {
mCamera.stopPreview();
}
Camera.Parameters p = mCamera.getParameters();
p.setPreviewSize(1920, 1080);
p.setAntibanding(Camera.Parameters.ANTIBANDING_AUTO);
p.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
p.setJpegQuality(100);
p.setPictureFormat(ImageFormat.JPEG);
p.setPictureSize(2592,1944);
mCamera.setParameters(p);
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i(TAG, "surfaceDestroyed");
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
}
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
public void onClick(View arg0) {
mCamera.takePicture(null, null, mJpegCallback);
}
}
@ amc6經過一小時的研究,我無法找到任何信息在果凍豆這樣的修復。官方更改報告中沒有提及任何內容http://developer.android.com/sdk/api_diff/16/changes.html 如果任何人都可以提供參考,那麼將非常感謝 – 2013-02-06 06:00:24