- 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/
我最近在为大学做一些任务,其中包括使用 Turbo Profiler(不幸的是,该软件在任务中隐式声明)来分析 Simpsons 数值积分的 C 和 Pascal 实现。我遇到了一个非常奇怪的案例,怀
“阴极射线管”? “C 运行时”?两者对我来说都没有多大意义;完全是别的什么? 最佳答案 你是对的,它是“阴极射线管”。已经是过去式了 :) 2005 年之前最常见的显示类型。 CRT 单元中的大多数
如何在Turbo C++中实现vesa模式? 最佳答案 我以前是这样做的:你需要实现数据结构和功能,如确定here . 很多 reg.h.al 和东西。 关于turbo-c++ - Turbo C++
我正在使用 Turbo,您可以在这里找到有关它的更多信息:https://www.turbo360.co/docs 我想做的是在创建帖子之前将参数附加到帖子上。在本例中,我尝试附加个人资料。我没有收到
我想问那些有使用 Turbo C++ 3.0 编码经验的人这个问题。 我正在尝试用它制作一个文本用户界面控制台应用程序,我看到 Turbo C++ 3 有一个选项可以在您的程序中链接 Turbo Vi
根据各种消息来源,Rails 7 中表单验证失败的方法是使用状态 422 无法处理的实体进行响应。然而,在我的例子中,这导致 Turbo 发出另一个 GET 请求,这不太可能是预期的结果。 日志如下所
我开始在 Rails 6 中使用 Hotwire 和 Turbo,但遇到 Turbo 无法替换我的 Turbo 框架的问题。我收到以下错误消息:Response has no matching el
在显示类别列表的 View 中,下面有一小部分显示这些类别的“默认”。当用户单击此处时,它会被下拉表单取代,用户可以在其中选择新的默认值。提交表单后,页面的两个部分 - 类别列表以及显示默认值的下部
我使用 Azure Open AI、Langchain 和 Streamlit 构建了一个非常简单的应用程序。以下是我的代码: from dotenv import load_dotenv,find_
我使用 Azure Open AI、Langchain 和 Streamlit 构建了一个非常简单的应用程序。以下是我的代码: from dotenv import load_dotenv,find_
这是 https://github.com/hotwired/turbo-rails/issues/122 的伴侣 复制APP代码:https://github.com/jasonfb/TR001 使
我正在尝试制作在delphi XE7上加密并在PHP端解密的程序 我使用采用 AES 256 加密 CBC 模式的 Lock box 3.6.2。 德尔福XE7代码: Main.pas unit Ma
我是汇编语言的新手,我的代码有问题。起初我尝试了 1 个输入,然后是 1 个输出,它工作得很好。但是当我尝试 2 个输入时。这就是问题出现的时候。当它询问“性别”时,输入 1 和输出 1 似乎重叠了。
我正在按照本教程 ( https://www.turbo360.co/tutorial/audio-streaming-app ) 创建一个音频流网站,该网站允许用户将音乐文件上传到他们的页面。但是,
我有一个表格 Goal Name 我想替换。 作为回复,我发送 303 和“位置:/added_goal”和“/added_
这是网络上的一个常见问题,但我没有找到任何解决我的问题的方法...... 当我单击指向其他页面的链接时,我在所有 Rails 应用程序的控制台中都有相同的警告消息 现在只需要找到解决方案... The
我正在实现 an assemblinker for the 16-bit DCPU来自游戏 0x10c。 有人向我建议的一种技术是使用“覆盖,就像过去在 Turbo Pascal 中一样”,以便在运行
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
我们在 Turbo Pascal 中有一个旧应用程序,它可以将其内部状态保存到文件中,并且我们需要能够在 C# 应用程序中读取/写入该文件。 旧应用程序通过转储各种内存中数据结构来生成文件。在一个地方
我刚刚了解了立交桥涡轮服务及其查询数据的能力。我尝试过以下查询,效果很好: [out:json][timeout:25]; ( node["highway"]({{bbox}}); ); out bo
我是一名优秀的程序员,十分优秀!