答えるのが少し遅れたと思いますが、これが実際の答えです。
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, ... }
HPDF_CS_DEVICE_RGB を使用するように指示したため、LibHaru はこれを理解します。つまり、データを (R、G、B) でグループ化します。
もちろん、ImageMagick を使用して、最初のピクセルにアクセスする方法を見つける必要があります。おそらく、data()、begin()、pointer() などのメソッドです。