- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我注意到,在跨设备读取 JPEG 格式的相同照片时,像素值不匹配。它们很接近,但又不同。转换为 PNG 文件时,像素值似乎匹配。
这似乎是由于跨设备的(非)压缩算法造成的。无论如何,这就是我想到的。有没有办法读取 JPEG 文件,以便跨设备从照片中检索相同的像素?我在 BitmapFactory 选项组件中看不到选项。
当前在跨设备处理图像的像素值时应用以下内容来保持大小:
Options options = new Options();
options.inScaled = false;
options.inPreferQualityOverSpeed = true;
目前将像素与以下像素进行比较只是为了查看一些(接近匹配,但不相等):
int[] pixels = new int[bitmapF.getWidth() * bitmapF.getHeight()];
bitmapF.getPixels(pixels, 0, bitmapF.getWidth(), 0, 0, bitmapF.getWidth(), bitmapF.getHeight());
Log.d("pixel entries", "pixels = " + pixels[233] + " - " + pixels[4002] + " - " + pixels[11391]);
注意:如果读取同一个未压缩文件的 PNG 版本,则值与预期相同。
例如,三星 Galaxy S4 和三星 Galaxy S5 甚至在 assets 文件夹中存储了来自相同 jpeg(运行相同测试 Activity )的不同像素。
pixel[233] 例如在 s5 上为 -5205635,但在 s4 上为 -5336451。像素[4002] 也有点偏离。但是在这张 jpeg 图片上,两个设备的像素 [11391] 是相等的。
最佳答案
JPEG 标准不要求解码器实现产生逐位相同的输出图像。不幸的是,指定解码器要求的标准文档 ISO 10918-2 , 显然不是在线免费提供的,而是 Wikipedia says :
...the JPEG standard (and the similar MPEG standards) includes some precision requirements for the decoding, including all parts of the decoding process (variable length decoding, inverse DCT, dequantization, renormalization of outputs); the output from the reference algorithm must not exceed:
- a maximum 1 bit of difference for each pixel component
- low mean square error over each 8×8-pixel block
- [etc.]
使用相同输入的不同解码器输出之间的差异通常是由于内部精度水平不同,尤其是在执行 IDCT 时。另一个可能的差异来源是平滑,它试图减少“ block 状”伪影。
和你一样,我希望设置 inPreferQualityOverSpeed
会产生相同的输出,但实际上并不能保证这一点。我至少可以想到几种方法可以让您在两部不同的手机上获得细微的变化:
BitmapFactory
的实现发生了变化(例如,可能 inPreferQualityOverSpeed
被破坏然后修复,反之亦然),或者BitmapFactory
所利用的不同硬件功能(例如矢量指令集、DSP 协处理器等)。即使是标量浮点单元的差异也可能导致差异,尤其是在生成实际机器指令的 JIT 编译时。鉴于标准中的回旋余地以及您的实验观察,看来保证位对位一致的唯一方法是在您自己的应用程序中执行解码。也许您可以找到一些替代的 Android 兼容库。
关于android - JPEG 图像在多个设备上具有不同的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23565889/
为什么这个脚本不起作用?仅当页面宽度超过 915 像素时,我希望单击按钮时滚动页面 100 像素。我试图通过仅在宽度超过 915 像素时允许该函数运行来实现此目的,但它没有发生。怎么办? $(docu
我需要您帮助我建立一个网站。我是一个新手,已经得到了一个设计为 900 像素宽的主体,但他们给了我一个 1200 像素宽的图像。他们希望图像跨越整个 1200 像素的宽度,因此页面两侧基本上会有 30
我有一个在 y 轴上展开的 UIScrollview 并调用这个委托(delegate)方法: -(void)scrollViewDidScroll:(UIScrollView *)scrollVie
我有一个固定的标题这个标题在我滚动时改变高度和图像标志但是当我调整窗口大小时我希望图像保持比例但随着我缩小浏览器而变得更小标志只有在限制时缩小浏览器靠近图像,但我希望在调整浏览器大小时图像变小。 我该
在我的项目中,我使用 ArcGIS API for JavaScript https://developers.arcgis.com/javascript/但是对于(在这里插入非常大的坏词)我无法覆盖
有没有办法使用 jQuery,根据窗口滚动的距离做不同的事情? 这是我现在使用的代码; $(document).scroll(function() { // If scroll distanc
这基本上是 Jetpack Joyride 中运动的基本版本,但不是 Joyrider 以每秒 100 像素的速度下降,而是字母“x”从控制台的正中间以每秒 100 像素的速度下降和点击事件会导致它以
我像这样处理 MINMAXINFO: case WM_GETMINMAXINFO: { LPMINMAXINFO p_info = (LPMINMAXINFO)lPar
我对 javascript 有点陌生,我一直在查找 documentElement、clientWidth 和 clientHeight 并试图找出为什么它将我的 Canvas 设置为 300px x
我正在编写一些软件来读取 DICOM 文件,但我不确定如何处理具有未定义长度的标签。标准是这样说的 “如果值字段具有显式长度,则值长度字段应包含等于长度(以字节为单位)的值 值字段。否则,值字段 有一
我对 OpenGL 有点陌生,但我很确定我的问题在于所使用的像素格式,或者我的纹理是如何生成的...... 我正在使用 16 位 RGB5_A1 像素格式在平面 2D 四边形上绘制纹理,但在这个阶段我
有没有办法获取直播电视流,例如在像素级别上进行分析。 我的目标是检查直播电视流(例如使用java),例如广播电台 Logo 是否可见。 有机会通过 Google 电视观看此直播吗? 是否有机会通过笔记
我正在尝试构建一个函数,它以给定角度从特定坐标延伸,并循环遍历该线上的像素,直到遇到黑色像素. 如果角度为 180 度,这很容易实现。在这种情况下,搜索只会向下扩展,在每次迭代中将列坐标加 1。然而,
我已经研究了一段时间,但找不到任何解决方案。 这是我的代码 如果您将此代码复制并粘贴到本网站的 HTML 区域:http://jsfiddle.net/T3Nnu/3/ 如果您查看 Facebo
我有一个网页 - http://bit.ly/YHFX5B如果你看一下页脚,你会发现它后面有一些额外的白色像素/线条。我不明白他们是从哪里来的。 请告知他们可能来自哪里。 谢谢,丹 最佳答案 在 #f
如何在没有状态栏和操作栏的情况下获取屏幕高度(像素)或者如果有人告诉我如何获取状态栏和操作栏的高度,它也会有所帮助。我已经找到了屏幕高度,但它包括状态栏和操作栏.我将支持库 v7 用于操作栏。我在网上
Java 字符串根据宽度(像素)换行 在一些场景下,我们经常会通过判断字符串的长度,比如个数来实现换行,但是中文、英文、数字、其实在展示的时候同样长度的字符串,其实它的宽度是不一样的,这也是们我通
我创建了一个不错的简单可扩展列表。它应该像单选列表一样工作,您应该只能选择一个元素。我还没有实现这部分,因为我对列表的大小有疑问: class ExpandableListRadio extends
我使用以下代码滚动到元素顶部,但我想滚动到元素顶部上方 10px,不知道如何执行此操作,有什么建议吗?谢谢! $('html, body').stop(true,true).animate({
我有一个链接,可以在滚动时更改其垂直位置。当我点击此链接时,我想(平滑地)转到页面上的某个位置,该位置距离页面顶部正好 1080 像素。 我无法实现它,希望有人能帮助我。 链接: 脚本: $(do
我是一名优秀的程序员,十分优秀!