Browse Source

tags/2021-05-28
jules 17 years ago
parent
commit
7dba2acc3f
1 changed files with 41 additions and 37 deletions
  1. +41
    -37
      src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp

+ 41
- 37
src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp View File

@@ -54,23 +54,22 @@ BEGIN_JUCE_NAMESPACE
//==============================================================================
static void silentErrorCallback1 (j_common_ptr)
{
}
struct JPEGDecodingFailure {};
static void silentErrorCallback2 (j_common_ptr, int)
static void fatalErrorHandler (j_common_ptr)
{
}
throw JPEGDecodingFailure();
}
static void silentErrorCallback3 (j_common_ptr, char*)
{
}
static void silentErrorCallback1 (j_common_ptr) {}
static void silentErrorCallback2 (j_common_ptr, int) {}
static void silentErrorCallback3 (j_common_ptr, char*) {}
static void setupSilentErrorHandler (struct jpeg_error_mgr& err)
{
zerostruct (err);
err.error_exit = silentErrorCallback1;
err.error_exit = fatalErrorHandler;
err.emit_message = silentErrorCallback2;
err.output_message = silentErrorCallback1;
err.format_message = silentErrorCallback3;
@@ -124,47 +123,52 @@ Image* juce_loadJPEGImageFromStream (InputStream& in) throw()
jpegDecompStruct.src->next_input_byte = (const unsigned char*) mb.getData();
jpegDecompStruct.src->bytes_in_buffer = mb.getSize();
jpeg_read_header (&jpegDecompStruct, TRUE);
try
{
jpeg_read_header (&jpegDecompStruct, TRUE);
jpeg_calc_output_dimensions (&jpegDecompStruct);
jpeg_calc_output_dimensions (&jpegDecompStruct);
const int width = jpegDecompStruct.output_width;
const int height = jpegDecompStruct.output_height;
const int width = jpegDecompStruct.output_width;
const int height = jpegDecompStruct.output_height;
jpegDecompStruct.out_color_space = JCS_RGB;
jpegDecompStruct.out_color_space = JCS_RGB;
JSAMPARRAY buffer
= (*jpegDecompStruct.mem->alloc_sarray) ((j_common_ptr) &jpegDecompStruct,
JPOOL_IMAGE,
width * 3, 1);
JSAMPARRAY buffer
= (*jpegDecompStruct.mem->alloc_sarray) ((j_common_ptr) &jpegDecompStruct,
JPOOL_IMAGE,
width * 3, 1);
if (jpeg_start_decompress (&jpegDecompStruct))
{
image = new Image (Image::RGB, width, height, false);
for (int y = 0; y < height; ++y)
if (jpeg_start_decompress (&jpegDecompStruct))
{
jpeg_read_scanlines (&jpegDecompStruct, buffer, 1);
int stride, pixelStride;
uint8* pixels = image->lockPixelDataReadWrite (0, y, width, 1, stride, pixelStride);
const uint8* src = *buffer;
uint8* dest = pixels;
image = new Image (Image::RGB, width, height, false);
for (int i = width; --i >= 0;)
for (int y = 0; y < height; ++y)
{
((PixelRGB*) dest)->setARGB (0, src[0], src[1], src[2]);
dest += pixelStride;
src += 3;
jpeg_read_scanlines (&jpegDecompStruct, buffer, 1);
int stride, pixelStride;
uint8* pixels = image->lockPixelDataReadWrite (0, y, width, 1, stride, pixelStride);
const uint8* src = *buffer;
uint8* dest = pixels;
for (int i = width; --i >= 0;)
{
((PixelRGB*) dest)->setARGB (0, src[0], src[1], src[2]);
dest += pixelStride;
src += 3;
}
image->releasePixelDataReadWrite (pixels);
}
image->releasePixelDataReadWrite (pixels);
jpeg_finish_decompress (&jpegDecompStruct);
}
jpeg_finish_decompress (&jpegDecompStruct);
jpeg_destroy_decompress (&jpegDecompStruct);
}
jpeg_destroy_decompress (&jpegDecompStruct);
catch (...)
{}
}
return image;


Loading…
Cancel
Save