MCPcopy Create free account
hub / github.com/AcademySoftwareFoundation/MaterialX / saveImage

Method saveImage

source/MaterialXRender/OiioImageLoader.cpp:16–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14#include <OpenImageIO/imageio.h>
15
16MATERIALX_NAMESPACE_BEGIN
17
18bool OiioImageLoader::saveImage(const FilePath& filePath,
19 ConstImagePtr image,
20 bool verticalFlip)
21{
22 OIIO::ImageSpec imageSpec(image->getWidth(), image->getHeight(), image->getChannelCount());
23 OIIO::TypeDesc format;
24 switch (image->getBaseType())
25 {
26 case Image::BaseType::UINT8:
27 format = OIIO::TypeDesc::UINT8;
28 break;
29 case Image::BaseType::INT8:
30 format = OIIO::TypeDesc::INT8;
31 break;
32 case Image::BaseType::UINT16:
33 format = OIIO::TypeDesc::UINT16;
34 break;
35 case Image::BaseType::INT16:
36 format = OIIO::TypeDesc::INT16;
37 break;
38 case Image::BaseType::HALF:
39 format = OIIO::TypeDesc::HALF;
40 break;
41 case Image::BaseType::FLOAT:
42 format = OIIO::TypeDesc::FLOAT;
43 break;
44 default:
45 return false;
46 }
47
48 bool written = false;
49 auto imageOutput = OIIO::ImageOutput::create(filePath.asString());
50 if (imageOutput)
51 {
52 if (imageOutput->open(filePath, imageSpec))
53 {
54 if (verticalFlip)
55 {
56 int scanlinesize = image->getWidth() * image->getChannelCount() * image->getBaseStride();
57 written = imageOutput->write_image(
58 format,
59 static_cast<char*>(image->getResourceBuffer()) + (image->getHeight() - 1) * scanlinesize,
60 OIIO::AutoStride, // default x stride
61 static_cast<OIIO::stride_t>(-scanlinesize), // special y stride
62 OIIO::AutoStride);
63 }
64 else
65 {
66 written = imageOutput->write_image(format, image->getResourceBuffer());
67 }
68 imageOutput->close();
69 }
70 }
71 return written;
72}
73

Callers

nothing calls this directly

Calls 5

getBaseStrideMethod · 0.80
createFunction · 0.70
asStringMethod · 0.45
openMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected