1 /*
2 * This file is part of the Scale2x project.
3 *
4 * Copyright (C) 2003 Andrea Mazzoleni
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 #include "pixel.h"
22
pixel_get(int x,int y,const unsigned char * pix,unsigned slice,unsigned pixel,int dx,int dy,int opt_tes)23 pixel_t pixel_get(int x, int y, const unsigned char* pix, unsigned slice, unsigned pixel, int dx, int dy, int opt_tes)
24 {
25 const unsigned char* p;
26 unsigned i;
27 pixel_t v;
28
29 if (opt_tes) {
30 if (x < 0)
31 x += dx;
32 if (x >= dx)
33 x -= dx;
34 if (y < 0)
35 y += dy;
36 if (y >= dy)
37 y -= dy;
38 } else {
39 if (x < 0)
40 x = 0;
41 if (x >= dx)
42 x = dx - 1;
43 if (y < 0)
44 y = 0;
45 if (y >= dy)
46 y = dy - 1;
47 }
48
49 p = pix + (y * slice) + (x * pixel);
50
51 v = 0;
52 for(i=0;i<pixel;++i)
53 v |= ((pixel_t)p[i]) << (i*8);
54
55 return v;
56 }
57
pixel_put(int x,int y,unsigned char * pix,unsigned slice,unsigned pixel,int dx,int dy,pixel_t v)58 void pixel_put(int x, int y, unsigned char* pix, unsigned slice, unsigned pixel, int dx, int dy, pixel_t v)
59 {
60 unsigned char* p;
61 unsigned i;
62
63 if (x < 0 || x >= dx)
64 return;
65 if (y < 0 || y >= dy)
66 return;
67
68 p = pix + (y * slice) + (x * pixel);
69
70 for(i=0;i<pixel;++i) {
71 p[i] = v >> (i*8);
72 }
73 }
74