【问题标题】:Loading PNG image from file to memory buffer using libharu使用 libharu 将 PNG 图像从文件加载到内存缓冲区
【发布时间】:2019-06-09 21:48:30
【问题描述】:

我想将 PNG 图像从文件加载到缓冲区,然后加载到 HPDF_Image,但我无法使用 HPDF_LoadPngImageFromMem 从缓冲区获取图像,因为它返回 HPDF_INVALID_PNG_IMAGE

    // Getting size
    std::ifstream t("3CM//A_3cm2.png");
    t.seekg(0, std::ios::end);
    size_t size = t.tellg();

    // Filling buffer
    std::string buffer(size, ' ');
    t.seekg(0);
    t.read(&buffer[0], size);

    // Loading Image from buffer
    HPDF_Image image = HPDF_LoadPngImageFromMem(pdf, (HPDF_BYTE*) buffer.c_str(), buffer.size());

【问题讨论】:

  • 而不是string,您可能希望缓冲区是vector<uint8_t> 或只是uint8_t 的数组,以避免可能的字符集和编码问题。否则,你正在做的事情的使用和语法看起来没问题。
  • 缓冲区是否正确? PNG本身是否正确?我的第一个猜测是将二进制数据读取为 Windows 文本(更改 \n 字符)。还要检查 IO 调用的返回值。
  • 您没有检查您的文件操作是否成功。文件 ("3CM//A_3cm2.png") 是否正确打开?为什么 btw 名称中有双目录分隔符?

标签: c++ libharu


【解决方案1】:

为什么要先将图像加载到内存中? 此代码代码工作正常

HPDF_Doc   Pdf     = HPDF_New                  ( error_handler , NULL   ) ;
HPDF_Page  Page    = HPDF_AddPage              ( Pdf                    ) ;

HPDF_Image MyImage = HPDF_LoadPngImageFromFile ( Pdf ,"3CM//A_3cm2.png" ) ; 
HPDF_REAL  Width   = HPDF_Image_GetWidth       ( MyImage                ) ;
HPDF_REAL  Height  = HPDF_Image_GetHeight      ( MyImage                ) ;

HPDF_Page_DrawImage ( Page , MyImage , x , y , Width , Height ) ;

...

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 2012-06-01
    • 2013-01-10
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多