Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-08-26 17:42:30 +0000
committerStijn Buys <ingar@osirion.org>2008-08-26 17:42:30 +0000
commitcc0a4412a4ac7f1f78ef7e644a0c06c6dd6dd129 (patch)
tree27271e45ca42c1039d149ab30637fe4fb08eb732 /src/render/jpgfile.cc
parent02e623574c4c12c40a0757ed934a93353f34a653 (diff)
improved dust rendering
Diffstat (limited to 'src/render/jpgfile.cc')
-rw-r--r--src/render/jpgfile.cc32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/render/jpgfile.cc b/src/render/jpgfile.cc
index 74cdea9..872233f 100644
--- a/src/render/jpgfile.cc
+++ b/src/render/jpgfile.cc
@@ -26,6 +26,10 @@ namespace render {
Image *JPG::load(const char *filename)
{
+ struct jpeg_decompress_struct jpeg_decompression_info;
+ struct jpeg_error_mgr jerr;
+
+ int row_stride = 0;
Image *image = 0;
if (!filename)
@@ -36,12 +40,34 @@ Image *JPG::load(const char *filename)
//con_warn << "Could not open " << filename << std::endl;
return 0;
}
+
+ // initialize decompression structures
+ jpeg_decompression_info.err = jpeg_std_error(&jerr);
+ jpeg_create_decompress(&jpeg_decompression_info);
+ jpeg_stdio_src(&jpeg_decompression_info, jpg_file->handle());
+
+ // read JPEG header
+ jpeg_read_header(&jpeg_decompression_info, TRUE);
+ jpeg_start_decompress(&jpeg_decompression_info);
+
+ row_stride = jpeg_decompression_info.output_width * jpeg_decompression_info.output_components;
+ image = new Image(jpeg_decompression_info.output_width,
+ jpeg_decompression_info.output_height,
+ jpeg_decompression_info.output_components);
+
+ // read pixel data
+ JSAMPLE *row_pointer;
+ while (jpeg_decompression_info.output_scanline < jpeg_decompression_info.output_height) {
+ row_pointer = (*image)[jpeg_decompression_info.output_scanline*row_stride];
+ jpeg_read_scanlines(&jpeg_decompression_info, &row_pointer, 1);
+ }
+ jpeg_finish_decompress(&jpeg_decompression_info);
-
+ // destroy decompression structures
+ jpeg_destroy_decompress(&jpeg_decompression_info);
filesystem::close(jpg_file);
-// con_debug << " " << filename << " " << png_width << "x" << png_height << "x" << channels * png_depth << "bpp" << std::endl;
-
+ con_debug << " " << filename << " " << image->width() << "x" << image->height() << "x" << image->bpp() << "bpp" << std::endl;
return image;
}