【问题标题】:Using ANSI C to extract binary image data from database into a .jpg file使用 ANSI C 将二进制图像数据从数据库中提取到 .jpg 文件中
【发布时间】:2012-01-23 18:32:33
【问题描述】:

我正在使用 ANSI C 编译器(LabWindows/CVI 2010 版)从现有的 Access 2010 数据库中提取整数、字符串和浮点数据,并取得了很好的效果。但是,我无法将存储为长二进制数据的图像数据提取到文件(.jpg 或 .tiff)中。我怀疑一旦知道该技术这不是一项艰巨的任务,我只是没有代码或技术的经验来做到这一点。任何帮助将不胜感激。

【问题讨论】:

  • 你想提取什么?我的意思是,您想将数字的图形表示形式存储在 JPG 文件中?
  • 您使用的是哪个数据访问库?
  • 如果没有 jpeg 或 tiff 库,这不是一项简单的任务。查看 libjepg。
  • H2CO3,我的目标是将存储为长二进制数据的数据提取到其本机文件类型,即 .jpg 文件或 tiff 文件。我可以读取同一个表的不同列中的枚举值,以确定本机文件类型是 .jpg 还是 .tiff。
  • 戴夫,谢谢,我会研究 libjepg。我假设(可能不正确)从数据库中提取此二进制数据的过程在某些方面与在 C 中的文件中写入或读取二进制数据相同,即使用 FILE *fp = fopen("c: \\filename.jpg", "rb+");虽然在将二进制数据从数据库中获取到 C 类型文件 *.

标签: c ms-access tiff ansi jpeg


【解决方案1】:

我希望如果您成功检索到图像列中的所有数据,您只需使用fwrite()将其写入文件即可。

从列中检索长数据的常用访问模式是使用一次获取一个块的函数。这就是 ODBC 函数SQLGetData 的工作原理;你传给它一个固定长度的缓冲区和长度,它的返回值表示数据已经被截断,所以你把你要的数据写入文件,然后再次调用它,直到它返回成功码。

查看National Instruments LabWindows/CVI SQL Toolkit的文档,DBGetColBinaryBuffer()函数可以返回代码-1,DB_TRUNCATION,描述为“传入用来保存结果的缓冲区不够大保存结果。缓冲区中已返回部分结果。"。

我猜DBGetColBinaryBuffer() 是为循环使用而设计的,如果你这样做并将部分结果写入文件,你最终会得到一个有效的图像。

【讨论】:

  • Martin Broadhurst,DBGetColBinaryBuffer() 看起来可以解决问题。我会尽快回到这个项目并让你知道结果。谢谢!
  • 谢谢,在最终弄清楚如何读取它之前意识到 BLOB 是一个加密文件,但在最后的步骤中,您的建议是正确的。
猜你喜欢
  • 2011-04-08
  • 2014-06-12
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2016-01-10
  • 2013-07-01
  • 1970-01-01
相关资源
最近更新 更多