don't write blue images for grayscale bmp files

This commit is contained in:
David Rose 2012-02-03 22:58:16 +00:00
parent 85e983dbb1
commit 81384baf08
5 changed files with 41 additions and 0 deletions

View File

@ -400,6 +400,15 @@ write(PNMWriter *writer) const {
}
writer->copy_header_from(*this);
if (is_grayscale() && !writer->supports_grayscale()) {
// Copy the gray values to all channels to help out the writer.
for (int y = 0; y < get_y_size(); y++) {
for (int x = 0; x<get_x_size(); x++) {
((PNMImage *)this)->set_xel_val(x, y, get_gray_val(x, y));
}
}
}
int result = writer->write_data(_array, _alpha);
delete writer;

View File

@ -86,6 +86,21 @@ supports_write_row() const {
return false;
}
////////////////////////////////////////////////////////////////////
// Function: PNMWriter::supports_grayscale
// Access: Public, Virtual
// Description: Returns true if this particular PNMWriter understands
// grayscale images. If this is false, then the rgb
// values of the xel array will be pre-filled with the
// same value across all three channels, to allow the
// writer to simply write out RGB data for a grayscale
// image.
////////////////////////////////////////////////////////////////////
bool PNMWriter::
supports_grayscale() const {
return true;
}
////////////////////////////////////////////////////////////////////
// Function: PNMWriter::write_header
// Access: Public, Virtual

View File

@ -50,6 +50,7 @@ public:
virtual int write_data(xel *array, xelval *alpha);
virtual bool supports_write_row() const;
virtual bool supports_grayscale() const;
virtual bool write_header();
virtual bool write_row(xel *array, xelval *alpha);

View File

@ -70,6 +70,7 @@ public:
Writer(PNMFileType *type, ostream *file, bool owns_file);
virtual int write_data(xel *array, xelval *alpha);
virtual bool supports_grayscale() const;
};

View File

@ -634,4 +634,19 @@ write_data(xel *array, xelval *) {
return _y_size;
}
////////////////////////////////////////////////////////////////////
// Function: PNMFileTypeBMP::Writer::supports_grayscale
// Access: Public, Virtual
// Description: Returns true if this particular PNMWriter understands
// grayscale images. If this is false, then the rgb
// values of the xel array will be pre-filled with the
// same value across all three channels, to allow the
// writer to simply write out RGB data for a grayscale
// image.
////////////////////////////////////////////////////////////////////
bool PNMFileTypeBMP::Writer::
supports_grayscale() const {
return false;
}
#endif // HAVE_BMP