我是Android开发的新手,最近,我用android制作了一个简单的相机应用程序,但我遇到了无法解决的问题。首先,我将预览屏幕旋转到90度,以便表面视图处于纵向模式。我使用过以下代码。
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
if(mCamera != null) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
requestLayout();
mCamera.setDisplayOrientation(90);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
但问题并未解决。在我拍摄并检查文件夹中的图像后,我用我的应用程序拍摄的jpg图像水平保存,分辨率不佳。
我不确定如何清楚地解释它,但我想要做的是改变图像大小并将其保存为纵向模式。 保存图像的代码与下面的示例类似,但我不确定在保存之前如何以及在何处可以更改大小和旋转。对不起,我的英语不好。如果我可以为新手提供一些明确的提示,那就太好了。
private class SaveImageTask extends AsyncTask<byte[], Void, Void> {
@Override
protected Void doInBackground(byte[]... data) {
FileOutputStream outStream = null;
// Write to SD Card
try {
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/camtest");
dir.mkdirs();
String fileName = String.format("%d.jpg", System.currentTimeMillis());
File outFile = new File(dir, fileName);
outStream = new FileOutputStream(outFile);
outStream.write(data[0]);
outStream.flush();
outStream.close();
是否可以在PictureCallback中旋转数据?
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
//change the rotarion
new SaveImageTask().execute(data);
resetCam();
Log.d(TAG, "onPictureTaken - jpeg");
}
};