From 9535128a9397ca6eea524a413fb52684d9f6b4e5 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 29 Jul 2016 13:24:13 +0100 Subject: [PATCH] stuck on dicom now --- TODO | 20 ++++++++++-- libvips/foreign/magick7load.c | 54 +++++++++++++++++++++---------- test/images/dicom_test_image.dcm | Bin 0 -> 135424 bytes 3 files changed, 54 insertions(+), 20 deletions(-) create mode 100644 test/images/dicom_test_image.dcm diff --git a/TODO b/TODO index 101b3ee6..b4aafb8b 100644 --- a/TODO +++ b/TODO @@ -1,8 +1,22 @@ -- try a gif with transparency +- dicom fails -- try loading a PNG + ping: + image->depth = 8 + GetImageType() = 6 + TrueColorType + GetPixelChannels() = 3 + image->columns = 128 + image->rows = 128 + image has 1 frames -- try loading a DICOM + read: + image->depth = 16 + GetImageType() = 2 + GrayscaleType + GetPixelChannels() = 2 + image->columns = 128 + image->rows = 128 + image has 1 frames - add tests: diff --git a/libvips/foreign/magick7load.c b/libvips/foreign/magick7load.c index 05d75a1b..bf15f2be 100644 --- a/libvips/foreign/magick7load.c +++ b/libvips/foreign/magick7load.c @@ -256,6 +256,7 @@ vips_foreign_load_magick7_parse( VipsForeignLoadMagick7 *magick7, const char *key; Image *p; + int i; #ifdef DEBUG printf( "image->depth = %zd\n", image->depth ); @@ -294,8 +295,6 @@ vips_foreign_load_magick7_parse( VipsForeignLoadMagick7 *magick7, "PaletteBilevelAlphaType" }; - int i; - for( i = 0; i < VIPS_NUMBER( image_types ); i++ ) if( GetImageType( image ) == image_types[i] ) { printf( "\t%s\n", image_type_names[i] ); @@ -317,20 +316,17 @@ vips_foreign_load_magick7_parse( VipsForeignLoadMagick7 *magick7, out->Xsize = image->columns; out->Ysize = image->rows; magick7->frame_height = image->rows; - out->Bands = GetPixelChannels( image ); - switch( GetImageType( image ) ) { - case PaletteType: - case PaletteAlphaType: - case PaletteBilevelAlphaType: - /* Palette images include an index channel, which we drop. - */ - out->Bands -= 1; - break; - - default: - break; - }; + /* We skip all index channels. Lots of images can have these, it's not + * just the palette ones. + */ + out->Bands = 0; + for( i = 0; i < GetPixelChannels( image ); i++ ) { + PixelChannel channel = GetPixelChannelChannel( image, i ); + + if( channel != IndexPixelChannel ) + out->Bands += 1; + } /* Depth can be 'fractional'. You'd think we should use * GetImageDepth() but that seems to compute something very complex. @@ -760,10 +756,19 @@ vips_foreign_load_magick7_file_header( VipsForeignLoad *load ) * * Hopefully, all_frames is only used rarely. */ - if( magick7->all_frames ) + if( magick7->all_frames ) { +#ifdef DEBUG + printf( "vips_foreign_load_magick7_file_header: ReadImage()\n" ); +#endif /*DEBUG*/ + magick7->image = ReadImage( magick7->image_info, magick7->exception ); + } else { +#ifdef DEBUG + printf( "vips_foreign_load_magick7_file_header: PingImage()\n" ); +#endif /*DEBUG*/ + magick7->image = PingImage( magick7->image_info, magick7->exception ); @@ -804,6 +809,10 @@ vips_foreign_load_magick7_file_load( VipsForeignLoad *load ) #endif /*DEBUG*/ if( !magick7->all_frames ) { +#ifdef DEBUG + printf( "vips_foreign_load_magick7_file_load: ReadImage()\n" ); +#endif /*DEBUG*/ + g_assert( !magick7->image ); magick7->image = ReadImage( magick7->image_info, magick7->exception ); @@ -900,11 +909,22 @@ vips_foreign_load_magick7_buffer_header( VipsForeignLoad *load ) /* See comments on file load above ^^ for notes on the all_frames * handling. */ - if( magick7->all_frames ) + if( magick7->all_frames ) { +#ifdef DEBUG + printf( "vips_foreign_load_magick7_buffer_header: " + "BlobToImage()\n" ); +#endif /*DEBUG*/ + magick7->image = BlobToImage( magick7->image_info, magick7_buffer->buf->data, magick7_buffer->buf->length, magick7->exception ); + } else { +#ifdef DEBUG + printf( "vips_foreign_load_magick7_buffer_header: " + "PingBlob()\n" ); +#endif /*DEBUG*/ + magick7->image = PingBlob( magick7->image_info, magick7_buffer->buf->data, magick7_buffer->buf->length, magick7->exception ); diff --git a/test/images/dicom_test_image.dcm b/test/images/dicom_test_image.dcm new file mode 100644 index 0000000000000000000000000000000000000000..490423993a5488eccbad2aeb06ebb34bf01ee1c5 GIT binary patch literal 135424 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 literal 0 HcmV?d00001