JPEG是一种压缩格式.BitmapFactory.decodeFile("JPEG文件的路径")在将JPEG图像解码为内存中的位图时是否解压缩JPEG图像?当我Bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream)在解码的JPEG文件中使用生成的位图时,压缩图像的大小超过原始图像的大小.任何人都能准确地解释这种现象吗?
BitmapFactory.decodeFile("JPEG文件的路径")在将JPEG图像解码为内存中的位图时是否解压缩JPEG图像?
是.
当我对解码后的JPEG文件生成的位图使用Bitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream)时,压缩图像的大小超过原始图像的大小
这很有可能.质量水平为100,我认为可能,但也许不放心.
任何人都能准确地解释这种现象吗?
不要求它们对于JPEG是相同的.事实上,如果它们是相同的话几乎是随机的.
假设我们从内存中的图像开始(B 原始,其中B是位图的缩写).然后我们将该图像压缩为JPEG(J 原始).JPEG采用有损压缩算法,通过考虑人眼无法识别少量变化的事实,实现对真实世界图像(例如照片)的更好压缩.
假设我们然后将J 原型解码回内存中的位图(B 重新加载).B 重新加载 的图像与B 原始图像不同,因为JPEG压缩会改变图像.B 重新加载 B 原件的程度取决于多种因素,部分与图像本身有关,部分与保存JPEG(100代码中)时使用的质量水平有关.此质量等级范围从0到100,100意味着最高质量.
如果我们然后压缩B 重新加载到第二个JPEG(J 重新加载),则新JPEG 将与原始JPEG(J 原始)不同.部分地,这是因为根据前一段,源位图发生了变化.部分原因是因为我们可能不会选择与原始压缩工作相同的质量水平.
在您的情况下,您没有创建J 原始.您不一定知道使用了什么质量等级(该信息可能存储在JPEG标题中;我忘了).但是因为B 重新加载将与原始位图(无论它来自何处)不同,当您将位图压缩到J 重新加载时,它将与J 原始不同.总的来说,无论是大还是小,都难以抽象地说.但是,由于您选择的质量等级为100,并且J 原件可能已经以较低的质量级别进行了压缩,因此您的压缩图像可能会更大.
这与Android无关.这纯粹是JPEG工作原理的一个功能.如果您对JPEG本身有其他疑问,您可能希望阅读有关JPEG的更多信息,并在某些网站上提出与图像格式有关的问题.
| 归档时间: |
|
| 查看次数: |
1906 次 |
| 最近记录: |