使用 jpeglib 进行 JPEG 压缩字节流

2024-01-04

我将 JPEG 压缩字节流存储在名为“Image”的变量中,并且我想将此字节流转换为 RGB。

例如:unsigned char *Image;

我的问题是:有没有办法将“Image”传递给 jpeg_stdio_src() 来获取 RGB 颜色值?

谁能告诉我如何使用 jpeglib 库从字节流“图像”获取 RGB?

谢谢


尝试这样的事情。这使用对象 currImage 来存储结果(此处未声明)。

typedef struct {
  struct jpeg_source_mgr pub;   // public fields

  JOCTET * buffer;              // start of buffer
  boolean start_of_file;        // have we gotten any data yet?
} my_source_mgr;

typedef my_source_mgr * my_src_ptr;

static void jpg_memInitSource(j_decompress_ptr cinfo)
{
  my_src_ptr src = (my_src_ptr) cinfo->src;
  src->start_of_file = true;
}

static boolean jpg_memFillInputBuffer(j_decompress_ptr cinfo)
{
  my_src_ptr src = (my_src_ptr) cinfo->src;
  src->start_of_file = FALSE;
  return TRUE;
}

static void jpg_memSkipInputData(j_decompress_ptr cinfo, long num_bytes)
{
  my_src_ptr src = (my_src_ptr) cinfo->src;
  if (num_bytes > 0) {
    src->pub.next_input_byte += (size_t) num_bytes;
    src->pub.bytes_in_buffer -= (size_t) num_bytes;
  }
}

static void jpg_memTermSource(j_decompress_ptr cinfo)
{
  // no work necessary here
}

void decompressJpeg(uint8 const *compressed, size_t len)
{
  struct jpeg_decompress_struct cinfo;
  struct jpeg_error_mgr         jerr;
  my_src_ptr src;

  // ToDo: change error handling to work with our return codes
  cinfo.err = jpeg_std_error(&jerr);
  jpeg_create_decompress(&cinfo);

  cinfo.src = (struct jpeg_source_mgr *)
    (*cinfo.mem->alloc_small) ((j_common_ptr) &cinfo, JPOOL_PERMANENT,
    sizeof(my_source_mgr));
  src = (my_src_ptr) cinfo.src;
  src->buffer = (JOCTET *)compressed;

  src->pub.init_source = jpg_memInitSource;
  src->pub.fill_input_buffer = jpg_memFillInputBuffer;
  src->pub.skip_input_data = jpg_memSkipInputData;
  src->pub.resync_to_restart = jpeg_resync_to_restart;
  src->pub.term_source = jpg_memTermSource;
  src->pub.bytes_in_buffer = len;
  src->pub.next_input_byte = compressed;

  jpeg_read_header(&cinfo, true);
  jpeg_start_decompress(&cinfo);

  // check: cinfo.out_color_space == JCS_RGB

  currImage.setSize(
    (int)cinfo.output_width, (int)cinfo.output_height));

  size_t w = currImage.getWidth() * 3;
  uint8 *p = (uint8*)currImage.getPixels();
  while (cinfo.output_scanline < cinfo.output_height) {
    jpeg_read_scanlines(&cinfo, &p, 1);
    p += w;
  }

  jpeg_finish_decompress(&cinfo); // Do this even under error conditions
  jpeg_destroy_decompress(&cinfo); // Do this even under error conditions
}

