2012-09-25 104 views
0

当我从相机(从设备主屏幕)捕捉图像并检查SD卡上的图像尺寸时,它显示在300-500 Kb之间。Android:将原始尺寸的图像保存在SD卡上

但是,当我使用相机意图在我的应用程序中捕捉图像,并将其保存在SD卡(在新文件夹中)时,它显示的图像大小介于5-10 Kb之间。

这是我使用保存图像的SD卡上的代码,在拍摄照片的onActivityResult后:

Bitmap bit = (Bitmap) data.getExtras().get("data"); 
ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
bit.compress(Bitmap.CompressFormat.JPEG, 100, bao); 
byte[] ba = bao.toByteArray(); 
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "My - Images"); 
File f = new File(imagesFolder, "test.jpg"); 
f.createNewFile(); 
FileOutputStream fo = new FileOutputStream(f); 
fo.write(ba); 
fo.flush(); 
fo.close(); 

如何将其保存为原始大小的图像(300-500 KB)?

有没有办法在将图像保存到SD卡上之前获取图像大小?

谢谢

+0

与.PNG格式 –

+0

试试呀。现在图像尺寸增加到35 KB,但高度和宽度仍然(150 x 200)相同。此外,当我从相机拍摄它给出300-500 KB大小的图像和大小是800×800左右 –

+0

其实际上是1600×1200 –

回答

1

您使用以下压缩收到的位图对象:

bit.compress(Bitmap.CompressFormat.JPEG, 100, bao); 

那是你的位图被存储在一个压缩格式的原因。

此外,您可以使用bit.getHeight()bit.getWidth()来获取位图的尺寸。您可以使用bit.getByteCount()让你的位图

+0

但我使用100.这不是说我我要求100%的质量还是原来的质量?因为我试图删除这一行,而我得到的全是一个0大小的图像,因为我没有使用任何格式。我应该使用哪种格式来获得原始质量? –

+0

哦,我的错误,我不知道100是你指定的质量%。在这种情况下,100应该最大。质量。我会尝试查看我的代码,因为我也做了类似的事情。 – zeiger

+0

并找不到像bit.getByteCount(); –

0

首先的实际大小,试图找出图片的使用代码大小低于

Camera mCamera = null; 
Camera.Parameters camParams = mCamera.getParameters(); 
Size camSize = camParams.getPictureSize(); 

如果你的图片大小为5-10个KB,然后您的代码没有任何问题,您可能需要重新访问您的摄像头参数以了解您设置的质量。

1

检查在这里接受了答案,希望它可以为你工作

Android Camera Intent: how to get full sized photo?

+0

是的,我已经阅读过这个。这里的解决方案是“你只有在将其保存在临时文件中时才能获得全尺寸的图像”。在我的应用程序中,我将它们存储在SD卡上,然后检查大小 –