Magick ++ Blob到图像错误

时间:2017-08-01 11:58:50

标签: c++ dll magick++

美好的一天,

我有关于Magick ++ Blob将其转换为Magick Image的问题。这是场景:

  

在我的C#项目中,它传递一个包含pdf文件的字节数据,我用“string response = Encoding.ASCII.GetString(RESP);”将它转换为unsigned * char,我需要使用C ++中的自定义DLL。

     

在我的自定义DLL中,我再次将unsigned char转换为const void ,需要Magick Blob然后我创建了一个Blob,一切都很好。但是当我将blob转换为Magick Image时,它会返回一个错误,但我的C#只返回错误“外部组件抛出异常”。因为它是一个DLL。

这是我的自定义DLL代码:

#include <stdio.h>
#include <string>
#include <Windows.h>
#include <Magick++.h>
#include <zbar.h>
#include <fstream>
#include <opencv2\opencv.hpp>
extern "C"
{
    const void* convert(unsigned char arr[]);

    __declspec(dllexport) const char* ScammingQRCode(unsigned char *pdf){
               Magick::InitializeMagick("");

               size_t s = sizeof(pdf);
               const void* bl = convert(pdf);
               Magick::Blob blob(bl, s);

               Magick::Image image;
               image.depth(8);
               image.read(blob);
    }

    const void* convert(unsigned char arr[]){
          return arr;
    }
}
  

注意:我使用的是ImageMagick-7.0.6-Q16

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的答案。我将接收的数据类型更改为BYTE,在我的C#中我发送了字节本身。我将BYTE转换为const void *并且所有事情都解决了。然后因为我正在测试PDF,我使用了&#34; readImages&#34;方法,它现在完美地工作。

编辑:对我来说也很傻,为了获得blob的长度应该是&#34; blob.length()&#34;而不是sizeof。感谢@emcconville指出它。