EDIT:添加了一些缺少的支持代码。谢谢,埃杜·菲利普!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jpeglib 进行 JPEG 压缩字节流 的相关文章

  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut
  • 如何使用 Perl 分割文本文件并将其存储到二维数组中?

    230215 01 16 2000 57533 0 1045403 0 0 217623 230215 01 18 2000 77659 0 1045403 0 0 217624 230215 01 25 2000 76583 0 1045
  • Angular 4 显示其中的数据

    我不喜欢从 API 返回到我的 Angular 4 应用程序的数据 这是 JSON 的示例 我不关心美元 但这是我正在处理的数据类型 最终目标是在页面上展示 Coin Price BTC 4 281 28 ETH 294 62 etc JS
  • 如何从一维数组和静态字符串创建对象

    我想要一个像 var obj ABC name true dob true CDE name true dob true EFG name true dob true CBA name true dob true XYZ name true
  • C99 中数组的静态大小[重复]

    这个问题在这里已经有答案了 一个非常简单的 C 程序 include
  • 如何在javascript中动态向对象数组添加值?

    这是一个对象数组 var data label 1 value 12 label 1 value 12 label 1 value 12 label 1 value 12 我如何动态地为这些添加值 我尝试了以下代码但没有成功 var lab
  • 如何在 Swift 中使用未知密钥解码 JSON 响应?

    我想将数据拆分为https blockchain info ticker https blockchain info ticker这样每一行都是它自己的String在一个数组中 我正在制作一个获取所选货币价格的应用程序 因此 如果有人想要澳
  • 搜索深度嵌套数组以更新对象

    我有一个深层嵌套的数据结构 我有兴趣匹配数组 和数组数组 中的某个值 然后将一些数据推送到随附的数组中 例如以下是我的数组colors并伴随着的是更多颜色数组可能存在也可能不存在 var myData color green moreCol
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 如何从嵌套的对象数组中获取每个父级的值

    所以我有多个对象数组 每个对象都包含一个子对象 e g const data id 1 name parent 1 children id c1 name child 1 children id g1 name grand 1 childr
  • 将 NumPy 数组按元素映射到更多维度的数组

    我想要地图anumpy array从 NxM 到 NxMx3 其中三个元素的向量是原始条目的函数 lambda x f1 x f2 x f3 x 然而 像这样的事情numpy vectorize不允许改变尺寸 当然 我可以创建一个零数组并进
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • Minizinc:生成有效的转变

    希望有人能帮助我解决这个问题 最初的问题是生成有效的班次 如下所述 我有这样的数组 m m m o o l l m m m l m m m 具有固定长度 S 其中 m 是工作 o 是办公室 我自由了 我需要确保至少每 6m 就有两个 l 在
  • 使用 UISearchBar 过滤数组

    我目前正在使用以下代码来过滤数组并将结果显示在我的 tableView 中 问题是 只有当搜索与确切的单词匹配时 才会返回结果 如何更改数组过滤器以在输入时搜索每个字符 let data Mango Grape Berry Orange A
  • 删除二维数组C++[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这两种释放二维数组的方法是否相似 int M new int 5 for int i 0 i lt 5 i M i new int 3 fo
  • 显示和随机化 php 数组

    我有一个显示结果的数组 如下所示 Array 0 gt 71 1 gt 56 2 gt 64 3 gt 82 4 gt 90 5 gt 80 6 gt 65 7 gt 62 8 gt 14 9 gt 3 我的代码是 while row my
  • 使用静态指针的动态内存分配

    有人可以向我解释一下为什么下面的代码会这样工作吗 这里我已经初始化了outd作为文件中的静态指针code2 c 然后我动态地为其分配内存malloc 从单独文件中的主函数中一次又一次地调用它code1 c 它看起来整个数组以静态方式运行 因
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3

随机推荐

  • CLion 在运行可执行文件时找不到共享库

    我正在做一个项目 到目前为止 我一直在使用一个简单的编辑器和我自己的 Makefile 来构建它 不过 我想切换到 CLion 根据这个问题 https stackoverflow com questions 26918459 using
  • 使用 XMLHttpRequest 发送 POST 数据

    我想在 JavaScript 中使用 XMLHttpRequest 发送一些数据 假设我有以下 HTML 表单
  • 在我的笔记本电脑上运行 MPI 代码

    我是并行计算世界的新手 你能告诉我是否可以在我的双核笔记本电脑上使用 MPI 例程运行 C 代码 或者是否有任何模拟器 仿真器可以做到这一点 大多数 MPI 实现使用共享内存在位于同一主机上的队列之间进行通信 设置笔记本电脑不需要任何特殊操
  • Spring Boot 中用户主目录的环境特定属性

    我正在开发一个 Spring Boot 应用程序 我必须在其中设置Environment specific properties从用户主文件夹 我在 Google 上找到了同样的结果 发现我们可以将不同的属性文件 开发 测试 生产 放在资源
  • COM 无法启动编译为 AnyCPU 的进程外 .Net 服务器

    我正在尝试让 COM 启动我的进程外 NET COM 服务器 如果服务器进程是用 x64 编译的 它就可以工作 但如果我使用 AnyCPU 这就是我想要的 那么它会挂起一段时间 最终失败并显示 0x80080005 CO E SERVER
  • 如何向 VisualVM 提供 JVM 参数?

    我使用 JDK 1 6 0 26 中的 VisualVM 来分析在 Tomcat 下运行的 Java Web 应用程序 但 VisualVM 经常告诉我它没有足够的内存来拍摄快照 并使用 Xmx 开关为 Netbeans 提供更多内存 问题
  • appcompat_v7 abc_activity_chooser_view.xml 中的重复 id @+id/image:58

    创建 apk 时出现以下错误 重复的 id id image 已在此布局中先前定义 abc activity chooser view xml 布局中的 58 appcompat v7 于是我就清理了一下 还是这样 该文件中确实存在重复的
  • 括号检查器代码的测试用例不正确。对于“(()”输出应该是“不平衡”,但我正在“平衡”[重复]

    这个问题在这里已经有答案了 给定一个表达式字符串 exp 检查是否是对和顺序 表达式中是正确的 例如 程序应该打印 balanced for exp and not balanced for exp Input 输入的第一行包含一个整数 T
  • 根据 ocr 图像结尾的段落将字符串拆分为列

    我正在开发一个项目 将打字机写的战争日记笔记从 PDF 扫描转换为文本 我可以成功地 对于原始的未调整大小的文件 可能是 90 提取我首先裁剪的主要文本 Reprex 数据 您可以从头开始尝试使用图像或我在下面提供的文本 我的挑战是保持文本
  • AngularJS:将对象从指令传递到控制器

    在我的指令中 我正在实例化一个对象 我想将此对象传递到与该指令关联的控制器的范围 我怎么做 请记住 这是一个独立的代码 供您理解该问题 在实际问题中 它无助于在控制器内部实例化该对象 我知道指令中的范围对象用于传递 HTML 中指定的值 我
  • 如何在运行单元测试时获取目录

    您好 当运行我的单元测试时 我想要获取我的项目正在运行的目录以检索文件 假设我有一个名为 MyProject 的测试项目 我运行的测试 AppDomain CurrentDomain SetupInformation Application
  • SecurityContextHolder 提供错误的用户详细信息

    在我的应用程序中 我们正在捕获每笔交易的用户详细信息SecurityContextHolder认证对象 但它给出了错误UserID它似乎 以下是代码片段供您参考 安全上下文 xml 弹簧安全 3 2
  • 使用 Spring Data Redis 连接到多个 Redis 服务器

    我正在开发一个具有以下要求的应用程序 Spring 从Redis Server1读取数据 从Redis Server2读取数据 从Redis Server3读取数据 AND 将信息保存到 MySQL 有人可以给我们一个想法 使用 Sprin
  • iGraph中介数的计算

    我见过一些info https stackoverflow com questions 20388087 differences in centrality measures between igraph and tnet表明 iGraph
  • 无法在 iOS 中创建具有文件保护的 SQLite3 数据库

    背景 我一直在观看 WWDC 2011 208 Securing iOS application 他们提到如何使用名为 NSFileProtection 的文件加密来保护我们的数据 当我发现提到的自动方法 38 00 被窃听 https d
  • 原子长操作

    我需要执行以下操作 average total elapsed are Long s average total average elapsed total 但我想用AtomicLong 这就是我正在尝试的 但我不太明白它是否正确 aver
  • Power BI 矩阵中的多种数据类型

    我在 10 个位置有大约 20 个不同的指标 并且想要创建一个矩阵 其中指标作为行 位置作为不同的列 我遇到的问题是指标是不同的数据类型 有些是整数 有些是 s 有些是 s 有没有办法像 Excel 一样将每一行自定义格式为不同的数据类型
  • 访问 ruby​​ 中嵌套哈希的元素[重复]

    这个问题在这里已经有答案了 我正在编写一个用 ruby 编写的小实用程序 它广泛使用嵌套哈希 目前 我正在检查对嵌套哈希元素的访问 如下所示 structure a gt b gt foo I want structure a b valu
  • C#.NET 中的 SQLite3

    我正在尝试在 C NET 中使用 SQLite3 我用谷歌搜索了一下 发现了一些不同的 API 我还检查了 SQLite 网站上的包装器 我喜欢它们 但想编写自己的包装器而不使用添加的依赖项 我发现不需要添加依赖项的所有包装器都不是免费的
  • 使用 jpeglib 进行 JPEG 压缩字节流

    我将 JPEG 压缩字节流存储在名为 Image 的变量中 并且我想将此字节流转换为 RGB 例如 unsigned char Image 我的问题是 有没有办法将 Image 传递给 jpeg stdio src 来获取 RGB 颜色值