OpenImageIOを使用してEXRファイルをロードするOpenImage Denoiserを使用しています。
画像は次のようにロードされます。
std::shared_ptr<ImageBuffer> loadImageOIIO(const std::string& filename, int channels)
{
auto in = OIIO::ImageInput::open(filename);
if (!in)
throw std::runtime_error("cannot open image file: " + filename);
const OIIO::ImageSpec& spec = in->spec();
if (channels == 0)
channels = spec.nchannels;
else if (spec.nchannels < channels)
throw std::runtime_error("not enough image channels");
auto image = std::make_shared<ImageBuffer>(spec.width, spec.height, channels);
if (!in->read_image(0, 0, 0, channels, OIIO::TypeDesc::FLOAT, image->getData()))
throw std::runtime_error("failed to read image data");
in->close();
#if OIIO_VERSION < 10903
OIIO::ImageInput::destroy(in);
#endif
return image;
}
ただし、これにより、画像がデータ ウィンドウのバウンディング ボックスにトリミングされます。画像の値が 0 であるため、この画像は実際の入力画像よりも小さくなっています。
表示ウィンドウのフル解像度で ImageBuffer を取得するにはどうすればよいですか?