Commit 71b4579b authored by hybrid's avatar hybrid

Some image writer fixes for proper directx screenshots.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@998 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 95280da0
...@@ -70,7 +70,7 @@ bool CImageWriterBMP::writeImage(io::IWriteFile* file, IImage* image, u32 param) ...@@ -70,7 +70,7 @@ bool CImageWriterBMP::writeImage(io::IWriteFile* file, IImage* image, u32 param)
break; break;
case ECF_A8R8G8B8: case ECF_A8R8G8B8:
CColorConverter_convertFORMATtoFORMAT CColorConverter_convertFORMATtoFORMAT
= CColorConverter::convert_A8R8G8B8toR8G8B8; = CColorConverter::convert_A8R8G8B8toB8G8R8;
break; break;
case ECF_A1R5G5B5: case ECF_A1R5G5B5:
CColorConverter_convertFORMATtoFORMAT CColorConverter_convertFORMATtoFORMAT
......
...@@ -186,7 +186,7 @@ bool CImageWriterJPG::writeImage(io::IWriteFile *file, IImage *input,u32 quality ...@@ -186,7 +186,7 @@ bool CImageWriterJPG::writeImage(io::IWriteFile *file, IImage *input,u32 quality
switch( input->getColorFormat () ) switch( input->getColorFormat () )
{ {
case ECF_R8G8B8: format = CColorConverter::convert_R8G8B8toR8G8B8; break; case ECF_R8G8B8: format = CColorConverter::convert_R8G8B8toR8G8B8; break;
case ECF_A8R8G8B8: format = CColorConverter::convert_A8R8G8B8toB8G8R8; break; case ECF_A8R8G8B8: format = CColorConverter::convert_A8R8G8B8toR8G8B8; break;
case ECF_A1R5G5B5: format = CColorConverter::convert_A1R5G5B5toB8G8R8; break; case ECF_A1R5G5B5: format = CColorConverter::convert_A1R5G5B5toB8G8R8; break;
case ECF_R5G6B5: format = CColorConverter::convert_R5G6B5toR8G8B8; break; case ECF_R5G6B5: format = CColorConverter::convert_R5G6B5toR8G8B8; break;
} }
......
...@@ -16,11 +16,13 @@ namespace irr ...@@ -16,11 +16,13 @@ namespace irr
namespace video namespace video
{ {
IImageWriter* createImageWriterPPM() IImageWriter* createImageWriterPPM()
{ {
return new CImageWriterPPM; return new CImageWriterPPM;
} }
CImageWriterPPM::CImageWriterPPM() CImageWriterPPM::CImageWriterPPM()
{ {
#ifdef _DEBUG #ifdef _DEBUG
...@@ -28,19 +30,27 @@ CImageWriterPPM::CImageWriterPPM() ...@@ -28,19 +30,27 @@ CImageWriterPPM::CImageWriterPPM()
#endif #endif
} }
bool CImageWriterPPM::isAWriteableFileExtension(const c8* fileName) const bool CImageWriterPPM::isAWriteableFileExtension(const c8* fileName) const
{ {
return strstr(fileName, ".ppm") != 0; return strstr(fileName, ".ppm") != 0;
} }
bool CImageWriterPPM::writeImage(io::IWriteFile *file, IImage *image,u32 param) const
bool CImageWriterPPM::writeImage(io::IWriteFile *file, IImage *image, u32 param) const
{ {
char cache[70]; char cache[70];
char size; char size;
const core::dimension2d<s32>& imageSize = image->getDimension(); const core::dimension2d<s32>& imageSize = image->getDimension();
size = snprintf(cache, 70, "P3\n"); const bool binary = false;
if (binary)
size = snprintf(cache, 70, "P6\n");
else
size = snprintf(cache, 70, "P3\n");
if (file->write(cache, size) != size) if (file->write(cache, size) != size)
return false; return false;
...@@ -52,24 +62,42 @@ bool CImageWriterPPM::writeImage(io::IWriteFile *file, IImage *image,u32 param) ...@@ -52,24 +62,42 @@ bool CImageWriterPPM::writeImage(io::IWriteFile *file, IImage *image,u32 param)
if (file->write(cache, size) != size) if (file->write(cache, size) != size)
return false; return false;
s32 n = 0; if (binary)
s32 r;
for (r = 0; r < imageSize.Height; ++r)
{ {
s32 c; for (s32 h = 0; h < imageSize.Height; ++h)
for (c = 0; c < imageSize.Width; ++c, ++n)
{ {
const video::SColor& pixel = image->getPixel(c, r); for (s32 c = 0; c < imageSize.Width; ++c)
size = snprintf(cache, 70, "%.3u %.3u %.3u%s", pixel.getRed(), pixel.getGreen(), pixel.getBlue(), n % 5 == 4 ? "\n" : " "); {
if (file->write(cache, size) != size) const video::SColor& pixel = image->getPixel(c, h);
return false; const u8 r = pixel.getRed() & 0xff;
const u8 g = pixel.getGreen() & 0xff;
const u8 b = pixel.getBlue() & 0xff;
file->write(&r, 1);
file->write(&g, 1);
file->write(&b, 1);
}
}
}
else
{
s32 n = 0;
for (s32 h = 0; h < imageSize.Height; ++h)
{
for (s32 c = 0; c < imageSize.Width; ++c, ++n)
{
const video::SColor& pixel = image->getPixel(c, h);
size = snprintf(cache, 70, "%.3u %.3u %.3u%s", pixel.getRed(), pixel.getGreen(), pixel.getBlue(), n % 5 == 4 ? "\n" : " ");
if (file->write(cache, size) != size)
return false;
}
} }
} }
return true; return true;
} }
} // namespace video } // namespace video
} // namespace irr } // namespace irr
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment