Index: Sources/JPEG/provider_jpeg.cpp =================================================================== RCS file: /var/lib/cvs/Libs/ClanLib-0.6/Sources/JPEG/provider_jpeg.cpp,v retrieving revision 1.10 diff -u -r1.10 provider_jpeg.cpp --- Sources/JPEG/provider_jpeg.cpp 22 Jan 2002 10:29:33 -0000 1.10 +++ Sources/JPEG/provider_jpeg.cpp 23 Apr 2003 17:41:15 -0000 @@ -17,6 +17,7 @@ #include "API/JPEG/provider_jpeg.h" #include "provider_jpeg_generic.h" #include "API/Display/Display/surface.h" +#include "API/Core/IOData/cl_endian.h" #include "API/Display/Display/res_surface.h" CL_Surface *CL_JPEGProvider::create( Index: Sources/JPEG/provider_jpeg_generic.cpp =================================================================== RCS file: /var/lib/cvs/Libs/ClanLib-0.6/Sources/JPEG/provider_jpeg_generic.cpp,v retrieving revision 1.6 diff -u -r1.6 provider_jpeg_generic.cpp --- Sources/JPEG/provider_jpeg_generic.cpp 1 Nov 2001 13:56:51 -0000 1.6 +++ Sources/JPEG/provider_jpeg_generic.cpp 23 Apr 2003 17:41:15 -0000 @@ -120,12 +120,24 @@ { jpeg_read_scanlines(&cinfo, buffer, 1); - for(unsigned int i=0; i < get_pitch(); i += 3) - { - image[pitch * (cinfo.output_scanline - 1) + i + 0] = buffer[0][i + 2]; - image[pitch * (cinfo.output_scanline - 1) + i + 1] = buffer[0][i + 1]; - image[pitch * (cinfo.output_scanline - 1) + i + 2] = buffer[0][i + 0]; - } + if (CL_Endian::is_system_big()) + { + for(unsigned int i=0; i < get_pitch(); i += 3) + { + image[pitch * (cinfo.output_scanline - 1) + i + 2] = buffer[0][i + 2]; + image[pitch * (cinfo.output_scanline - 1) + i + 1] = buffer[0][i + 1]; + image[pitch * (cinfo.output_scanline - 1) + i + 0] = buffer[0][i + 0]; + } + } + else + { + for(unsigned int i=0; i < get_pitch(); i += 3) + { + image[pitch * (cinfo.output_scanline - 1) + i + 0] = buffer[0][i + 2]; + image[pitch * (cinfo.output_scanline - 1) + i + 1] = buffer[0][i + 1]; + image[pitch * (cinfo.output_scanline - 1) + i + 2] = buffer[0][i + 0]; + } + } } } // Greyscale Image @@ -135,12 +147,24 @@ { jpeg_read_scanlines(&cinfo, buffer, 1); - for(int i=0; i < width; i += 1) - { - image[pitch * (cinfo.output_scanline - 1) + 3*i + 0] = buffer[0][i]; - image[pitch * (cinfo.output_scanline - 1) + 3*i + 1] = buffer[0][i]; - image[pitch * (cinfo.output_scanline - 1) + 3*i + 2] = buffer[0][i]; - } + if (CL_Endian::is_system_big()) + { + for(int i=0; i < width; i += 1) + { + image[pitch * (cinfo.output_scanline - 1) + 3*i + 2] = buffer[0][i]; + image[pitch * (cinfo.output_scanline - 1) + 3*i + 1] = buffer[0][i]; + image[pitch * (cinfo.output_scanline - 1) + 3*i + 0] = buffer[0][i]; + } + } + else + { + for(int i=0; i < width; i += 1) + { + image[pitch * (cinfo.output_scanline - 1) + 3*i + 0] = buffer[0][i]; + image[pitch * (cinfo.output_scanline - 1) + 3*i + 1] = buffer[0][i]; + image[pitch * (cinfo.output_scanline - 1) + 3*i + 2] = buffer[0][i]; + } + } } } else Index: Sources/PNG/provider_png.cpp =================================================================== RCS file: /var/lib/cvs/Libs/ClanLib-0.6/Sources/PNG/provider_png.cpp,v retrieving revision 1.29 diff -u -r1.29 provider_png.cpp --- Sources/PNG/provider_png.cpp 23 Mar 2002 07:09:26 -0000 1.29 +++ Sources/PNG/provider_png.cpp 23 Apr 2003 17:41:16 -0000 @@ -26,6 +26,7 @@ #include "API/Display/Display/res_surface.h" #include "API/Core/Resources/resourceoptions.h" #include "API/Core/System/error.h" +#include "API/Core/IOData/cl_endian.h" #include "API/PNG/provider_png.h" // Workaround for a VC bug @@ -220,23 +221,49 @@ if (!ignore_alphachannel) { - for (int i = 0; i < pitch * height; i += 4) - { - image[i + 0] = tmp_image[i + 3]; - image[i + 1] = tmp_image[i + 2]; - image[i + 2] = tmp_image[i + 1]; - image[i + 3] = tmp_image[i + 0]; - } + if (CL_Endian::is_system_big()) + { + for (int i = 0; i < pitch * height; i += 4) + { + image[i + 3] = tmp_image[i + 3]; + image[i + 2] = tmp_image[i + 2]; + image[i + 1] = tmp_image[i + 1]; + image[i + 0] = tmp_image[i + 0]; + } + } + else + { + for (int i = 0; i < pitch * height; i += 4) + { + image[i + 0] = tmp_image[i + 3]; + image[i + 1] = tmp_image[i + 2]; + image[i + 2] = tmp_image[i + 1]; + image[i + 3] = tmp_image[i + 0]; + } + } } else { - for (int i = 0; i < pitch * height; i += 4) - { - image[i + 0] = 255; - image[i + 1] = tmp_image[i + 2]; - image[i + 2] = tmp_image[i + 1]; - image[i + 3] = tmp_image[i + 0]; - } + if (CL_Endian::is_system_big()) + { + for (int i = 0; i < pitch * height; i += 4) + { + image[i + 3] = 255; + image[i + 2] = tmp_image[i + 2]; + image[i + 1] = tmp_image[i + 1]; + image[i + 0] = tmp_image[i + 0]; + } + } + else + { + for (int i = 0; i < pitch * height; i += 4) + { + image[i + 0] = 255; + image[i + 1] = tmp_image[i + 2]; + image[i + 2] = tmp_image[i + 1]; + image[i + 3] = tmp_image[i + 0]; + } + } } delete[] tmp_image; @@ -265,13 +292,26 @@ delete[] row_pointers; image = new unsigned char[height * pitch]; - // Coverting the data in the tmp buffer to our final data - for (int i = 0; i < rowbytes * height; i++) - { - image[3*i + 0] = tmp_image[i]; - image[3*i + 1] = tmp_image[i]; - image[3*i + 2] = tmp_image[i]; - } + + if (CL_Endian::is_system_big()) + { + // Coverting the data in the tmp buffer to our final data + for (int i = 0; i < rowbytes * height; i++) + { + image[3*i + 2] = tmp_image[i]; + image[3*i + 1] = tmp_image[i]; + image[3*i + 0] = tmp_image[i]; + } + } + else + { + for (int i = 0; i < rowbytes * height; i++) + { + image[3*i + 0] = tmp_image[i]; + image[3*i + 1] = tmp_image[i]; + image[3*i + 2] = tmp_image[i]; + } + } delete[] tmp_image; } @@ -298,25 +338,52 @@ // Creating the final image out of tmp_image image = new unsigned char[width * pitch]; + if (!ignore_alphachannel) { - for (int i = 0; i < rowbytes * height; i += 2) - { - image[2*i + 0] = tmp_image[i + 1]; - image[2*i + 1] = tmp_image[i + 0]; - image[2*i + 2] = tmp_image[i + 0]; - image[2*i + 3] = tmp_image[i + 0]; - } + if (CL_Endian::is_system_big()) + { + for (int i = 0; i < rowbytes * height; i += 2) + { + image[2*i + 3] = tmp_image[i + 1]; + image[2*i + 2] = tmp_image[i + 0]; + image[2*i + 1] = tmp_image[i + 0]; + image[2*i + 0] = tmp_image[i + 0]; + } + } + else + { + for (int i = 0; i < rowbytes * height; i += 2) + { + image[2*i + 0] = tmp_image[i + 1]; + image[2*i + 1] = tmp_image[i + 0]; + image[2*i + 2] = tmp_image[i + 0]; + image[2*i + 3] = tmp_image[i + 0]; + } + } } else { - for (int i = 0; i < rowbytes * height; i += 2) - { - image[2*i + 0] = 255; - image[2*i + 1] = tmp_image[i + 0]; - image[2*i + 2] = tmp_image[i + 0]; - image[2*i + 3] = tmp_image[i + 0]; - } + if (CL_Endian::is_system_big()) + { + for (int i = 0; i < rowbytes * height; i += 2) + { + image[2*i + 3] = 255; + image[2*i + 2] = tmp_image[i + 0]; + image[2*i + 1] = tmp_image[i + 0]; + image[2*i + 0] = tmp_image[i + 0]; + } + } + else + { + for (int i = 0; i < rowbytes * height; i += 2) + { + image[2*i + 0] = 255; + image[2*i + 1] = tmp_image[i + 0]; + image[2*i + 2] = tmp_image[i + 0]; + image[2*i + 3] = tmp_image[i + 0]; + } + } } delete[] tmp_image;