diff options
Diffstat (limited to 'frontend/pisa_img_converter.cc')
-rw-r--r-- | frontend/pisa_img_converter.cc | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/frontend/pisa_img_converter.cc b/frontend/pisa_img_converter.cc new file mode 100644 index 0000000..36e18ec --- /dev/null +++ b/frontend/pisa_img_converter.cc @@ -0,0 +1,99 @@ +/* + SANE EPSON backend + Copyright (C) 2001 SEIKO EPSON CORPORATION + + Date Author Reason + 07/10/2001 Peter New + + This file is part of the `iscan' program. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + As a special exception, the copyright holders give permission + to link the code of this program with the esmod library and + distribute linked combinations including the two. You must obey + the GNU General Public License in all respects for all of the + code used other then esmod. +*/ + +/*--------------------------------------------------------------*/ +#include "pisa_img_converter.h" +#include "pisa_error.h" + +/*--------------------------------------------------------------*/ + + +/*Convert 8bpp grayscale pixels to 24bpp rgb pixels*/ +int convert_grayscale_to_rgb(BYTE* in_buf, long width, long height, BYTE* out_rgb_buf) +{ + long i,j,ofs; + ofs = 0; + for( i = 0; i<height; i++) + for( j = 0; j<width; j++, ofs+=3) + { + /*just copy the gray value 3 times to make rgb*/ + out_rgb_buf[ofs] = in_buf[i*width+j]; + out_rgb_buf[ofs+1] = out_rgb_buf[ofs]; + out_rgb_buf[ofs+2] = out_rgb_buf[ofs]; + } + return PISA_ERR_SUCCESS; +} + +/*Convert 1bpp b&w pixels to 24bpp rgb pixels*/ +int convert_binary_to_rgb(BYTE* in_buf, long width, long height, BYTE* out_rgb_buf) +{ + long i,j,in_ofs, out_ofs; + int rgb_val; + int bitshift; + unsigned int temp_byte = 0; + + //offset into input image + in_ofs = 0; + //offset into output image + out_ofs = 0; + + for( i = 0; i<height; i++) + { + j = 0; + bitshift = -1; + in_ofs = i*(int)((width+7)/8); + while( j<width) + { + //get a new byte every 8 columns + if(j%8 == 0) + { + temp_byte = in_buf[in_ofs+(int)(j/8)]; + bitshift = 7; + } + + //black or white pixel + if((temp_byte >> bitshift) & 1) + rgb_val = IMG_CONVERTER_RGB_WHITE; + else + rgb_val = IMG_CONVERTER_RGB_BLACK; + + //write the rgb values + out_rgb_buf[out_ofs] = (unsigned int) rgb_val; + out_rgb_buf[out_ofs+1] = (unsigned int)rgb_val; + out_rgb_buf[out_ofs+2] = (unsigned int)rgb_val; + j++; + out_ofs+=3; + bitshift--; + } + } + return PISA_ERR_SUCCESS; +} + + |