/* * compute image line size and bytes per pixel * from bits per pixel and width */ int bmpComputePitch(int bpp, Uint32 width, Uint32 *pitch, BOOL does_round) { int linesize; int bytespp = 1; if(bpp == 1) linesize = PIX2BYTES (width); else if(bpp <= 4) linesize = PIX2BYTES (width << 2); else if (bpp <= 8) linesize = width; else if(bpp <= 16) { linesize = width * 2; bytespp = 2; } else if(bpp <= 24) { linesize = width * 3; bytespp = 3; } else { linesize = width * 4; bytespp = 4; } /* rows are DWORD right aligned */ if (does_round) *pitch = (linesize + 3) & -4; else *pitch = linesize; return bytespp; }
/* * compute image line size and bytes per pixel * from bits per pixel and width */ void GdComputeImagePitch(int bpp, int width, int *pitch, int *bytesperpixel) { int linesize; int bytespp = 1; if(bpp == 1) linesize = PIX2BYTES(width); else if(bpp <= 4) linesize = PIX2BYTES(width<<2); else if(bpp <= 8) linesize = width; else if(bpp <= 16) { linesize = width * 2; bytespp = 2; } else if(bpp <= 24) { linesize = width * 3; bytespp = 3; } else { linesize = width * 4; bytespp = 4; } /* rows are DWORD right aligned*/ *pitch = (linesize + 3) & ~3; *bytesperpixel = bytespp; }