С типом, установленным на FIDT_LONG
, setTag
(который является просто оболочкой для FreeImage_SetTagValue
) ожидает массив из 4 байтов (32-разрядных) целых чисел без знака.long
обычно составляет 8 байтов в 64-битных системах.
Кроме того, общий размер байта значения и количество элементов, которые он содержит, должны быть явно установлены.
#include <iostream>
#include <iterator> // std::size (C++17 or newer)
#include <FreeImagePlus.h>
int main()
{
const uint32_t writeValue[] {123, 456};
fipTag t;
t.setKey("FrameTime");
t.setType(FIDT_LONG);
t.setCount(std::size(writeValue)); // number of elements in the array
t.setLength(sizeof(writeValue)); // size of the entire array
// length must be count * expected size for FIDT_LONG (4)
if(t.setValue(writeValue)) {
auto readValue = static_cast<const uint32_t *>(t.getValue());
std::cout << "t.getValue() " << readValue[0] << std::endl;
}
return 0;
}