- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当使用 libjpeg 将图像输入 OpenCL 时,为了能够将 channel 视为具有 CL_UNORM_INT8
(在 [0.0, 1.0]
范围内 float )的规范化 uint8,您只能用 4 个 channel 组件为它提供缓冲区。这是有问题的,因为 libjpeg 只输出 3(默认情况下按 RGB 顺序),因为 JPEG 没有不透明度的概念。
我看到的唯一解决方法是使用 libjpeg 扫描线,然后复制一个适当长度的缓冲区(为扫描线中的每个像素添加第四个 channel 组件),然后 memcpy
值,将每个的 alpha 分量设置为 255
。如果你很狡猾,你甚至可以就地执行此操作并将缓冲区初始化为 row_stride * 4
,然后从索引 row_stride * 3 - 1
向后移动到 0
,将组件移动到完整缓冲区中的适当位置(并在必要时为 alpha 添加 255
)。
但是,这感觉很老套,如果您正在处理大图像(我就是),那么让这个额外的传递(聚合)整个图像是 Not Acceptable 。
那么,有没有办法让 libjpeg 将组件的数量扩展到 4?我尝试在 cinfo
上设置属性,例如 output_components
,但无济于事。我读到过唯一的解决方法是使用 jmorecfg.h
中设置的常量 RGB_COMPONENTS = 4
编译一个特殊版本的 libjpeg,但这肯定不便于移植或者对于这种(常见的)输出变化所必需的事情。
最佳答案
事实证明,最好的解决方案(至少,不需要任何自定义构建库或额外通过缓冲区的解决方案)是使用 libjpeg-turbo。从 1.1.90 开始,他们提供了一个颜色空间常量 JCS_EXT_RGBX
,它添加了一个假的 alpha channel 。据我所知这是only documented in the release notes of a beta version on SourceForge因此,除非该 URL 更改或不再存在(阅读:互联网反抗 sf 将代码阴暗地插入到“不活跃”的流行存储库中,并且他们被迫关闭),这是相关的位转载:
When decompressing a JPEG image using an output colorspace of
JCS_EXT_RGBX
,JCS_EXT_BGRX
,JCS_EXT_XBGR
, orJCS_EXT_XRGB
, libjpeg-turbo will now set the unused byte to0xFF
, which allows applications to interpret that byte as an alpha channel (0xFF
= opaque).
请注意,如果您需要,这还允许其他顺序,例如 BGR。
要在您的 jpeg_read_header()
调用之后使用它(因为此调用在 cinfo
上设置了一个成员,我们需要一个默认值)但在您的 jpeg_start_decompress() 之前
调用(因为使用了这个成员的值),添加:
cinfo.out_color_space = JCS_EXT_RGBX; // or JCS_EXT_XRGB, JCS_EXT_BGRX, etc.
现在在解压缩期间扫描线将为每个设置为 255
的像素返回额外的第四个分量。
关于c++ - libjpeg/libjpeg-turbo RGBA/32位int解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31198734/
我的目的是使用 libjpeg-turbo (参见 http://www.libjpeg-turbo.org/Main/HomePage )作为独立 Jpeg Group ( http://www.i
当使用 libjpeg 将图像输入 OpenCL 时,为了能够将 channel 视为具有 CL_UNORM_INT8(在 [0.0, 1.0] 范围内 float )的规范化 uint8,您只能用
在我的 C 程序中,我想使用 libexif 和 libjpeg 在给定路径 inputFilePath,并将生成的 jpeg 保存到输出路径 outputFilePath。 输入的 jpeg 文件很
如标题所示,我使用 AWS EC2 和 AWS linux AMI 来设置运行神经式算法的环境。 Nerual-style 我已经成功安装了 torch、Lua、Loadcaffe、Google Pr
如果可能的话,我想使用 libjpeg 从 JPEG 图像的中间读取一行而不读取前面的所有行。这能做到吗? 最佳答案 答案几乎肯定是“是的,你可以,但它需要比你想要的更多的努力”。 JPEG 图像是标
我想使用 libjpeg 库将图像保存到内存( vector )中。我发现那里有功能: init_destination empty_output_buffer term_destination 我的
我正在使用 libjpeg 解码 jpeg 文件。在解码大图像时,用户可能会切换到另一个 jpeg 文件,那么 libjpeg 是否支持解码中断?非常感谢! 最佳答案 Libjpeg 有一个 I/O
我大部分时间都在使用该示例,它确实创建了一个只是乱码的图像: unsigned char* readJpeg(JNIEnv* env, libraw_processed_image_t *raw) {
我使用来自 Independent JPEG Group 的 jpeg 库 v8d我想改变 jpeg 解压缩读取和处理数据的方式。 在 djpeg main() 中,在每个 jpeg_read_sca
来自 jmorecfg.h : #define PACK_TWO_PIXELS(l,r) ((r>16; \ } while(0) #define WRITE_TWO_ALIGNED
我无法理解我从以下代码中得到的段错误: #include #include #include int main(int argc, char** argv){ FILE*
我正在尝试使用 ijg 的 libjpeg 将 RGB 图像压缩为 JPEG。最后的想法是使用图像传感器拍摄图像并将数据压缩为 ARM Cortex M3 Controller 上的 JPEG;但是,
所以我一直在阅读 libjpeg 文档,它非常乏善可陈。 我一直在尝试弄清楚如何从自定义内存缓冲区而不是文件中读取数据,但我不确定如何测试我的解决方案是否正常工作。 目前我从内存中加载 jpeg 的函
我有下一个基于 libjpeg 的 JPEG 图像解压缩标准代码。 jpeg_decompress_struct cinfo; // ...Set error manager and data sou
我正在尝试使用mingw-w64编译libjpeg(版本8d)。我启动的命令是: MyS.BAT /配置 制作 在第三步,我得到这个错误: $ make D:/Builder/bin/make al
我有这样一个常用的代码: struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); jpeg_stdio_src(&ci
我正在尝试使用 libjpeg 将图像从一个文件复制到另一个文件。我尝试使用 jpeg_read_scanlines/jpeg_write_scanlines 来复制图像数据,但据我所知这些函数计算
我已经创建了自己的 DCT 计算。 如何使用 jpeg_write_coefficients 将我的 64 个 DCT 值写入使用 jpeg_write_coefficients 的 JPEG 文件(
libjpeg 是否允许/具有缩放输出图像的例程? 我有一个图像需要在保存和加载时调整大小,在输入上提供 width1、height1 并在输出上获取 width2、height2,我真的不能在外面使
我正在使用 C++ JPEG 库 (libjpeg),我意识到当某些函数失败时会调用 exit() 并关闭应用程序。如何覆盖此行为并防止应用程序因 libjpeg 错误而关闭? 最佳答案 这是 lib
我是一名优秀的程序员,十分优秀!