所以,我使用fileOutputStream将我的图片保存到SD卡 - 我的图像格式为jpeg-但图像保存失真。这很奇怪,因为缩略图图像是图像的正确表示,但是当打开时,它是一系列水平线。
以下是我的代码中的一些片段:
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
if(previewing){
camera.stopPreview();
previewing=false;
}
if(camera!=null){
try{
camera.setPreviewDisplay(surfaceHolder);
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.setPreviewSize(width, height);
camera.setParameters(parameters);
camera.startPreview();
previewing=true;
} catch(IOException e){}
}
}
和
@Override
public void onPictureTaken(byte[] data, Camera camera) {
OutputStream outputStream;
try{
outputStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis())); //to sd card
imageFileOS.write(data);
imageFileOS.flush();
imageFileOS.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
};
水平扭曲的jpeg和放在一起的缩略图的图像目前没有上传到服务器 - 希望有人知道发生了什么。如果没有,我可以尝试上传图片。
答案 0 :(得分:0)
问题解决了:
在2.2中我没有问题
在2.3中,图像保存失真 - 这是通过一个名为“getBestPictureSize”的方法修复的,这与我用来获得屏幕宽高比的最佳预览大小的方法基本相同
这是为应用程序运行的设备获取最佳图片大小的方法...
private Camera.Size getBestPicturSize(int width, int height)
{
Camera.Size result=null;
Camera.Parameters p = camera.getParameters();
for (Camera.Size size : p.getSupportedPictureSizes()) {
if (size.width<=width && size.height<=height) {
if (result==null) {
result=size;
} else {
int resultArea=result.width*result.height;
int newArea=size.width*size.height;
if (newArea>resultArea) {
result=size;
}
}
}
}
return result;
}
这是surfaceChanged回调,其中使用上述方法来正确调整camera.takePicture(...);
产生的图片大小private Camera.Size getBestPicturSize(int width, int height)
{
Camera.Size result=null;
Camera.Parameters p = camera.getParameters();
for (Camera.Size size : p.getSupportedPictureSizes()) {
if (size.width<=width && size.height<=height) {
if (result==null) {
result=size;
} else {
int resultArea=result.width*result.height;
int newArea=size.width*size.height;
if (newArea>resultArea) {
result=size;
}
}
}
}
return result;
}
您还可以使用此图片大小调整方法来获取预览尺寸,方法是切换以下行:
for (Camera.Size size : p.getSupportedPictureSizes()) {
的
for (Camera.Size size : p.getSupportedPreviewSizes()) {
希望这对某人有所帮助,因为我花了10个小时强调这个功能对我的2.3.4不起作用但是会对我的2.2
据说 - 在2.2上运行getBestPictureSize会导致力量关闭。还没弄清楚我将如何处理呢