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)
break;
case ECF_A8R8G8B8:
CColorConverter_convertFORMATtoFORMAT
= CColorConverter::convert_A8R8G8B8toR8G8B8;
= CColorConverter::convert_A8R8G8B8toB8G8R8;
break;
case ECF_A1R5G5B5:
CColorConverter_convertFORMATtoFORMAT
......
......@@ -186,7 +186,7 @@ bool CImageWriterJPG::writeImage(io::IWriteFile *file, IImage *input,u32 quality
switch( input->getColorFormat () )
{
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_R5G6B5: format = CColorConverter::convert_R5G6B5toR8G8B8; break;
}
......
......@@ -16,11 +16,13 @@ namespace irr
namespace video
{
IImageWriter* createImageWriterPPM()
{
return new CImageWriterPPM;
}
CImageWriterPPM::CImageWriterPPM()
{
#ifdef _DEBUG
......@@ -28,19 +30,27 @@ CImageWriterPPM::CImageWriterPPM()
#endif
}
bool CImageWriterPPM::isAWriteableFileExtension(const c8* fileName) const
{
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 size;
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)
return false;
......@@ -52,24 +62,42 @@ bool CImageWriterPPM::writeImage(io::IWriteFile *file, IImage *image,u32 param)
if (file->write(cache, size) != size)
return false;
s32 n = 0;
s32 r;
for (r = 0; r < imageSize.Height; ++r)
if (binary)
{
s32 c;
for (c = 0; c < imageSize.Width; ++c, ++n)
for (s32 h = 0; h < imageSize.Height; ++h)
{
const video::SColor& pixel = image->getPixel(c, r);
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;
for (s32 c = 0; c < imageSize.Width; ++c)
{
const video::SColor& pixel = image->getPixel(c, h);
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;
}
} // namespace video
} // 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