From 699556f7efcf6a9af39c37bd0c881ee3edc21da3 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Wed, 2 Aug 2006 18:21:54 +0200 Subject: add JPEGOutputImage.cxx --- src/JPEGOutputImage.cxx | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/JPEGOutputImage.cxx (limited to 'src/JPEGOutputImage.cxx') diff --git a/src/JPEGOutputImage.cxx b/src/JPEGOutputImage.cxx new file mode 100644 index 0000000..09fd4c6 --- /dev/null +++ b/src/JPEGOutputImage.cxx @@ -0,0 +1,118 @@ +// +// Copyright 2006 by Johannes Hofmann +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// + +#include +#include +#include +extern "C" { +#include +} + +#include "JPEGOutputImage.H" + +JPEGOutputImage::JPEGOutputImage(const char *f, int quality) { + file = strdup(f); + fp = NULL; + row = NULL; +} + +JPEGOutputImage::~JPEGOutputImage() { + if (row) { + free(row); + } + if (file) { + free(file); + } +} + +int +JPEGOutputImage::init_internal(int w1, int h1) { + if (row) { + free(row); + row = NULL; + } + + row = (unsigned char*) malloc(sizeof(char) * 3 * W); + if (!row) { + perror("malloc"); + return 1; + } + memset(row, 0, sizeof(char) * 3 * W); + + if (fp) { + fclose(fp); + } + + if ((fp = fopen(file, "wb")) == NULL) { + fprintf(stderr, "can't open %s\n", file); + return 1; + } + + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_compress(&cinfo); + jpeg_stdio_dest(&cinfo, fp); + cinfo.image_width = W; + cinfo.image_height = H; + cinfo.input_components = 3; /* # of color components per pixel */ + cinfo.in_color_space = JCS_RGB; + + jpeg_set_defaults(&cinfo); + jpeg_set_quality(&cinfo, quality, TRUE); + + jpeg_start_compress(&cinfo, TRUE); + +} + +int +JPEGOutputImage::set_pixel_internal(int x, char r, char g, char b) { + row[x*3+0] = r; + row[x*3+1] = g; + row[x*3+2] = b; + + return 0; +} + +int +JPEGOutputImage::next_line_internal() { + JSAMPROW row_pointer[1]; + + row_pointer[0] = row; + jpeg_write_scanlines(&cinfo, &row_pointer, 1); + memset(row, 0, sizeof(char) * 3 * W); + return 0; +} + +int +JPEGOutputImage::done_internal() { + next_line_internal(); + jpeg_finish_compress(&cinfo); + fclose(fp); + fp = NULL; + jpeg_destroy_compress(&cinfo); + if (row) { + free(row); + } + + if (fp) { + fclose(fp); + fp = NULL; + } + return 0; +} + -- cgit v1.2.3 From 61903e6014daa0e381ffee5ae5c4599fb303eb01 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Wed, 2 Aug 2006 18:24:56 +0200 Subject: make things compile again --- src/JPEGOutputImage.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/JPEGOutputImage.cxx') diff --git a/src/JPEGOutputImage.cxx b/src/JPEGOutputImage.cxx index 09fd4c6..d801166 100644 --- a/src/JPEGOutputImage.cxx +++ b/src/JPEGOutputImage.cxx @@ -93,7 +93,7 @@ JPEGOutputImage::next_line_internal() { JSAMPROW row_pointer[1]; row_pointer[0] = row; - jpeg_write_scanlines(&cinfo, &row_pointer, 1); + jpeg_write_scanlines(&cinfo, row_pointer, 1); memset(row, 0, sizeof(char) * 3 * W); return 0; } -- cgit v1.2.3 From 4894107e215fd13e8121bcdc3b610c4db7556689 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Thu, 3 Aug 2006 17:38:41 +0200 Subject: really use JPEG quality --- src/JPEGOutputImage.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/JPEGOutputImage.cxx') diff --git a/src/JPEGOutputImage.cxx b/src/JPEGOutputImage.cxx index d801166..9e00458 100644 --- a/src/JPEGOutputImage.cxx +++ b/src/JPEGOutputImage.cxx @@ -26,10 +26,11 @@ extern "C" { #include "JPEGOutputImage.H" -JPEGOutputImage::JPEGOutputImage(const char *f, int quality) { +JPEGOutputImage::JPEGOutputImage(const char *f, int q) { file = strdup(f); fp = NULL; row = NULL; + quality = q; } JPEGOutputImage::~JPEGOutputImage() { -- cgit v1.2.3 From 6524c95bb8ea0339908ab9bff03211f8c42e77d9 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Thu, 3 Aug 2006 20:45:57 +0200 Subject: add TIFFOutputImage --- src/JPEGOutputImage.cxx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/JPEGOutputImage.cxx') diff --git a/src/JPEGOutputImage.cxx b/src/JPEGOutputImage.cxx index 9e00458..3f7fd11 100644 --- a/src/JPEGOutputImage.cxx +++ b/src/JPEGOutputImage.cxx @@ -101,11 +101,13 @@ JPEGOutputImage::next_line_internal() { int JPEGOutputImage::done_internal() { - next_line_internal(); jpeg_finish_compress(&cinfo); - fclose(fp); - fp = NULL; jpeg_destroy_compress(&cinfo); + + if (fp) { + fclose(fp); + fp = NULL; + } if (row) { free(row); } -- cgit v1.2.3