我想我回答得有点晚了,但这是一个真实的答案。
我使用 LibHaru 成功地将 itk::Image 添加到我的 pdf 中,因此它对您的工作应该是一样的。首先,您需要知道您使用的库是行专业还是列专业。LibHaru(以及我知道的所有库)以行专业工作,因此您的库也应该如此,否则您将需要“转置”您的数据。
// Black and white image (8 bits per pixel)
itk::Image<unsigned char, 2>::Pointer image = ...;
const unsigned char *imageData = image->GetBufferPointer();
const HPDF_Image image = HPDF_LoadRawImageFromMem(m_Document,
imageData, width, height, HPDF_CS_DEVICE_GRAY, 8);
// Or color image (24 bits per pixel, 8 bits per color component)
itk::Image<RGBPixel, 2>::Pointer image = ...;
const RGBPixel *imageData = image->GetBufferPointer();
const HPDF_Image image = HPDF_LoadRawImageFromMem(m_Document,
reinterpret_cast<const unsigned char *>(imageData),
width, height, HPDF_CS_DEVICE_RGB, 8);
// Usual LibHaru code. EndText, Position, Draw, StartText, etc.
// This code should not be dependant on the type
InsertImage(image);
我认为唯一复杂的部分是 reinterpret_cast。黑白图像不需要一个,因为它已经定义为字节。例如,如果您有此图像
102 255 255
99 200 0
255 0 100
imageData == {102, 255, 255, 99, 200, 0, 255, 0, 100};
但是,如果您有此彩色图像
( 0, 0, 255) (0, 255, 255) ( 42, 255, 242)
(200, 200, 255) (0, 199, 199) (190, 190, 190)
imageData == {0, 0, 255, 0, 255, 255, 42, 255, 242, 200, 200, 255, ... }
LibHaru 会明白,因为你告诉他使用 HPDF_CS_DEVICE_RGB,这意味着它将数据分组在(R,G,B)中。
当然,使用 ImageMagick,您需要找到如何访问第一个像素。它可能是 data()、begin()、pointer() 等方法。