Simple Image Loading LibrarY 0.1.0
SILLYImageContext.cpp
1/***********************************************************************
2 filename: SILLYImageContext.cpp
3 created: 10 Jun 2006
4 author: Olivier Delannoy
5
6 purpose: Implementation file for ImageContext class
7*************************************************************************/
8/***************************************************************************
9 * Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining
12 * a copy of this software and associated documentation files (the
13 * "Software"), to deal in the Software without restriction, including
14 * without limitation the rights to use, copy, modify, merge, publish,
15 * distribute, sublicense, and/or sell copies of the Software, and to
16 * permit persons to whom the Software is furnished to do so, subject to
17 * the following conditions:
18 *
19 * The above copyright notice and this permission notice shall be
20 * included in all copies or substantial portions of the Software.
21 *
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
26 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
27 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28 * OTHER DEALINGS IN THE SOFTWARE.
29 ***************************************************************************/
30#ifdef HAVE_CONFIG_H
31#include <config.h>
32#endif
33
34#include "SILLYImageContext.h"
35#ifndef SILLY_OPT_INLINE
36#define inline
37#include "SILLYImageContext.icpp"
38#undef inline
39#endif
40#include <cstring>
41// Start section of namespace SILLY
42namespace SILLY
43{
44
46{
47 size_t depth;
48 switch(d_format)
49 {
50 case PF_A1B5G5R5:
51 depth = 2;
52 break;
53 case PF_RGB:
54 depth = 3;
55 break;
56 case PF_RGBA:
57 depth = 4;
58 break;
59 }
60
61 // Do the flipping
62 byte *p1,*p2,*tmp; // tmp pointers
63 size_t len = d_width * depth; // length of horizontal line in bytes
64 tmp = new byte[len]; // Allocate a temporary line
65 if ( !tmp )
66 return false;
67
68 size_t y , y2;
69 y2 = d_height - 1;
70 for ( y = 0; y < d_height >> 1; y++ )
71 {
72 p1 = (d_pixels) + len * y;
73 p2 = (d_pixels) + len * y2;
74 memcpy( tmp, p1, len );
75 memcpy( p1, p2, len );
76 memcpy( p2, tmp, len );
77 y2--;
78 }
79 delete [] tmp;
80 return true;
81}
82
83
84} // End section of namespace SILLY
Simple Image Loading LibrarY namespace.
bool flipVertically()
Flip pixel ordering.