]> git.cworth.org Git - apitrace/blobdiff - image/image_pnm.cpp
image: Write the scale factor / endianness line for PFM too.
[apitrace] / image / image_pnm.cpp
index df88c58cb50a17b1d4e330fb8422b90b63805d55..79db1c6e78249e945b9b5a6c2f45fb89b3dc7788 100644 (file)
@@ -80,6 +80,8 @@ Image::writePNM(std::ostream &os, const char *comment) const
 
     if (channelType == TYPE_UNORM8) {
         os << "255" << "\n";
+    } else {
+        os << "1" << "\n";
     }
 
     const unsigned char *row;
@@ -156,6 +158,8 @@ Image::writePNM(std::ostream &os, const char *comment) const
              * General path for float images.
              */
 
+            unsigned copyChannels = std::min(channels, outChannels);
+
             assert(channelType == TYPE_FLOAT);
 
             for (row = start(); row != end(); row += stride()) {
@@ -163,10 +167,10 @@ Image::writePNM(std::ostream &os, const char *comment) const
                 float *dst = (float *)tmp;
                 for (unsigned x = 0; x < width; ++x) {
                     unsigned channel = 0;
-                    for (; channel < channels; ++channel) {
+                    for (; channel < copyChannels; ++channel) {
                         *dst++ = *src++;
                     }
-                    for (; channel < channels; ++channel) {
+                    for (; channel < outChannels; ++channel) {
                         *dst++ = 0;
                     }
                 }
@@ -260,10 +264,8 @@ readPNMHeader(const char *buffer, size_t bufferSize, PNMInfo &info)
     bufferSize -= nextBuffer - currentBuffer;
     currentBuffer = nextBuffer;
 
-    if (info.channelType == TYPE_UNORM8) {
-        // skip over "255\n" at end of header
-        nextBuffer = (const char *) memchr((const void *) currentBuffer, '\n', bufferSize) + 1;
-    }
+    // skip scale factor / endianness line
+    nextBuffer = (const char *) memchr((const void *) currentBuffer, '\n', bufferSize) + 1;
 
     // return start of image data
     return nextBuffer;