]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sun, 22 Aug 2010 15:08:40 +0000 (15:08 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sun, 22 Aug 2010 15:08:40 +0000 (15:08 +0000)
12 files changed:
Makefile.in
coders/Make.com
coders/Makefile.am
coders/bgr.c [new file with mode: 0644]
coders/cmyk.c
coders/rgb.c
config/configure.xml
magick/coder.c
magick/nt-base.h
magick/pixel.h
magick/quantum.h
magick/version.h

index 1b5fbe3a58775324e958503c02d268498ef12256..bca8c558e93bb19ee76eee4afa11825fb0253297 100644 (file)
@@ -387,6 +387,13 @@ coders_avs_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(coders_avs_la_LDFLAGS) $(LDFLAGS) -o $@
 @WITH_MODULES_TRUE@am_coders_avs_la_rpath = -rpath $(codersdir)
+coders_bgr_la_DEPENDENCIES = $(MAGICKCORE_LIBS)
+am_coders_bgr_la_OBJECTS = coders/coders_bgr_la-bgr.lo
+coders_bgr_la_OBJECTS = $(am_coders_bgr_la_OBJECTS)
+coders_bgr_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(coders_bgr_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_MODULES_TRUE@am_coders_bgr_la_rpath = -rpath $(codersdir)
 coders_bmp_la_DEPENDENCIES = $(MAGICKCORE_LIBS)
 am_coders_bmp_la_OBJECTS = coders/coders_bmp_la-bmp.lo
 coders_bmp_la_OBJECTS = $(am_coders_bmp_la_OBJECTS)
@@ -1387,35 +1394,35 @@ am__magick_libMagickCore_la_SOURCES_DIST = magick/ImageMagick.h \
        magick/version.c magick/version.h magick/vms.h magick/widget.c \
        magick/widget.h magick/xml-tree.c magick/xml-tree.h \
        magick/xwindow.c magick/xwindow.h magick/nt-feature.c \
-       magick/nt-base.c coders/art.c coders/avs.c coders/bmp.c \
-       coders/braille.c coders/cals.c coders/caption.c coders/cin.c \
-       coders/cip.c coders/clip.c coders/cmyk.c coders/cut.c \
-       coders/dcm.c coders/dds.c coders/debug.c coders/dib.c \
-       coders/dng.c coders/dot.c coders/dpx.c coders/fax.c \
-       coders/fits.c coders/gif.c coders/gradient.c coders/gray.c \
-       coders/hald.c coders/histogram.c coders/hrz.c coders/html.c \
-       coders/icon.c coders/info.c coders/inline.c coders/ipl.c \
-       coders/label.c coders/magick.c coders/map.c coders/mat.c \
-       coders/matte.c coders/meta.c coders/miff.c coders/mono.c \
-       coders/mpc.c coders/mpeg.c coders/mpr.c coders/msl.c \
-       coders/mtv.c coders/mvg.c coders/null.c coders/otb.c \
-       coders/palm.c coders/pattern.c coders/pcd.c coders/pcl.c \
-       coders/pcx.c coders/pdb.c coders/pdf.c coders/pes.c \
-       coders/pict.c coders/pix.c coders/plasma.c coders/pnm.c \
-       coders/preview.c coders/ps.c coders/ps2.c coders/ps3.c \
-       coders/psd.c coders/pwp.c coders/raw.c coders/rgb.c \
-       coders/rla.c coders/rle.c coders/scr.c coders/sct.c \
-       coders/sfw.c coders/sgi.c coders/stegano.c coders/sun.c \
-       coders/svg.c coders/tga.c coders/thumbnail.c coders/tile.c \
-       coders/tim.c coders/ttf.c coders/txt.c coders/uil.c \
-       coders/url.c coders/uyvy.c coders/vicar.c coders/vid.c \
-       coders/viff.c coders/wbmp.c coders/wpg.c coders/xbm.c \
-       coders/xc.c coders/xcf.c coders/xpm.c coders/xps.c \
-       coders/ycbcr.c coders/yuv.c coders/dps.c coders/djvu.c \
-       coders/exr.c coders/fpx.c coders/clipboard.c coders/emf.c \
-       coders/jbig.c coders/jpeg.c coders/jp2.c coders/png.c \
-       coders/ept.c coders/tiff.c coders/wmf.c coders/x.c \
-       coders/xwd.c filters/analyze.c
+       magick/nt-base.c coders/art.c coders/avs.c coders/bgr.c \
+       coders/bmp.c coders/braille.c coders/cals.c coders/caption.c \
+       coders/cin.c coders/cip.c coders/clip.c coders/cmyk.c \
+       coders/cut.c coders/dcm.c coders/dds.c coders/debug.c \
+       coders/dib.c coders/dng.c coders/dot.c coders/dpx.c \
+       coders/fax.c coders/fits.c coders/gif.c coders/gradient.c \
+       coders/gray.c coders/hald.c coders/histogram.c coders/hrz.c \
+       coders/html.c coders/icon.c coders/info.c coders/inline.c \
+       coders/ipl.c coders/label.c coders/magick.c coders/map.c \
+       coders/mat.c coders/matte.c coders/meta.c coders/miff.c \
+       coders/mono.c coders/mpc.c coders/mpeg.c coders/mpr.c \
+       coders/msl.c coders/mtv.c coders/mvg.c coders/null.c \
+       coders/otb.c coders/palm.c coders/pattern.c coders/pcd.c \
+       coders/pcl.c coders/pcx.c coders/pdb.c coders/pdf.c \
+       coders/pes.c coders/pict.c coders/pix.c coders/plasma.c \
+       coders/pnm.c coders/preview.c coders/ps.c coders/ps2.c \
+       coders/ps3.c coders/psd.c coders/pwp.c coders/raw.c \
+       coders/rgb.c coders/rla.c coders/rle.c coders/scr.c \
+       coders/sct.c coders/sfw.c coders/sgi.c coders/stegano.c \
+       coders/sun.c coders/svg.c coders/tga.c coders/thumbnail.c \
+       coders/tile.c coders/tim.c coders/ttf.c coders/txt.c \
+       coders/uil.c coders/url.c coders/uyvy.c coders/vicar.c \
+       coders/vid.c coders/viff.c coders/wbmp.c coders/wpg.c \
+       coders/xbm.c coders/xc.c coders/xcf.c coders/xpm.c \
+       coders/xps.c coders/ycbcr.c coders/yuv.c coders/dps.c \
+       coders/djvu.c coders/exr.c coders/fpx.c coders/clipboard.c \
+       coders/emf.c coders/jbig.c coders/jpeg.c coders/jp2.c \
+       coders/png.c coders/ept.c coders/tiff.c coders/wmf.c \
+       coders/x.c coders/xwd.c filters/analyze.c
 am__objects_2 = magick/magick_libMagickCore_la-accelerate.lo \
        magick/magick_libMagickCore_la-animate.lo \
        magick/magick_libMagickCore_la-annotate.lo \
@@ -1535,6 +1542,7 @@ am__objects_2 = magick/magick_libMagickCore_la-accelerate.lo \
 @X11_DELEGATE_TRUE@    coders/magick_libMagickCore_la-xwd.lo
 am__objects_16 = coders/magick_libMagickCore_la-art.lo \
        coders/magick_libMagickCore_la-avs.lo \
+       coders/magick_libMagickCore_la-bgr.lo \
        coders/magick_libMagickCore_la-bmp.lo \
        coders/magick_libMagickCore_la-braille.lo \
        coders/magick_libMagickCore_la-cals.lo \
@@ -1928,66 +1936,67 @@ am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(Magick___lib_libMagick___la_SOURCES) \
        $(coders_art_la_SOURCES) $(coders_avs_la_SOURCES) \
-       $(coders_bmp_la_SOURCES) $(coders_braille_la_SOURCES) \
-       $(coders_cals_la_SOURCES) $(coders_caption_la_SOURCES) \
-       $(coders_cin_la_SOURCES) $(coders_cip_la_SOURCES) \
-       $(coders_clip_la_SOURCES) $(coders_clipboard_la_SOURCES) \
-       $(coders_cmyk_la_SOURCES) $(coders_cut_la_SOURCES) \
-       $(coders_dcm_la_SOURCES) $(coders_dds_la_SOURCES) \
-       $(coders_debug_la_SOURCES) $(coders_dib_la_SOURCES) \
-       $(coders_djvu_la_SOURCES) $(coders_dng_la_SOURCES) \
-       $(coders_dot_la_SOURCES) $(coders_dps_la_SOURCES) \
-       $(coders_dpx_la_SOURCES) $(coders_emf_la_SOURCES) \
-       $(coders_ept_la_SOURCES) $(coders_exr_la_SOURCES) \
-       $(coders_fax_la_SOURCES) $(coders_fits_la_SOURCES) \
-       $(coders_fpx_la_SOURCES) $(coders_gif_la_SOURCES) \
-       $(coders_gradient_la_SOURCES) $(coders_gray_la_SOURCES) \
-       $(coders_hald_la_SOURCES) $(coders_histogram_la_SOURCES) \
-       $(coders_hrz_la_SOURCES) $(coders_html_la_SOURCES) \
-       $(coders_icon_la_SOURCES) $(coders_info_la_SOURCES) \
-       $(coders_inline_la_SOURCES) $(coders_ipl_la_SOURCES) \
-       $(coders_jbig_la_SOURCES) $(coders_jp2_la_SOURCES) \
-       $(coders_jpeg_la_SOURCES) $(coders_label_la_SOURCES) \
-       $(coders_magick_la_SOURCES) $(coders_map_la_SOURCES) \
-       $(coders_mat_la_SOURCES) $(coders_matte_la_SOURCES) \
-       $(coders_meta_la_SOURCES) $(coders_miff_la_SOURCES) \
-       $(coders_mono_la_SOURCES) $(coders_mpc_la_SOURCES) \
-       $(coders_mpeg_la_SOURCES) $(coders_mpr_la_SOURCES) \
-       $(coders_msl_la_SOURCES) $(coders_mtv_la_SOURCES) \
-       $(coders_mvg_la_SOURCES) $(coders_null_la_SOURCES) \
-       $(coders_otb_la_SOURCES) $(coders_palm_la_SOURCES) \
-       $(coders_pattern_la_SOURCES) $(coders_pcd_la_SOURCES) \
-       $(coders_pcl_la_SOURCES) $(coders_pcx_la_SOURCES) \
-       $(coders_pdb_la_SOURCES) $(coders_pdf_la_SOURCES) \
-       $(coders_pes_la_SOURCES) $(coders_pict_la_SOURCES) \
-       $(coders_pix_la_SOURCES) $(coders_plasma_la_SOURCES) \
-       $(coders_png_la_SOURCES) $(coders_pnm_la_SOURCES) \
-       $(coders_preview_la_SOURCES) $(coders_ps_la_SOURCES) \
-       $(coders_ps2_la_SOURCES) $(coders_ps3_la_SOURCES) \
-       $(coders_psd_la_SOURCES) $(coders_pwp_la_SOURCES) \
-       $(coders_raw_la_SOURCES) $(coders_rgb_la_SOURCES) \
-       $(coders_rla_la_SOURCES) $(coders_rle_la_SOURCES) \
-       $(coders_scr_la_SOURCES) $(coders_sct_la_SOURCES) \
-       $(coders_sfw_la_SOURCES) $(coders_sgi_la_SOURCES) \
-       $(coders_stegano_la_SOURCES) $(coders_sun_la_SOURCES) \
-       $(coders_svg_la_SOURCES) $(coders_tga_la_SOURCES) \
-       $(coders_thumbnail_la_SOURCES) $(coders_tiff_la_SOURCES) \
-       $(coders_tile_la_SOURCES) $(coders_tim_la_SOURCES) \
-       $(coders_ttf_la_SOURCES) $(coders_txt_la_SOURCES) \
-       $(coders_uil_la_SOURCES) $(coders_url_la_SOURCES) \
-       $(coders_uyvy_la_SOURCES) $(coders_vicar_la_SOURCES) \
-       $(coders_vid_la_SOURCES) $(coders_viff_la_SOURCES) \
-       $(coders_wbmp_la_SOURCES) $(coders_wmf_la_SOURCES) \
-       $(coders_wpg_la_SOURCES) $(coders_x_la_SOURCES) \
-       $(coders_xbm_la_SOURCES) $(coders_xc_la_SOURCES) \
-       $(coders_xcf_la_SOURCES) $(coders_xpm_la_SOURCES) \
-       $(coders_xps_la_SOURCES) $(coders_xwd_la_SOURCES) \
-       $(coders_ycbcr_la_SOURCES) $(coders_yuv_la_SOURCES) \
-       $(filters_analyze_la_SOURCES) $(ltdl_dld_link_la_SOURCES) \
-       $(ltdl_dlopen_la_SOURCES) $(ltdl_dyld_la_SOURCES) \
-       $(ltdl_libltdl_la_SOURCES) $(ltdl_libltdlc_la_SOURCES) \
-       $(ltdl_load_add_on_la_SOURCES) $(ltdl_loadlibrary_la_SOURCES) \
-       $(ltdl_shl_load_la_SOURCES) $(magick_libMagickCore_la_SOURCES) \
+       $(coders_bgr_la_SOURCES) $(coders_bmp_la_SOURCES) \
+       $(coders_braille_la_SOURCES) $(coders_cals_la_SOURCES) \
+       $(coders_caption_la_SOURCES) $(coders_cin_la_SOURCES) \
+       $(coders_cip_la_SOURCES) $(coders_clip_la_SOURCES) \
+       $(coders_clipboard_la_SOURCES) $(coders_cmyk_la_SOURCES) \
+       $(coders_cut_la_SOURCES) $(coders_dcm_la_SOURCES) \
+       $(coders_dds_la_SOURCES) $(coders_debug_la_SOURCES) \
+       $(coders_dib_la_SOURCES) $(coders_djvu_la_SOURCES) \
+       $(coders_dng_la_SOURCES) $(coders_dot_la_SOURCES) \
+       $(coders_dps_la_SOURCES) $(coders_dpx_la_SOURCES) \
+       $(coders_emf_la_SOURCES) $(coders_ept_la_SOURCES) \
+       $(coders_exr_la_SOURCES) $(coders_fax_la_SOURCES) \
+       $(coders_fits_la_SOURCES) $(coders_fpx_la_SOURCES) \
+       $(coders_gif_la_SOURCES) $(coders_gradient_la_SOURCES) \
+       $(coders_gray_la_SOURCES) $(coders_hald_la_SOURCES) \
+       $(coders_histogram_la_SOURCES) $(coders_hrz_la_SOURCES) \
+       $(coders_html_la_SOURCES) $(coders_icon_la_SOURCES) \
+       $(coders_info_la_SOURCES) $(coders_inline_la_SOURCES) \
+       $(coders_ipl_la_SOURCES) $(coders_jbig_la_SOURCES) \
+       $(coders_jp2_la_SOURCES) $(coders_jpeg_la_SOURCES) \
+       $(coders_label_la_SOURCES) $(coders_magick_la_SOURCES) \
+       $(coders_map_la_SOURCES) $(coders_mat_la_SOURCES) \
+       $(coders_matte_la_SOURCES) $(coders_meta_la_SOURCES) \
+       $(coders_miff_la_SOURCES) $(coders_mono_la_SOURCES) \
+       $(coders_mpc_la_SOURCES) $(coders_mpeg_la_SOURCES) \
+       $(coders_mpr_la_SOURCES) $(coders_msl_la_SOURCES) \
+       $(coders_mtv_la_SOURCES) $(coders_mvg_la_SOURCES) \
+       $(coders_null_la_SOURCES) $(coders_otb_la_SOURCES) \
+       $(coders_palm_la_SOURCES) $(coders_pattern_la_SOURCES) \
+       $(coders_pcd_la_SOURCES) $(coders_pcl_la_SOURCES) \
+       $(coders_pcx_la_SOURCES) $(coders_pdb_la_SOURCES) \
+       $(coders_pdf_la_SOURCES) $(coders_pes_la_SOURCES) \
+       $(coders_pict_la_SOURCES) $(coders_pix_la_SOURCES) \
+       $(coders_plasma_la_SOURCES) $(coders_png_la_SOURCES) \
+       $(coders_pnm_la_SOURCES) $(coders_preview_la_SOURCES) \
+       $(coders_ps_la_SOURCES) $(coders_ps2_la_SOURCES) \
+       $(coders_ps3_la_SOURCES) $(coders_psd_la_SOURCES) \
+       $(coders_pwp_la_SOURCES) $(coders_raw_la_SOURCES) \
+       $(coders_rgb_la_SOURCES) $(coders_rla_la_SOURCES) \
+       $(coders_rle_la_SOURCES) $(coders_scr_la_SOURCES) \
+       $(coders_sct_la_SOURCES) $(coders_sfw_la_SOURCES) \
+       $(coders_sgi_la_SOURCES) $(coders_stegano_la_SOURCES) \
+       $(coders_sun_la_SOURCES) $(coders_svg_la_SOURCES) \
+       $(coders_tga_la_SOURCES) $(coders_thumbnail_la_SOURCES) \
+       $(coders_tiff_la_SOURCES) $(coders_tile_la_SOURCES) \
+       $(coders_tim_la_SOURCES) $(coders_ttf_la_SOURCES) \
+       $(coders_txt_la_SOURCES) $(coders_uil_la_SOURCES) \
+       $(coders_url_la_SOURCES) $(coders_uyvy_la_SOURCES) \
+       $(coders_vicar_la_SOURCES) $(coders_vid_la_SOURCES) \
+       $(coders_viff_la_SOURCES) $(coders_wbmp_la_SOURCES) \
+       $(coders_wmf_la_SOURCES) $(coders_wpg_la_SOURCES) \
+       $(coders_x_la_SOURCES) $(coders_xbm_la_SOURCES) \
+       $(coders_xc_la_SOURCES) $(coders_xcf_la_SOURCES) \
+       $(coders_xpm_la_SOURCES) $(coders_xps_la_SOURCES) \
+       $(coders_xwd_la_SOURCES) $(coders_ycbcr_la_SOURCES) \
+       $(coders_yuv_la_SOURCES) $(filters_analyze_la_SOURCES) \
+       $(ltdl_dld_link_la_SOURCES) $(ltdl_dlopen_la_SOURCES) \
+       $(ltdl_dyld_la_SOURCES) $(ltdl_libltdl_la_SOURCES) \
+       $(ltdl_libltdlc_la_SOURCES) $(ltdl_load_add_on_la_SOURCES) \
+       $(ltdl_loadlibrary_la_SOURCES) $(ltdl_shl_load_la_SOURCES) \
+       $(magick_libMagickCore_la_SOURCES) \
        $(wand_libMagickWand_la_SOURCES) \
        $(Magick___demo_analyze_SOURCES) \
        $(Magick___demo_button_SOURCES) $(Magick___demo_demo_SOURCES) \
@@ -2016,66 +2025,66 @@ SOURCES = $(Magick___lib_libMagick___la_SOURCES) \
        $(wand_drawtest_SOURCES) $(wand_wandtest_SOURCES)
 DIST_SOURCES = $(Magick___lib_libMagick___la_SOURCES) \
        $(coders_art_la_SOURCES) $(coders_avs_la_SOURCES) \
-       $(coders_bmp_la_SOURCES) $(coders_braille_la_SOURCES) \
-       $(coders_cals_la_SOURCES) $(coders_caption_la_SOURCES) \
-       $(coders_cin_la_SOURCES) $(coders_cip_la_SOURCES) \
-       $(coders_clip_la_SOURCES) $(coders_clipboard_la_SOURCES) \
-       $(coders_cmyk_la_SOURCES) $(coders_cut_la_SOURCES) \
-       $(coders_dcm_la_SOURCES) $(coders_dds_la_SOURCES) \
-       $(coders_debug_la_SOURCES) $(coders_dib_la_SOURCES) \
-       $(coders_djvu_la_SOURCES) $(coders_dng_la_SOURCES) \
-       $(coders_dot_la_SOURCES) $(coders_dps_la_SOURCES) \
-       $(coders_dpx_la_SOURCES) $(coders_emf_la_SOURCES) \
-       $(coders_ept_la_SOURCES) $(coders_exr_la_SOURCES) \
-       $(coders_fax_la_SOURCES) $(coders_fits_la_SOURCES) \
-       $(coders_fpx_la_SOURCES) $(coders_gif_la_SOURCES) \
-       $(coders_gradient_la_SOURCES) $(coders_gray_la_SOURCES) \
-       $(coders_hald_la_SOURCES) $(coders_histogram_la_SOURCES) \
-       $(coders_hrz_la_SOURCES) $(coders_html_la_SOURCES) \
-       $(coders_icon_la_SOURCES) $(coders_info_la_SOURCES) \
-       $(coders_inline_la_SOURCES) $(coders_ipl_la_SOURCES) \
-       $(coders_jbig_la_SOURCES) $(coders_jp2_la_SOURCES) \
-       $(coders_jpeg_la_SOURCES) $(coders_label_la_SOURCES) \
-       $(coders_magick_la_SOURCES) $(coders_map_la_SOURCES) \
-       $(coders_mat_la_SOURCES) $(coders_matte_la_SOURCES) \
-       $(coders_meta_la_SOURCES) $(coders_miff_la_SOURCES) \
-       $(coders_mono_la_SOURCES) $(coders_mpc_la_SOURCES) \
-       $(coders_mpeg_la_SOURCES) $(coders_mpr_la_SOURCES) \
-       $(coders_msl_la_SOURCES) $(coders_mtv_la_SOURCES) \
-       $(coders_mvg_la_SOURCES) $(coders_null_la_SOURCES) \
-       $(coders_otb_la_SOURCES) $(coders_palm_la_SOURCES) \
-       $(coders_pattern_la_SOURCES) $(coders_pcd_la_SOURCES) \
-       $(coders_pcl_la_SOURCES) $(coders_pcx_la_SOURCES) \
-       $(coders_pdb_la_SOURCES) $(coders_pdf_la_SOURCES) \
-       $(coders_pes_la_SOURCES) $(coders_pict_la_SOURCES) \
-       $(coders_pix_la_SOURCES) $(coders_plasma_la_SOURCES) \
-       $(coders_png_la_SOURCES) $(coders_pnm_la_SOURCES) \
-       $(coders_preview_la_SOURCES) $(coders_ps_la_SOURCES) \
-       $(coders_ps2_la_SOURCES) $(coders_ps3_la_SOURCES) \
-       $(coders_psd_la_SOURCES) $(coders_pwp_la_SOURCES) \
-       $(coders_raw_la_SOURCES) $(coders_rgb_la_SOURCES) \
-       $(coders_rla_la_SOURCES) $(coders_rle_la_SOURCES) \
-       $(coders_scr_la_SOURCES) $(coders_sct_la_SOURCES) \
-       $(coders_sfw_la_SOURCES) $(coders_sgi_la_SOURCES) \
-       $(coders_stegano_la_SOURCES) $(coders_sun_la_SOURCES) \
-       $(coders_svg_la_SOURCES) $(coders_tga_la_SOURCES) \
-       $(coders_thumbnail_la_SOURCES) $(coders_tiff_la_SOURCES) \
-       $(coders_tile_la_SOURCES) $(coders_tim_la_SOURCES) \
-       $(coders_ttf_la_SOURCES) $(coders_txt_la_SOURCES) \
-       $(coders_uil_la_SOURCES) $(coders_url_la_SOURCES) \
-       $(coders_uyvy_la_SOURCES) $(coders_vicar_la_SOURCES) \
-       $(coders_vid_la_SOURCES) $(coders_viff_la_SOURCES) \
-       $(coders_wbmp_la_SOURCES) $(coders_wmf_la_SOURCES) \
-       $(coders_wpg_la_SOURCES) $(coders_x_la_SOURCES) \
-       $(coders_xbm_la_SOURCES) $(coders_xc_la_SOURCES) \
-       $(coders_xcf_la_SOURCES) $(coders_xpm_la_SOURCES) \
-       $(coders_xps_la_SOURCES) $(coders_xwd_la_SOURCES) \
-       $(coders_ycbcr_la_SOURCES) $(coders_yuv_la_SOURCES) \
-       $(filters_analyze_la_SOURCES) $(ltdl_dld_link_la_SOURCES) \
-       $(ltdl_dlopen_la_SOURCES) $(ltdl_dyld_la_SOURCES) \
-       $(ltdl_libltdl_la_SOURCES) $(ltdl_libltdlc_la_SOURCES) \
-       $(ltdl_load_add_on_la_SOURCES) $(ltdl_loadlibrary_la_SOURCES) \
-       $(ltdl_shl_load_la_SOURCES) \
+       $(coders_bgr_la_SOURCES) $(coders_bmp_la_SOURCES) \
+       $(coders_braille_la_SOURCES) $(coders_cals_la_SOURCES) \
+       $(coders_caption_la_SOURCES) $(coders_cin_la_SOURCES) \
+       $(coders_cip_la_SOURCES) $(coders_clip_la_SOURCES) \
+       $(coders_clipboard_la_SOURCES) $(coders_cmyk_la_SOURCES) \
+       $(coders_cut_la_SOURCES) $(coders_dcm_la_SOURCES) \
+       $(coders_dds_la_SOURCES) $(coders_debug_la_SOURCES) \
+       $(coders_dib_la_SOURCES) $(coders_djvu_la_SOURCES) \
+       $(coders_dng_la_SOURCES) $(coders_dot_la_SOURCES) \
+       $(coders_dps_la_SOURCES) $(coders_dpx_la_SOURCES) \
+       $(coders_emf_la_SOURCES) $(coders_ept_la_SOURCES) \
+       $(coders_exr_la_SOURCES) $(coders_fax_la_SOURCES) \
+       $(coders_fits_la_SOURCES) $(coders_fpx_la_SOURCES) \
+       $(coders_gif_la_SOURCES) $(coders_gradient_la_SOURCES) \
+       $(coders_gray_la_SOURCES) $(coders_hald_la_SOURCES) \
+       $(coders_histogram_la_SOURCES) $(coders_hrz_la_SOURCES) \
+       $(coders_html_la_SOURCES) $(coders_icon_la_SOURCES) \
+       $(coders_info_la_SOURCES) $(coders_inline_la_SOURCES) \
+       $(coders_ipl_la_SOURCES) $(coders_jbig_la_SOURCES) \
+       $(coders_jp2_la_SOURCES) $(coders_jpeg_la_SOURCES) \
+       $(coders_label_la_SOURCES) $(coders_magick_la_SOURCES) \
+       $(coders_map_la_SOURCES) $(coders_mat_la_SOURCES) \
+       $(coders_matte_la_SOURCES) $(coders_meta_la_SOURCES) \
+       $(coders_miff_la_SOURCES) $(coders_mono_la_SOURCES) \
+       $(coders_mpc_la_SOURCES) $(coders_mpeg_la_SOURCES) \
+       $(coders_mpr_la_SOURCES) $(coders_msl_la_SOURCES) \
+       $(coders_mtv_la_SOURCES) $(coders_mvg_la_SOURCES) \
+       $(coders_null_la_SOURCES) $(coders_otb_la_SOURCES) \
+       $(coders_palm_la_SOURCES) $(coders_pattern_la_SOURCES) \
+       $(coders_pcd_la_SOURCES) $(coders_pcl_la_SOURCES) \
+       $(coders_pcx_la_SOURCES) $(coders_pdb_la_SOURCES) \
+       $(coders_pdf_la_SOURCES) $(coders_pes_la_SOURCES) \
+       $(coders_pict_la_SOURCES) $(coders_pix_la_SOURCES) \
+       $(coders_plasma_la_SOURCES) $(coders_png_la_SOURCES) \
+       $(coders_pnm_la_SOURCES) $(coders_preview_la_SOURCES) \
+       $(coders_ps_la_SOURCES) $(coders_ps2_la_SOURCES) \
+       $(coders_ps3_la_SOURCES) $(coders_psd_la_SOURCES) \
+       $(coders_pwp_la_SOURCES) $(coders_raw_la_SOURCES) \
+       $(coders_rgb_la_SOURCES) $(coders_rla_la_SOURCES) \
+       $(coders_rle_la_SOURCES) $(coders_scr_la_SOURCES) \
+       $(coders_sct_la_SOURCES) $(coders_sfw_la_SOURCES) \
+       $(coders_sgi_la_SOURCES) $(coders_stegano_la_SOURCES) \
+       $(coders_sun_la_SOURCES) $(coders_svg_la_SOURCES) \
+       $(coders_tga_la_SOURCES) $(coders_thumbnail_la_SOURCES) \
+       $(coders_tiff_la_SOURCES) $(coders_tile_la_SOURCES) \
+       $(coders_tim_la_SOURCES) $(coders_ttf_la_SOURCES) \
+       $(coders_txt_la_SOURCES) $(coders_uil_la_SOURCES) \
+       $(coders_url_la_SOURCES) $(coders_uyvy_la_SOURCES) \
+       $(coders_vicar_la_SOURCES) $(coders_vid_la_SOURCES) \
+       $(coders_viff_la_SOURCES) $(coders_wbmp_la_SOURCES) \
+       $(coders_wmf_la_SOURCES) $(coders_wpg_la_SOURCES) \
+       $(coders_x_la_SOURCES) $(coders_xbm_la_SOURCES) \
+       $(coders_xc_la_SOURCES) $(coders_xcf_la_SOURCES) \
+       $(coders_xpm_la_SOURCES) $(coders_xps_la_SOURCES) \
+       $(coders_xwd_la_SOURCES) $(coders_ycbcr_la_SOURCES) \
+       $(coders_yuv_la_SOURCES) $(filters_analyze_la_SOURCES) \
+       $(ltdl_dld_link_la_SOURCES) $(ltdl_dlopen_la_SOURCES) \
+       $(ltdl_dyld_la_SOURCES) $(ltdl_libltdl_la_SOURCES) \
+       $(ltdl_libltdlc_la_SOURCES) $(ltdl_load_add_on_la_SOURCES) \
+       $(ltdl_loadlibrary_la_SOURCES) $(ltdl_shl_load_la_SOURCES) \
        $(am__magick_libMagickCore_la_SOURCES_DIST) \
        $(wand_libMagickWand_la_SOURCES) \
        $(Magick___demo_analyze_SOURCES) \
@@ -2807,6 +2816,7 @@ codersdir = $(CODER_PATH)
 MAGICK_CODER_SRCS = \
        coders/art.c \
        coders/avs.c \
+       coders/bgr.c \
        coders/bmp.c \
        coders/braille.c \
        coders/cals.c \
@@ -2919,6 +2929,7 @@ MAGICK_CODER_SRCS = \
 @WITH_MODULES_TRUE@coders_LTLIBRARIES = \
 @WITH_MODULES_TRUE@    coders/art.la \
 @WITH_MODULES_TRUE@    coders/avs.la \
+@WITH_MODULES_TRUE@    coders/bgr.la \
 @WITH_MODULES_TRUE@    coders/bmp.la \
 @WITH_MODULES_TRUE@    coders/braille.la \
 @WITH_MODULES_TRUE@    coders/cals.la \
@@ -3040,6 +3051,12 @@ coders_avs_la_CPPFLAGS = $(MODULE_EXTRA_CPPFLAGS)
 coders_avs_la_LDFLAGS = $(MODULECOMMONFLAGS)
 coders_avs_la_LIBADD = $(MAGICKCORE_LIBS)
 
+# BRG coder module
+coders_bgr_la_SOURCES = coders/bgr.c
+coders_bgr_la_CPPFLAGS = $(MODULE_EXTRA_CPPFLAGS)
+coders_bgr_la_LDFLAGS = $(MODULECOMMONFLAGS)
+coders_bgr_la_LIBADD = $(MAGICKCORE_LIBS)
+
 # BMP coder module
 coders_bmp_la_SOURCES = coders/bmp.c
 coders_bmp_la_CPPFLAGS = $(MODULE_EXTRA_CPPFLAGS)
@@ -4945,6 +4962,10 @@ coders/coders_avs_la-avs.lo: coders/$(am__dirstamp) \
        coders/$(DEPDIR)/$(am__dirstamp)
 coders/avs.la: $(coders_avs_la_OBJECTS) $(coders_avs_la_DEPENDENCIES) coders/$(am__dirstamp)
        $(AM_V_CCLD)$(coders_avs_la_LINK) $(am_coders_avs_la_rpath) $(coders_avs_la_OBJECTS) $(coders_avs_la_LIBADD) $(LIBS)
+coders/coders_bgr_la-bgr.lo: coders/$(am__dirstamp) \
+       coders/$(DEPDIR)/$(am__dirstamp)
+coders/bgr.la: $(coders_bgr_la_OBJECTS) $(coders_bgr_la_DEPENDENCIES) coders/$(am__dirstamp)
+       $(AM_V_CCLD)$(coders_bgr_la_LINK) $(am_coders_bgr_la_rpath) $(coders_bgr_la_OBJECTS) $(coders_bgr_la_LIBADD) $(LIBS)
 coders/coders_bmp_la-bmp.lo: coders/$(am__dirstamp) \
        coders/$(DEPDIR)/$(am__dirstamp)
 coders/bmp.la: $(coders_bmp_la_OBJECTS) $(coders_bmp_la_DEPENDENCIES) coders/$(am__dirstamp)
@@ -5650,6 +5671,8 @@ coders/magick_libMagickCore_la-art.lo: coders/$(am__dirstamp) \
        coders/$(DEPDIR)/$(am__dirstamp)
 coders/magick_libMagickCore_la-avs.lo: coders/$(am__dirstamp) \
        coders/$(DEPDIR)/$(am__dirstamp)
+coders/magick_libMagickCore_la-bgr.lo: coders/$(am__dirstamp) \
+       coders/$(DEPDIR)/$(am__dirstamp)
 coders/magick_libMagickCore_la-bmp.lo: coders/$(am__dirstamp) \
        coders/$(DEPDIR)/$(am__dirstamp)
 coders/magick_libMagickCore_la-braille.lo: coders/$(am__dirstamp) \
@@ -6273,6 +6296,8 @@ mostlyclean-compile:
        -rm -f coders/coders_art_la-art.lo
        -rm -f coders/coders_avs_la-avs.$(OBJEXT)
        -rm -f coders/coders_avs_la-avs.lo
+       -rm -f coders/coders_bgr_la-bgr.$(OBJEXT)
+       -rm -f coders/coders_bgr_la-bgr.lo
        -rm -f coders/coders_bmp_la-bmp.$(OBJEXT)
        -rm -f coders/coders_bmp_la-bmp.lo
        -rm -f coders/coders_braille_la-braille.$(OBJEXT)
@@ -6497,6 +6522,8 @@ mostlyclean-compile:
        -rm -f coders/magick_libMagickCore_la-art.lo
        -rm -f coders/magick_libMagickCore_la-avs.$(OBJEXT)
        -rm -f coders/magick_libMagickCore_la-avs.lo
+       -rm -f coders/magick_libMagickCore_la-bgr.$(OBJEXT)
+       -rm -f coders/magick_libMagickCore_la-bgr.lo
        -rm -f coders/magick_libMagickCore_la-bmp.$(OBJEXT)
        -rm -f coders/magick_libMagickCore_la-bmp.lo
        -rm -f coders/magick_libMagickCore_la-braille.$(OBJEXT)
@@ -7034,6 +7061,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@Magick++/tests/$(DEPDIR)/readWriteImages.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/coders_art_la-art.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/coders_avs_la-avs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/coders_bgr_la-bgr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/coders_bmp_la-bmp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/coders_braille_la-braille.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/coders_cals_la-cals.Plo@am__quote@
@@ -7146,6 +7174,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/coders_yuv_la-yuv.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/magick_libMagickCore_la-art.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/magick_libMagickCore_la-avs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/magick_libMagickCore_la-bgr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/magick_libMagickCore_la-bmp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/magick_libMagickCore_la-braille.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@coders/$(DEPDIR)/magick_libMagickCore_la-cals.Plo@am__quote@
@@ -7444,6 +7473,14 @@ coders/coders_avs_la-avs.lo: coders/avs.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(coders_avs_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o coders/coders_avs_la-avs.lo `test -f 'coders/avs.c' || echo '$(srcdir)/'`coders/avs.c
 
+coders/coders_bgr_la-bgr.lo: coders/bgr.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(coders_bgr_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT coders/coders_bgr_la-bgr.lo -MD -MP -MF coders/$(DEPDIR)/coders_bgr_la-bgr.Tpo -c -o coders/coders_bgr_la-bgr.lo `test -f 'coders/bgr.c' || echo '$(srcdir)/'`coders/bgr.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) coders/$(DEPDIR)/coders_bgr_la-bgr.Tpo coders/$(DEPDIR)/coders_bgr_la-bgr.Plo
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='coders/bgr.c' object='coders/coders_bgr_la-bgr.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(coders_bgr_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o coders/coders_bgr_la-bgr.lo `test -f 'coders/bgr.c' || echo '$(srcdir)/'`coders/bgr.c
+
 coders/coders_bmp_la-bmp.lo: coders/bmp.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(coders_bmp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT coders/coders_bmp_la-bmp.lo -MD -MP -MF coders/$(DEPDIR)/coders_bmp_la-bmp.Tpo -c -o coders/coders_bmp_la-bmp.lo `test -f 'coders/bmp.c' || echo '$(srcdir)/'`coders/bmp.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) coders/$(DEPDIR)/coders_bmp_la-bmp.Tpo coders/$(DEPDIR)/coders_bmp_la-bmp.Plo
@@ -9164,6 +9201,14 @@ coders/magick_libMagickCore_la-avs.lo: coders/avs.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(magick_libMagickCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o coders/magick_libMagickCore_la-avs.lo `test -f 'coders/avs.c' || echo '$(srcdir)/'`coders/avs.c
 
+coders/magick_libMagickCore_la-bgr.lo: coders/bgr.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(magick_libMagickCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT coders/magick_libMagickCore_la-bgr.lo -MD -MP -MF coders/$(DEPDIR)/magick_libMagickCore_la-bgr.Tpo -c -o coders/magick_libMagickCore_la-bgr.lo `test -f 'coders/bgr.c' || echo '$(srcdir)/'`coders/bgr.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) coders/$(DEPDIR)/magick_libMagickCore_la-bgr.Tpo coders/$(DEPDIR)/magick_libMagickCore_la-bgr.Plo
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='coders/bgr.c' object='coders/magick_libMagickCore_la-bgr.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(magick_libMagickCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o coders/magick_libMagickCore_la-bgr.lo `test -f 'coders/bgr.c' || echo '$(srcdir)/'`coders/bgr.c
+
 coders/magick_libMagickCore_la-bmp.lo: coders/bmp.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(magick_libMagickCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT coders/magick_libMagickCore_la-bmp.lo -MD -MP -MF coders/$(DEPDIR)/magick_libMagickCore_la-bmp.Tpo -c -o coders/magick_libMagickCore_la-bmp.lo `test -f 'coders/bmp.c' || echo '$(srcdir)/'`coders/bmp.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) coders/$(DEPDIR)/magick_libMagickCore_la-bmp.Tpo coders/$(DEPDIR)/magick_libMagickCore_la-bmp.Plo
index 1d3ee07f671972620d35aa5e7936b1853f896196..01de8b97268da731517aa76802037e3eb5ac8565 100644 (file)
@@ -23,6 +23,7 @@ $
 $write sys$output "Making Coders..."
 $call Make art.c
 $call Make avs.c
+$call Make bgr.c
 $call Make bmp.c
 $call Make braille.c
 $call Make cals.c
@@ -133,7 +134,7 @@ $call Make magick.c
 $call Make scr.c
 $deass magick
 $deass wand
-$library/create libCoders.olb art,avs,bmp,braille,clip,clipboard,cip,cmyk, -
+$library/create libCoders.olb art,avs,bgr,bmp,braille,clip,clipboard,cip,cmyk, -
   cut,dcm,dds,debug,dib,dng,dps,dpx,emf,ept,exr,fax,fits,fpx,gif,gradient, -
   gray,hald,histogram,hrz,html,icon,info,inline,ipl,jbig,jpeg,jp2,label,cals, -
   caption,palm,map,mat,matte, -
index 3e2ebeb8fc36bc595d25004d5c2513f09aa57753..471febe7c88e0a2b5e3492c27acc866cdab62ac1 100644 (file)
@@ -80,6 +80,7 @@ endif
 MAGICK_CODER_SRCS = \
        coders/art.c \
        coders/avs.c \
+       coders/bgr.c \
        coders/bmp.c \
        coders/braille.c \
        coders/cals.c \
@@ -192,6 +193,7 @@ if WITH_MODULES
 coders_LTLIBRARIES = \
        coders/art.la \
        coders/avs.la \
+       coders/bgr.la \
        coders/bmp.la \
        coders/braille.la \
        coders/cals.la \
@@ -315,6 +317,12 @@ coders_avs_la_CPPFLAGS     = $(MODULE_EXTRA_CPPFLAGS)
 coders_avs_la_LDFLAGS      = $(MODULECOMMONFLAGS)
 coders_avs_la_LIBADD       = $(MAGICKCORE_LIBS)
 
+# BRG coder module
+coders_bgr_la_SOURCES      = coders/bgr.c
+coders_bgr_la_CPPFLAGS     = $(MODULE_EXTRA_CPPFLAGS)
+coders_bgr_la_LDFLAGS      = $(MODULECOMMONFLAGS)
+coders_bgr_la_LIBADD       = $(MAGICKCORE_LIBS)
+
 # BMP coder module
 coders_bmp_la_SOURCES      = coders/bmp.c
 coders_bmp_la_CPPFLAGS     = $(MODULE_EXTRA_CPPFLAGS)
diff --git a/coders/bgr.c b/coders/bgr.c
new file mode 100644 (file)
index 0000000..ed9b7ec
--- /dev/null
@@ -0,0 +1,1434 @@
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%                            BBBB    GGGG  RRRR                               %
+%                            B   B  G      R   R                              %
+%                            BBBB   G  GG  RRRR                               %
+%                            B   B  G   G  R R                                %
+%                            BBBB    GGG   R  R                               %
+%                                                                             %
+%                                                                             %
+%                     Read/Write Raw BGR Image Format                         %
+%                                                                             %
+%                              Software Design                                %
+%                                John Cristy                                  %
+%                                 July 1992                                   %
+%                                                                             %
+%                                                                             %
+%  Copyright 1999-2008 ImageMagick Studio LLC, a non-profit organization      %
+%  dedicated to making software imaging solutions freely available.           %
+%                                                                             %
+%  You may not use this file except in compliance with the License.  You may  %
+%  obtain a copy of the License at                                            %
+%                                                                             %
+%    http://www.imagemagick.org/script/license.php                            %
+%                                                                             %
+%  Unless required by applicable law or agreed to in writing, software        %
+%  distributed under the License is distributed on an "AS IS" BASIS,          %
+%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
+%  See the License for the specific language governing permissions and        %
+%  limitations under the License.                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+*/
+\f
+/*
+  Include declarations.
+*/
+#include "magick/studio.h"
+#include "magick/blob.h"
+#include "magick/blob-private.h"
+#include "magick/cache.h"
+#include "magick/colorspace.h"
+#include "magick/constitute.h"
+#include "magick/exception.h"
+#include "magick/exception-private.h"
+#include "magick/image.h"
+#include "magick/image-private.h"
+#include "magick/list.h"
+#include "magick/magick.h"
+#include "magick/memory_.h"
+#include "magick/monitor.h"
+#include "magick/monitor-private.h"
+#include "magick/pixel-private.h"
+#include "magick/quantum-private.h"
+#include "magick/static.h"
+#include "magick/statistic.h"
+#include "magick/string_.h"
+#include "magick/module.h"
+#include "magick/utility.h"
+\f
+/*
+  Forward declarations.
+*/
+static MagickBooleanType
+  WriteBGRImage(const ImageInfo *,Image *);
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   R e a d B G R I m a g e                                                   %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  ReadBGRImage() reads an image of raw BGR, or BGRA samples and returns
+%  it.  It allocates the memory necessary for the new Image structure and
+%  returns a pointer to the new image.
+%
+%  The format of the ReadBGRImage method is:
+%
+%      Image *ReadBGRImage(const ImageInfo *image_info,
+%        ExceptionInfo *exception)
+%
+%  A description of each parameter follows:
+%
+%    o image_info: the image info.
+%
+%    o exception: return any errors or warnings in this structure.
+%
+*/
+static Image *ReadBGRImage(const ImageInfo *image_info,
+  ExceptionInfo *exception)
+{
+  Image
+    *canvas_image,
+    *image;
+
+  MagickBooleanType
+    status;
+
+  MagickOffsetType
+    scene;
+
+  QuantumInfo
+    *quantum_info;
+
+  QuantumType
+    quantum_type;
+
+  register ssize_t
+    i;
+
+  ssize_t
+    count,
+    y;
+
+  size_t
+    length;
+
+  unsigned char
+    *pixels;
+
+  /*
+    Open image file.
+  */
+  assert(image_info != (const ImageInfo *) NULL);
+  assert(image_info->signature == MagickSignature);
+  if (image_info->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
+      image_info->filename);
+  assert(exception != (ExceptionInfo *) NULL);
+  assert(exception->signature == MagickSignature);
+  image=AcquireImage(image_info);
+  if ((image->columns == 0) || (image->rows == 0))
+    ThrowReaderException(OptionError,"MustSpecifyImageSize");
+  image->colorspace=RGBColorspace;
+  if (image_info->interlace != PartitionInterlace)
+    {
+      status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+      if (status == MagickFalse)
+        {
+          image=DestroyImageList(image);
+          return((Image *) NULL);
+        }
+      for (i=0; i < image->offset; i++)
+        if (ReadBlobByte(image) == EOF)
+          {
+            ThrowFileException(exception,CorruptImageError,
+              "UnexpectedEndOfFile",image->filename);
+            break;
+          }
+    }
+  /*
+    Create virtual canvas to support cropping (i.e. image.rgb[100x100+10+20]).
+  */
+  canvas_image=CloneImage(image,image->extract_info.width,1,MagickFalse,
+    exception);
+  (void) SetImageVirtualPixelMethod(canvas_image,BlackVirtualPixelMethod);
+  quantum_info=AcquireQuantumInfo(image_info,canvas_image);
+  if (quantum_info == (QuantumInfo *) NULL)
+    ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
+  pixels=GetQuantumPixels(quantum_info);
+  quantum_type=BGRQuantum;
+  if (LocaleCompare(image_info->magick,"BGRA") == 0)
+    {
+      quantum_type=BGRAQuantum;
+      image->matte=MagickTrue;
+    }
+  if (image_info->number_scenes != 0)
+    while (image->scene < image_info->scene)
+    {
+      /*
+        Skip to next image.
+      */
+      image->scene++;
+      length=GetQuantumExtent(canvas_image,quantum_info,quantum_type);
+      for (y=0; y < (ssize_t) image->rows; y++)
+      {
+        count=ReadBlob(image,length,pixels);
+        if (count != (ssize_t) length)
+          break;
+      }
+    }
+  count=0;
+  length=0;
+  scene=0;
+  do
+  {
+    /*
+      Read pixels to virtual canvas image then push to image.
+    */
+    if ((image_info->ping != MagickFalse) && (image_info->number_scenes != 0))
+      if (image->scene >= (image_info->scene+image_info->number_scenes-1))
+        break;
+    image->colorspace=RGBColorspace;
+    switch (image_info->interlace)
+    {
+      case NoInterlace:
+      default:
+      {
+        /*
+          No interlacing:  BGRBGRBGRBGRBGRBGR...
+        */
+        if (scene == 0)
+          {
+            length=GetQuantumExtent(canvas_image,quantum_info,quantum_type);
+            count=ReadBlob(image,length,pixels);
+          }
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,quantum_type,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=QueueAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetRedPixelComponent(q,GetRedPixelComponent(p));
+                SetGreenPixelComponent(q,GetGreenPixelComponent(p));
+                SetBluePixelComponent(q,GetBluePixelComponent(p));
+                SetOpacityPixelComponent(q,OpaqueOpacity);
+                if (image->matte != MagickFalse)
+                  SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+            }
+          if (image->previous == (Image *) NULL)
+            {
+              status=SetImageProgress(image,LoadImageTag,(MagickOffsetType) y,
+                image->rows);
+              if (status == MagickFalse)
+                break;
+            }
+          count=ReadBlob(image,length,pixels);
+        }
+        break;
+      }
+      case LineInterlace:
+      {
+        static QuantumType
+          quantum_types[4] =
+          {
+            BlueQuantum,
+            GreenQuantum,
+            RedQuantum,
+            AlphaQuantum
+          };
+
+        /*
+          Line interlacing:  BBB...GGG...RRR...RRR...GGG...BBB...
+        */
+        if (scene == 0)
+          {
+            length=GetQuantumExtent(canvas_image,quantum_info,RedQuantum);
+            count=ReadBlob(image,length,pixels);
+          }
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          for (i=0; i < (ssize_t) (image->matte != MagickFalse ? 4 : 3); i++)
+          {
+            quantum_type=quantum_types[i];
+            q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+              exception);
+            if (q == (PixelPacket *) NULL)
+              break;
+            length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+              quantum_info,quantum_type,pixels,exception);
+            if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+              break;
+            if (((y-image->extract_info.y) >= 0) && 
+                ((y-image->extract_info.y) < (ssize_t) image->rows))
+              {
+                p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,
+                  0,canvas_image->columns,1,exception);
+                q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                  image->columns,1,exception);
+                if ((p == (const PixelPacket *) NULL) ||
+                    (q == (PixelPacket *) NULL))
+                  break;
+                for (x=0; x < (ssize_t) image->columns; x++)
+                {
+                  switch (quantum_type)
+                  {
+                    case RedQuantum:
+                    {
+                      SetRedPixelComponent(q,GetRedPixelComponent(p));
+                      break;
+                    }
+                    case GreenQuantum:
+                    {
+                      SetGreenPixelComponent(q,GetGreenPixelComponent(p));
+                      break;
+                    }
+                    case BlueQuantum:
+                    {
+                      SetBluePixelComponent(q,GetBluePixelComponent(p));
+                      break;
+                    }
+                    case OpacityQuantum:
+                    {
+                      SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
+                      break;
+                    }
+                    case AlphaQuantum:
+                    {
+                      SetAlphaPixelComponent(q,GetAlphaPixelComponent(p));
+                      break;
+                    }
+                    default:
+                      break;
+                  }
+                  p++;
+                  q++;
+                }
+                if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                  break;
+              }
+            count=ReadBlob(image,length,pixels);
+          }
+          if (image->previous == (Image *) NULL)
+            {
+              status=SetImageProgress(image,LoadImageTag,(MagickOffsetType) y,
+                image->rows);
+              if (status == MagickFalse)
+                break;
+            }
+        }
+        break;
+      }
+      case PlaneInterlace:
+      {
+        /*
+          Plane interlacing:  RRRRRR...GGGGGG...BBBBBB...
+        */
+        if (scene == 0)
+          {
+            length=GetQuantumExtent(canvas_image,quantum_info,RedQuantum);
+            count=ReadBlob(image,length,pixels);
+          }
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetRedPixelComponent(q,GetRedPixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+            }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,1,6);
+            if (status == MagickFalse)
+              break;
+          }
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetGreenPixelComponent(q,GetGreenPixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+           }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,2,6);
+            if (status == MagickFalse)
+              break;
+          }
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetBluePixelComponent(q,GetBluePixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+            }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,3,6);
+            if (status == MagickFalse)
+              break;
+          }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,4,6);
+            if (status == MagickFalse)
+              break;
+          }
+        if (image->matte != MagickFalse)
+          {
+            for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            {
+              register const PixelPacket
+                *restrict p;
+
+              register PixelPacket
+                *restrict q;
+
+              register ssize_t
+                x;
+
+              if (count != (ssize_t) length)
+                {
+                  ThrowFileException(exception,CorruptImageError,
+                    "UnexpectedEndOfFile",image->filename);
+                  break;
+                }
+              q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+                exception);
+              if (q == (PixelPacket *) NULL)
+                break;
+              length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+                quantum_info,AlphaQuantum,pixels,exception);
+              if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+                break;
+              if (((y-image->extract_info.y) >= 0) && 
+                  ((y-image->extract_info.y) < (ssize_t) image->rows))
+                {
+                  p=GetVirtualPixels(canvas_image,
+                    canvas_image->extract_info.x,0,canvas_image->columns,1,
+                    exception);
+                  q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                    image->columns,1,exception);
+                  if ((p == (const PixelPacket *) NULL) ||
+                      (q == (PixelPacket *) NULL))
+                    break;
+                  for (x=0; x < (ssize_t) image->columns; x++)
+                  {
+                    SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
+                    p++;
+                    q++;
+                  }
+                  if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                    break;
+                }
+              count=ReadBlob(image,length,pixels);
+            }
+            if (image->previous == (Image *) NULL)
+              {
+                status=SetImageProgress(image,LoadImageTag,5,6);
+                if (status == MagickFalse)
+                  break;
+              }
+          }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,6,6);
+            if (status == MagickFalse)
+              break;
+          }
+        break;
+      }
+      case PartitionInterlace:
+      {
+        /*
+          Partition interlacing:  BBBBBB..., GGGGGG..., RRRRRR...
+        */
+        AppendImageFormat("B",image->filename);
+        status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+        if (status == MagickFalse)
+          {
+            canvas_image=DestroyImageList(canvas_image);
+            image=DestroyImageList(image);
+            return((Image *) NULL);
+          }
+        for (i=0; i < image->offset; i++)
+          if (ReadBlobByte(image) == EOF)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+        length=GetQuantumExtent(canvas_image,quantum_info,BlueQuantum);
+        for (i=0; i < (ssize_t) scene; i++)
+          for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            if (ReadBlob(image,length,pixels) != (ssize_t) length)
+              {
+                ThrowFileException(exception,CorruptImageError,
+                  "UnexpectedEndOfFile",image->filename);
+                break;
+              }
+        count=ReadBlob(image,length,pixels);
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetRedPixelComponent(q,GetRedPixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+            }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,1,5);
+            if (status == MagickFalse)
+              break;
+          }
+        (void) CloseBlob(image);
+        AppendImageFormat("G",image->filename);
+        status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+        if (status == MagickFalse)
+          {
+            canvas_image=DestroyImageList(canvas_image);
+            image=DestroyImageList(image);
+            return((Image *) NULL);
+          }
+        length=GetQuantumExtent(canvas_image,quantum_info,GreenQuantum);
+        for (i=0; i < (ssize_t) scene; i++)
+          for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            if (ReadBlob(image,length,pixels) != (ssize_t) length)
+              {
+                ThrowFileException(exception,CorruptImageError,
+                  "UnexpectedEndOfFile",image->filename);
+                break;
+              }
+        count=ReadBlob(image,length,pixels);
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetGreenPixelComponent(q,GetGreenPixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+           }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,2,5);
+            if (status == MagickFalse)
+              break;
+          }
+        (void) CloseBlob(image);
+        AppendImageFormat("R",image->filename);
+        status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+        if (status == MagickFalse)
+          {
+            canvas_image=DestroyImageList(canvas_image);
+            image=DestroyImageList(image);
+            return((Image *) NULL);
+          }
+        length=GetQuantumExtent(canvas_image,quantum_info,RedQuantum);
+        for (i=0; i < (ssize_t) scene; i++)
+          for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            if (ReadBlob(image,length,pixels) != (ssize_t) length)
+              {
+                ThrowFileException(exception,CorruptImageError,
+                  "UnexpectedEndOfFile",image->filename);
+                break;
+              }
+        count=ReadBlob(image,length,pixels);
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetBluePixelComponent(q,GetBluePixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+           }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,3,5);
+            if (status == MagickFalse)
+              break;
+          }
+        if (image->matte != MagickFalse)
+          {
+            (void) CloseBlob(image);
+            AppendImageFormat("A",image->filename);
+            status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+            if (status == MagickFalse)
+              {
+                canvas_image=DestroyImageList(canvas_image);
+                image=DestroyImageList(image);
+                return((Image *) NULL);
+              }
+            length=GetQuantumExtent(canvas_image,quantum_info,AlphaQuantum);
+            for (i=0; i < (ssize_t) scene; i++)
+              for (y=0; y < (ssize_t) image->extract_info.height; y++)
+                if (ReadBlob(image,length,pixels) != (ssize_t) length)
+                  {
+                    ThrowFileException(exception,CorruptImageError,
+                      "UnexpectedEndOfFile",image->filename);
+                    break;
+                  }
+            count=ReadBlob(image,length,pixels);
+            for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            {
+              register const PixelPacket
+                *restrict p;
+
+              register PixelPacket
+                *restrict q;
+
+              register ssize_t
+                x;
+
+              if (count != (ssize_t) length)
+                {
+                  ThrowFileException(exception,CorruptImageError,
+                    "UnexpectedEndOfFile",image->filename);
+                  break;
+                }
+              q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+                exception);
+              if (q == (PixelPacket *) NULL)
+                break;
+              length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+                quantum_info,BlueQuantum,pixels,exception);
+              if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+                break;
+              if (((y-image->extract_info.y) >= 0) && 
+                  ((y-image->extract_info.y) < (ssize_t) image->rows))
+                {
+                  p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,
+                    0,canvas_image->columns,1,exception);
+                  q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                    image->columns,1,exception);
+                  if ((p == (const PixelPacket *) NULL) ||
+                      (q == (PixelPacket *) NULL))
+                    break;
+                  for (x=0; x < (ssize_t) image->columns; x++)
+                  {
+                    SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
+                    p++;
+                    q++;
+                  }
+                  if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                    break;
+               }
+              count=ReadBlob(image,length,pixels);
+            }
+            if (image->previous == (Image *) NULL)
+              {
+                status=SetImageProgress(image,LoadImageTag,4,5);
+                if (status == MagickFalse)
+                  break;
+              }
+          }
+        (void) CloseBlob(image);
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,5,5);
+            if (status == MagickFalse)
+              break;
+          }
+        break;
+      }
+    }
+    SetQuantumImageType(image,quantum_type);
+    /*
+      Proceed to next image.
+    */
+    if (image_info->number_scenes != 0)
+      if (image->scene >= (image_info->scene+image_info->number_scenes-1))
+        break;
+    if (count == (ssize_t) length)
+      {
+        /*
+          Allocate next image structure.
+        */
+        AcquireNextImage(image_info,image);
+        if (GetNextImageInList(image) == (Image *) NULL)
+          {
+            image=DestroyImageList(image);
+            return((Image *) NULL);
+          }
+        image=SyncNextImageInList(image);
+        status=SetImageProgress(image,LoadImagesTag,TellBlob(image),
+          GetBlobSize(image));
+        if (status == MagickFalse)
+          break;
+      }
+    scene++;
+  } while (count == (ssize_t) length);
+  quantum_info=DestroyQuantumInfo(quantum_info);
+  InheritException(&image->exception,&canvas_image->exception);
+  canvas_image=DestroyImage(canvas_image);
+  (void) CloseBlob(image);
+  return(GetFirstImageInList(image));
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   R e g i s t e r B G R I m a g e                                           %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  RegisterBGRImage() adds attributes for the BGR image format to
+%  the list of supported formats.  The attributes include the image format
+%  tag, a method to read and/or write the format, whether the format
+%  supports the saving of more than one frame to the same file or blob,
+%  whether the format supports native in-memory I/O, and a brief
+%  description of the format.
+%
+%  The format of the RegisterBGRImage method is:
+%
+%      size_t RegisterBGRImage(void)
+%
+*/
+ModuleExport size_t RegisterBGRImage(void)
+{
+  MagickInfo
+    *entry;
+
+  entry=SetMagickInfo("BGR");
+  entry->decoder=(DecodeImageHandler *) ReadBGRImage;
+  entry->encoder=(EncodeImageHandler *) WriteBGRImage;
+  entry->raw=MagickTrue;
+  entry->endian_support=MagickTrue;
+  entry->description=ConstantString("Raw blue, green, and red samples");
+  entry->module=ConstantString("BGR");
+  (void) RegisterMagickInfo(entry);
+  entry=SetMagickInfo("BGRA");
+  entry->decoder=(DecodeImageHandler *) ReadBGRImage;
+  entry->encoder=(EncodeImageHandler *) WriteBGRImage;
+  entry->raw=MagickTrue;
+  entry->endian_support=MagickTrue;
+  entry->description=ConstantString("Raw blue, green, red, and alpha samples");
+  entry->module=ConstantString("BGR");
+  (void) RegisterMagickInfo(entry);
+  return(MagickImageCoderSignature);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   U n r e g i s t e r B G R I m a g e                                       %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  UnregisterBGRImage() removes format registrations made by the BGR module
+%  from the list of supported formats.
+%
+%  The format of the UnregisterBGRImage method is:
+%
+%      UnregisterBGRImage(void)
+%
+*/
+ModuleExport void UnregisterBGRImage(void)
+{
+  (void) UnregisterMagickInfo("BGRA");
+  (void) UnregisterMagickInfo("BGR");
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   W r i t e B G R I m a g e                                                 %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  WriteBGRImage() writes an image to a file in the BGR or BGRA
+%  rasterfile format.
+%
+%  The format of the WriteBGRImage method is:
+%
+%      MagickBooleanType WriteBGRImage(const ImageInfo *image_info,
+%        Image *image)
+%
+%  A description of each parameter follows.
+%
+%    o image_info: the image info.
+%
+%    o image:  The image.
+%
+*/
+static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,
+  Image *image)
+{
+  MagickBooleanType
+    status;
+
+  MagickOffsetType
+    scene;
+
+  QuantumInfo
+    *quantum_info;
+
+  QuantumType
+    quantum_type;
+
+  ssize_t
+    count;
+
+  size_t
+    length,
+    y;
+
+  unsigned char
+    *pixels;
+
+  /*
+    Allocate memory for pixels.
+  */
+  assert(image_info != (const ImageInfo *) NULL);
+  assert(image_info->signature == MagickSignature);
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickSignature);
+  if (image->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+  if (image_info->interlace != PartitionInterlace)
+    {
+      /*
+        Open output image file.
+      */
+      status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
+      if (status == MagickFalse)
+        return(status);
+    }
+  quantum_type=BGRQuantum;
+  if (LocaleCompare(image_info->magick,"BGRA") == 0)
+    {
+      quantum_type=BGRAQuantum;
+      image->matte=MagickTrue;
+    }
+  scene=0;
+  do
+  {
+    /*
+      Convert MIFF to BGR raster pixels.
+    */
+    if (image->colorspace != RGBColorspace)
+      (void) TransformImageColorspace(image,RGBColorspace);
+    if ((LocaleCompare(image_info->magick,"BGRA") == 0) &&
+        (image->matte == MagickFalse))
+      (void) SetImageAlphaChannel(image,ResetAlphaChannel);
+    quantum_info=AcquireQuantumInfo(image_info,image);
+    if (quantum_info == (QuantumInfo *) NULL)
+      ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
+    pixels=GetQuantumPixels(quantum_info);
+    switch (image_info->interlace)
+    {
+      case NoInterlace:
+      default:
+      {
+        /*
+          No interlacing:  BGRBGRBGRBGRBGRBGR...
+        */
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,quantum_type,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+          if (image->previous == (Image *) NULL)
+            {
+              status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
+                image->rows);
+              if (status == MagickFalse)
+                break;
+            }
+        }
+        break;
+      }
+      case LineInterlace:
+      {
+        /*
+          Line interlacing:  BBB...GGG...RRR...RRR...GGG...BBB...
+        */
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+          if (quantum_type == BGRAQuantum)
+            {
+              length=ExportQuantumPixels(image,(const CacheView *) NULL,
+                quantum_info,AlphaQuantum,pixels,&image->exception);
+              count=WriteBlob(image,length,pixels);
+              if (count != (ssize_t) length)
+                break;
+            }
+          if (image->previous == (Image *) NULL)
+            {
+              status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
+                image->rows);
+              if (status == MagickFalse)
+                break;
+            }
+        }
+        break;
+      }
+      case PlaneInterlace:
+      {
+        /*
+          Plane interlacing:  RRRRRR...GGGGGG...BBBBBB...
+        */
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,1,6);
+            if (status == MagickFalse)
+              break;
+          }
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,2,6);
+            if (status == MagickFalse)
+              break;
+          }
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,3,6);
+            if (status == MagickFalse)
+              break;
+          }
+        if (quantum_type == BGRAQuantum)
+          {
+            for (y=0; y < (ssize_t) image->rows; y++)
+            {
+              register const PixelPacket
+                *restrict p;
+
+              p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+              if (p == (const PixelPacket *) NULL)
+                break;
+              length=ExportQuantumPixels(image,(const CacheView *) NULL,
+                quantum_info,AlphaQuantum,pixels,&image->exception);
+              count=WriteBlob(image,length,pixels);
+              if (count != (ssize_t) length)
+              break;
+            }
+            if (image->previous == (Image *) NULL)
+              {
+                status=SetImageProgress(image,SaveImageTag,5,6);
+                if (status == MagickFalse)
+                  break;
+              }
+          }
+        if (image_info->interlace == PartitionInterlace)
+          (void) CopyMagickString(image->filename,image_info->filename,
+            MaxTextExtent);
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,6,6);
+            if (status == MagickFalse)
+              break;
+          }
+        break;
+      }
+      case PartitionInterlace:
+      {
+        /*
+          Partition interlacing:  BBBBBB..., GGGGGG..., RRRRRR...
+        */
+        AppendImageFormat("B",image->filename);
+        status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
+          AppendBinaryBlobMode,&image->exception);
+        if (status == MagickFalse)
+          return(status);
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,1,6);
+            if (status == MagickFalse)
+              break;
+          }
+        (void) CloseBlob(image);
+        AppendImageFormat("G",image->filename);
+        status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
+          AppendBinaryBlobMode,&image->exception);
+        if (status == MagickFalse)
+          return(status);
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,2,6);
+            if (status == MagickFalse)
+              break;
+          }
+        (void) CloseBlob(image);
+        AppendImageFormat("R",image->filename);
+        status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
+          AppendBinaryBlobMode,&image->exception);
+        if (status == MagickFalse)
+          return(status);
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,3,6);
+            if (status == MagickFalse)
+              break;
+          }
+        (void) CloseBlob(image);
+        if (quantum_type == BGRAQuantum)
+          {
+            (void) CloseBlob(image);
+            AppendImageFormat("A",image->filename);
+            status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
+              AppendBinaryBlobMode,&image->exception);
+            if (status == MagickFalse)
+              return(status);
+            for (y=0; y < (ssize_t) image->rows; y++)
+            {
+              register const PixelPacket
+                *restrict p;
+
+              p=GetVirtualPixels(image,0,y,image->columns,1,
+                &image->exception);
+              if (p == (const PixelPacket *) NULL)
+                break;
+              length=ExportQuantumPixels(image,(const CacheView *) NULL,
+                quantum_info,AlphaQuantum,pixels,&image->exception);
+              count=WriteBlob(image,length,pixels);
+              if (count != (ssize_t) length)
+                break;
+            }
+            if (image->previous == (Image *) NULL)
+              {
+                status=SetImageProgress(image,SaveImageTag,5,6);
+                if (status == MagickFalse)
+                  break;
+              }
+          }
+        (void) CloseBlob(image);
+        (void) CopyMagickString(image->filename,image_info->filename,
+          MaxTextExtent);
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,6,6);
+            if (status == MagickFalse)
+              break;
+          }
+        break;
+      }
+    }
+    quantum_info=DestroyQuantumInfo(quantum_info);
+    if (GetNextImageInList(image) == (Image *) NULL)
+      break;
+    image=SyncNextImageInList(image);
+    status=SetImageProgress(image,SaveImagesTag,scene++,
+      GetImageListLength(image));
+    if (status == MagickFalse)
+      break;
+  } while (image_info->adjoin != MagickFalse);
+  (void) CloseBlob(image);
+  return(MagickTrue);
+}
index 14bb7e1219bfb4c011a677fbe0888f33fc5cf0d4..31e223ff5dee583870b7441f1dd7c15d415f8265 100644 (file)
@@ -102,9 +102,6 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
     *canvas_image,
     *image;
 
-  ssize_t
-    y;
-
   MagickBooleanType
     status;
 
@@ -121,7 +118,8 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
     i;
 
   ssize_t
-    count;
+    count,
+    y;
 
   size_t
     length;
@@ -226,12 +224,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register IndexPacket
             *restrict indexes;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -315,12 +313,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register IndexPacket
             *restrict indexes;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -415,12 +413,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register const PixelPacket
             *restrict p;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -467,12 +465,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register const PixelPacket
             *restrict p;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -519,12 +517,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register const PixelPacket
             *restrict p;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -577,12 +575,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register IndexPacket
             *restrict indexes;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -633,12 +631,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
               register const PixelPacket
                 *restrict p;
 
-              register ssize_t
-                x;
-
               register PixelPacket
                 *restrict q;
 
+              register ssize_t
+                x;
+
               if (count != (ssize_t) length)
                 {
                   ThrowFileException(exception,CorruptImageError,
@@ -725,12 +723,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register const PixelPacket
             *restrict p;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -796,12 +794,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register const PixelPacket
             *restrict p;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -867,12 +865,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register const PixelPacket
             *restrict p;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -944,12 +942,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
           register IndexPacket
             *restrict indexes;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -1019,12 +1017,12 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
               register const PixelPacket
                 *restrict p;
 
-              register ssize_t
-                x;
-
               register PixelPacket
                 *restrict q;
 
+              register ssize_t
+                x;
+
               if (count != (ssize_t) length)
                 {
                   ThrowFileException(exception,CorruptImageError,
@@ -1212,9 +1210,6 @@ ModuleExport void UnregisterCMYKImage(void)
 static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
   Image *image)
 {
-  ssize_t
-    y;
-
   MagickBooleanType
     status;
 
@@ -1228,7 +1223,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
     quantum_type;
 
   ssize_t
-    count;
+    count,
+    y;
 
   size_t
     length;
@@ -1291,8 +1287,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            quantum_type,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,quantum_type,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1319,23 +1315,23 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            CyanQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,CyanQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            MagentaQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,MagentaQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            YellowQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,YellowQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            BlackQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlackQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1370,8 +1366,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            CyanQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,CyanQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1390,8 +1386,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            MagentaQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,MagentaQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1410,8 +1406,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            YellowQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,YellowQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1430,8 +1426,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            BlackQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlackQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1449,8 +1445,7 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
               register const PixelPacket
                 *restrict p;
 
-              p=GetVirtualPixels(image,0,y,image->columns,1,
-                &image->exception);
+              p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
               if (p == (const PixelPacket *) NULL)
                 break;
               length=ExportQuantumPixels(image,(const CacheView *) NULL,
@@ -1495,8 +1490,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            CyanQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,CyanQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1521,8 +1516,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            MagentaQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,MagentaQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1547,8 +1542,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            YellowQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,YellowQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -1573,8 +1568,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
-            BlackQuantum,pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlackQuantum,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
index 2d07314d91489ff23d579026b0c38f6dbb14d9b6..2f222de0ecece2c09841a085524b32848591da49 100644 (file)
@@ -79,13 +79,14 @@ static MagickBooleanType
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  ReadRGBImage() reads an image of raw RGB or RGBA samples and returns it. It
-%  allocates the memory necessary for the new Image structure and returns a
-%  pointer to the new image.
+%  ReadRGBImage() reads an image of raw RGB, RGBA, or RGBO samples and returns
+%  it.  It allocates the memory necessary for the new Image structure and
+%  returns a pointer to the new image.
 %
 %  The format of the ReadRGBImage method is:
 %
-%      Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
+%      Image *ReadRGBImage(const ImageInfo *image_info,
+%        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -94,7 +95,8 @@ static MagickBooleanType
 %    o exception: return any errors or warnings in this structure.
 %
 */
-static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
+static Image *ReadRGBImage(const ImageInfo *image_info,
+  ExceptionInfo *exception)
 {
   Image
     *canvas_image,
@@ -112,30 +114,19 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
   QuantumType
     quantum_type;
 
-  Quantum
-    qx[4];
-
   register ssize_t
-    i,
-    j;
+    i;
 
   ssize_t
     count,
     y;
 
   size_t
-    channels,
     length;
 
   unsigned char
     *pixels;
 
-  QuantumType
-    quantum_types[4];
-
-  char
-    sfx[] = {0, 0};
-
   /*
     Open image file.
   */
@@ -149,6 +140,7 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
   image=AcquireImage(image_info);
   if ((image->columns == 0) || (image->rows == 0))
     ThrowReaderException(OptionError,"MustSpecifyImageSize");
+  image->colorspace=RGBColorspace;
   if (image_info->interlace != PartitionInterlace)
     {
       status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
@@ -176,32 +168,16 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
     ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
   pixels=GetQuantumPixels(quantum_info);
   quantum_type=RGBQuantum;
-  for (i=0; i < 4; i++)
-  {
-    if (image_info->magick[i] == '\0')
-      break;
-    switch(image_info->magick[i])
+  if (LocaleCompare(image_info->magick,"RGBA") == 0)
     {
-      case 'R': quantum_types[i]=RedQuantum; break;
-      case 'G': quantum_types[i]=GreenQuantum; break;
-      case 'B': quantum_types[i]=BlueQuantum; break;
-      case 'A':
-      {
-        quantum_types[i]=AlphaQuantum;
-        quantum_type=RGBAQuantum;
-        break;
-      }
-      case 'O':
-      {
-        quantum_types[i]=OpacityQuantum;
-        quantum_type=RGBOQuantum;
-        break;
-      }
-      default:
-        break;
+      quantum_type=RGBAQuantum;
+      image->matte=MagickTrue;
+    }
+  if (LocaleCompare(image_info->magick,"RGBO") == 0)
+    {
+      quantum_type=RGBOQuantum;
+      image->matte=MagickTrue;
     }
-  }
-  channels=i;
   if (image_info->number_scenes != 0)
     while (image->scene < image_info->scene)
     {
@@ -228,6 +204,7 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
     if ((image_info->ping != MagickFalse) && (image_info->number_scenes != 0))
       if (image->scene >= (image_info->scene+image_info->number_scenes-1))
         break;
+    image->colorspace=RGBColorspace;
     switch (image_info->interlace)
     {
       case NoInterlace:
@@ -240,20 +217,18 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
           {
             length=GetQuantumExtent(canvas_image,quantum_info,quantum_type);
             count=ReadBlob(image,length,pixels);
-            if (count != (ssize_t) length)
-              break;
           }
         for (y=0; y < (ssize_t) image->extract_info.height; y++)
         {
           register const PixelPacket
             *restrict p;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
@@ -268,7 +243,7 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
             quantum_info,quantum_type,pixels,exception);
           if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
             break;
-          if (((y-image->extract_info.y) >= 0) &&
+          if (((y-image->extract_info.y) >= 0) && 
               ((y-image->extract_info.y) < (ssize_t) image->rows))
             {
               p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
@@ -280,20 +255,12 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 break;
               for (x=0; x < (ssize_t) image->columns; x++)
               {
-                qx[0]=GetRedPixelComponent(p);
-                qx[1]=GetGreenPixelComponent(p);
-                qx[2]=GetBluePixelComponent(p);
-                qx[3]=GetOpacityPixelComponent(p);
-                for (i=0; i < channels; i++)
-                  switch(quantum_types[i])
-                  {
-                    case RedQuantum:  q->red=qx[i];  break;
-                    case GreenQuantum: q->green=qx[i]; break;
-                    case BlueQuantum: q->blue=qx[i]; break;
-                    case AlphaQuantum: q->opacity=qx[i]; break;
-                    case OpacityQuantum: q->opacity=qx[i]; break;
-                    default: break;
-                  }
+                SetRedPixelComponent(q,GetRedPixelComponent(p));
+                SetGreenPixelComponent(q,GetGreenPixelComponent(p));
+                SetBluePixelComponent(q,GetBluePixelComponent(p));
+                SetOpacityPixelComponent(q,OpaqueOpacity);
+                if (image->matte != MagickFalse)
+                  SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
                 p++;
                 q++;
               }
@@ -313,12 +280,23 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
       }
       case LineInterlace:
       {
+        static QuantumType
+          quantum_types[4] =
+          {
+            RedQuantum,
+            GreenQuantum,
+            BlueQuantum,
+            AlphaQuantum
+          };
+
         /*
           Line interlacing:  RRR...GGG...BBB...RRR...GGG...BBB...
         */
+        if (LocaleCompare(image_info->magick,"RGBO") == 0)
+          quantum_types[3]=OpacityQuantum;
         if (scene == 0)
           {
-            length=GetQuantumExtent(canvas_image,quantum_info,quantum_types[0]);
+            length=GetQuantumExtent(canvas_image,quantum_info,RedQuantum);
             count=ReadBlob(image,length,pixels);
           }
         for (y=0; y < (ssize_t) image->extract_info.height; y++)
@@ -326,29 +304,30 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
           register const PixelPacket
             *restrict p;
 
-          register ssize_t
-            x;
-
           register PixelPacket
             *restrict q;
 
+          register ssize_t
+            x;
+
           if (count != (ssize_t) length)
             {
               ThrowFileException(exception,CorruptImageError,
                 "UnexpectedEndOfFile",image->filename);
               break;
             }
-          for (i=0; i < channels; i++)
+          for (i=0; i < (ssize_t) (image->matte != MagickFalse ? 4 : 3); i++)
           {
+            quantum_type=quantum_types[i];
             q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
               exception);
             if (q == (PixelPacket *) NULL)
               break;
             length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
-              quantum_info,quantum_types[i],pixels,exception);
+              quantum_info,quantum_type,pixels,exception);
             if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
               break;
-            if (((y-image->extract_info.y) >= 0) &&
+            if (((y-image->extract_info.y) >= 0) && 
                 ((y-image->extract_info.y) < (ssize_t) image->rows))
               {
                 p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,
@@ -358,16 +337,41 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 if ((p == (const PixelPacket *) NULL) ||
                     (q == (PixelPacket *) NULL))
                   break;
-                if (i == (channels - 1))
-                  for (x=0; x < (ssize_t) image->columns; x++)
+                for (x=0; x < (ssize_t) image->columns; x++)
+                {
+                  switch (quantum_type)
                   {
-                    SetRedPixelComponent(q,GetRedPixelComponent(p));
-                    SetGreenPixelComponent(q,GetGreenPixelComponent(p));
-                    SetBluePixelComponent(q,GetBluePixelComponent(p));
-                    SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
-                    p++;
-                    q++;
+                    case RedQuantum:
+                    {
+                      SetRedPixelComponent(q,GetRedPixelComponent(p));
+                      break;
+                    }
+                    case GreenQuantum:
+                    {
+                      SetGreenPixelComponent(q,GetGreenPixelComponent(p));
+                      break;
+                    }
+                    case BlueQuantum:
+                    {
+                      SetBluePixelComponent(q,GetBluePixelComponent(p));
+                      break;
+                    }
+                    case OpacityQuantum:
+                    {
+                      SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
+                      break;
+                    }
+                    case AlphaQuantum:
+                    {
+                      SetAlphaPixelComponent(q,GetAlphaPixelComponent(p));
+                      break;
+                    }
+                    default:
+                      break;
                   }
+                  p++;
+                  q++;
+                }
                 if (SyncAuthenticPixels(image,exception) == MagickFalse)
                   break;
               }
@@ -390,92 +394,230 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
         */
         if (scene == 0)
           {
-            length=GetQuantumExtent(canvas_image,quantum_info,quantum_types[0]);
+            length=GetQuantumExtent(canvas_image,quantum_info,RedQuantum);
             count=ReadBlob(image,length,pixels);
           }
-        for (i=0; i < channels; i++)
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
         {
-          for (y=0; y < (ssize_t) image->extract_info.height; y++)
-          {
-            register const PixelPacket
-              *restrict p;
+          register const PixelPacket
+            *restrict p;
 
-            register ssize_t
-              x;
+          register PixelPacket
+            *restrict q;
 
-            register PixelPacket
-              *restrict q;
+          register ssize_t
+            x;
 
-            if (count != (ssize_t) length)
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
               {
-                ThrowFileException(exception,CorruptImageError,
-                  "UnexpectedEndOfFile",image->filename);
+                SetRedPixelComponent(q,GetRedPixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+            }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,1,6);
+            if (status == MagickFalse)
+              break;
+          }
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
                 break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetGreenPixelComponent(q,GetGreenPixelComponent(p));
+                p++;
+                q++;
               }
-            q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
-              exception);
-            if (q == (PixelPacket *) NULL)
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+           }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,2,6);
+            if (status == MagickFalse)
               break;
-            length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
-              quantum_info,quantum_types[i],pixels,exception);
-            if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+          }
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
               break;
-            if (((y-image->extract_info.y) >= 0) &&
-                ((y-image->extract_info.y) < (ssize_t) image->rows))
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
               {
-                p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
-                  canvas_image->columns,1,exception);
-                q=GetAuthenticPixels(image,0,y-image->extract_info.y,
-                  image->columns,1,exception);
-                if ((p == (const PixelPacket *) NULL) ||
-                    (q == (PixelPacket *) NULL))
+                SetBluePixelComponent(q,GetBluePixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+            }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,3,6);
+            if (status == MagickFalse)
+              break;
+          }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,4,6);
+            if (status == MagickFalse)
+              break;
+          }
+        if (image->matte != MagickFalse)
+          {
+            for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            {
+              register const PixelPacket
+                *restrict p;
+
+              register PixelPacket
+                *restrict q;
+
+              register ssize_t
+                x;
+
+              if (count != (ssize_t) length)
+                {
+                  ThrowFileException(exception,CorruptImageError,
+                    "UnexpectedEndOfFile",image->filename);
                   break;
-                for (x=0; x < (ssize_t) image->columns; x++)
+                }
+              q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+                exception);
+              if (q == (PixelPacket *) NULL)
+                break;
+              length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+                quantum_info,AlphaQuantum,pixels,exception);
+              if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+                break;
+              if (((y-image->extract_info.y) >= 0) && 
+                  ((y-image->extract_info.y) < (ssize_t) image->rows))
                 {
-                  switch(quantum_types[i])
+                  p=GetVirtualPixels(canvas_image,
+                    canvas_image->extract_info.x,0,canvas_image->columns,1,
+                    exception);
+                  q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                    image->columns,1,exception);
+                  if ((p == (const PixelPacket *) NULL) ||
+                      (q == (PixelPacket *) NULL))
+                    break;
+                  for (x=0; x < (ssize_t) image->columns; x++)
                   {
-                    case RedQuantum:
-                    {
-                      SetRedPixelComponent(q,GetRedPixelComponent(p));
-                      break;
-                    }
-                    case GreenQuantum:
-                    {
-                      SetGreenPixelComponent(q,GetGreenPixelComponent(p));
-                      break;
-                    }
-                    case BlueQuantum:
-                    {
-                      SetBluePixelComponent(q,GetBluePixelComponent(p));
-                      break;
-                    }
-                    case OpacityQuantum:
-                    case AlphaQuantum:
-                    {
-                      SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
-                      break;
-                    }
-                    default:
-                      break;
+                    SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
+                    p++;
+                    q++;
                   }
-                  p++;
-                  q++;
+                  if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                    break;
                 }
-                if (SyncAuthenticPixels(image,exception) == MagickFalse)
+              count=ReadBlob(image,length,pixels);
+            }
+            if (image->previous == (Image *) NULL)
+              {
+                status=SetImageProgress(image,LoadImageTag,5,6);
+                if (status == MagickFalse)
                   break;
               }
-            count=ReadBlob(image,length,pixels);
           }
-          if (image->previous == (Image *) NULL)
-            {
-              status=SetImageProgress(image,LoadImageTag,(i+1),5);
-              if (status == MagickFalse)
-                break;
-            }
-        }
         if (image->previous == (Image *) NULL)
           {
-            status=SetImageProgress(image,LoadImageTag,5,5);
+            status=SetImageProgress(image,LoadImageTag,6,6);
             if (status == MagickFalse)
               break;
           }
@@ -486,115 +628,300 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
         /*
           Partition interlacing:  RRRRRR..., GGGGGG..., BBBBBB...
         */
-        for (i=0; i < channels; i++)
+        AppendImageFormat("R",image->filename);
+        status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+        if (status == MagickFalse)
+          {
+            canvas_image=DestroyImageList(canvas_image);
+            image=DestroyImageList(image);
+            return((Image *) NULL);
+          }
+        for (i=0; i < image->offset; i++)
+          if (ReadBlobByte(image) == EOF)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+        length=GetQuantumExtent(canvas_image,quantum_info,RedQuantum);
+        for (i=0; i < (ssize_t) scene; i++)
+          for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            if (ReadBlob(image,length,pixels) != (ssize_t) length)
+              {
+                ThrowFileException(exception,CorruptImageError,
+                  "UnexpectedEndOfFile",image->filename);
+                break;
+              }
+        count=ReadBlob(image,length,pixels);
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
         {
-          sfx[0]=image_info->magick[i];
-          AppendImageFormat(sfx,image->filename);
-          status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
-          if (status == MagickFalse)
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
             {
-              canvas_image=DestroyImageList(canvas_image);
-              image=DestroyImageList(image);
-              return((Image *) NULL);
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetRedPixelComponent(q,GetRedPixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
             }
-          if (i == 0)
-            for (j=0; j < image->offset; j++)
-              if (ReadBlobByte(image) == EOF)
-                {
-                  ThrowFileException(exception,CorruptImageError,
-                    "UnexpectedEndOfFile",image->filename);
-                  break;
-                }
-          length=GetQuantumExtent(canvas_image,quantum_info,quantum_types[i]);
-          for (j=0; j < (ssize_t) scene; j++)
-            for (y=0; y < (ssize_t) image->extract_info.height; y++)
-              if (ReadBlob(image,length,pixels) != (ssize_t) length)
-                {
-                  ThrowFileException(exception,CorruptImageError,
-                    "UnexpectedEndOfFile",image->filename);
-                  break;
-                }
           count=ReadBlob(image,length,pixels);
-          for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        }
+        if (image->previous == (Image *) NULL)
           {
-            register const PixelPacket
-              *restrict p;
+            status=SetImageProgress(image,LoadImageTag,1,5);
+            if (status == MagickFalse)
+              break;
+          }
+        (void) CloseBlob(image);
+        AppendImageFormat("G",image->filename);
+        status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+        if (status == MagickFalse)
+          {
+            canvas_image=DestroyImageList(canvas_image);
+            image=DestroyImageList(image);
+            return((Image *) NULL);
+          }
+        length=GetQuantumExtent(canvas_image,quantum_info,GreenQuantum);
+        for (i=0; i < (ssize_t) scene; i++)
+          for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            if (ReadBlob(image,length,pixels) != (ssize_t) length)
+              {
+                ThrowFileException(exception,CorruptImageError,
+                  "UnexpectedEndOfFile",image->filename);
+                break;
+              }
+        count=ReadBlob(image,length,pixels);
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
 
-            register ssize_t
-              x;
+          register PixelPacket
+            *restrict q;
 
-            register PixelPacket
-              *restrict q;
+          register ssize_t
+            x;
 
-            if (count != (ssize_t) length)
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
+              break;
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetGreenPixelComponent(q,GetGreenPixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+           }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,2,5);
+            if (status == MagickFalse)
+              break;
+          }
+        (void) CloseBlob(image);
+        AppendImageFormat("B",image->filename);
+        status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+        if (status == MagickFalse)
+          {
+            canvas_image=DestroyImageList(canvas_image);
+            image=DestroyImageList(image);
+            return((Image *) NULL);
+          }
+        length=GetQuantumExtent(canvas_image,quantum_info,BlueQuantum);
+        for (i=0; i < (ssize_t) scene; i++)
+          for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            if (ReadBlob(image,length,pixels) != (ssize_t) length)
               {
                 ThrowFileException(exception,CorruptImageError,
                   "UnexpectedEndOfFile",image->filename);
                 break;
               }
-            q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
-              exception);
-            if (q == (PixelPacket *) NULL)
+        count=ReadBlob(image,length,pixels);
+        for (y=0; y < (ssize_t) image->extract_info.height; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          register PixelPacket
+            *restrict q;
+
+          register ssize_t
+            x;
+
+          if (count != (ssize_t) length)
+            {
+              ThrowFileException(exception,CorruptImageError,
+                "UnexpectedEndOfFile",image->filename);
               break;
-            length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
-              quantum_info,quantum_types[i],pixels,exception);
-            if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            }
+          q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+            exception);
+          if (q == (PixelPacket *) NULL)
+            break;
+          length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,exception);
+          if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+            break;
+          if (((y-image->extract_info.y) >= 0) && 
+              ((y-image->extract_info.y) < (ssize_t) image->rows))
+            {
+              p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
+                canvas_image->columns,1,exception);
+              q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                image->columns,1,exception);
+              if ((p == (const PixelPacket *) NULL) ||
+                  (q == (PixelPacket *) NULL))
+                break;
+              for (x=0; x < (ssize_t) image->columns; x++)
+              {
+                SetBluePixelComponent(q,GetBluePixelComponent(p));
+                p++;
+                q++;
+              }
+              if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                break;
+           }
+          count=ReadBlob(image,length,pixels);
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,LoadImageTag,3,5);
+            if (status == MagickFalse)
               break;
-            if (((y-image->extract_info.y) >= 0) &&
-                ((y-image->extract_info.y) < (ssize_t) image->rows))
+          }
+        if (image->matte != MagickFalse)
+          {
+            (void) CloseBlob(image);
+            AppendImageFormat("A",image->filename);
+            status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
+            if (status == MagickFalse)
               {
-                p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,0,
-                  canvas_image->columns,1,exception);
-                q=GetAuthenticPixels(image,0,y-image->extract_info.y,
-                  image->columns,1,exception);
-                if ((p == (const PixelPacket *) NULL) ||
-                    (q == (PixelPacket *) NULL))
+                canvas_image=DestroyImageList(canvas_image);
+                image=DestroyImageList(image);
+                return((Image *) NULL);
+              }
+            length=GetQuantumExtent(canvas_image,quantum_info,AlphaQuantum);
+            for (i=0; i < (ssize_t) scene; i++)
+              for (y=0; y < (ssize_t) image->extract_info.height; y++)
+                if (ReadBlob(image,length,pixels) != (ssize_t) length)
+                  {
+                    ThrowFileException(exception,CorruptImageError,
+                      "UnexpectedEndOfFile",image->filename);
+                    break;
+                  }
+            count=ReadBlob(image,length,pixels);
+            for (y=0; y < (ssize_t) image->extract_info.height; y++)
+            {
+              register const PixelPacket
+                *restrict p;
+
+              register PixelPacket
+                *restrict q;
+
+              register ssize_t
+                x;
+
+              if (count != (ssize_t) length)
+                {
+                  ThrowFileException(exception,CorruptImageError,
+                    "UnexpectedEndOfFile",image->filename);
                   break;
-                for (x=0; x < (ssize_t) image->columns; x++)
+                }
+              q=GetAuthenticPixels(canvas_image,0,0,canvas_image->columns,1,
+                exception);
+              if (q == (PixelPacket *) NULL)
+                break;
+              length=ImportQuantumPixels(canvas_image,(CacheView *) NULL,
+                quantum_info,BlueQuantum,pixels,exception);
+              if (SyncAuthenticPixels(canvas_image,exception) == MagickFalse)
+                break;
+              if (((y-image->extract_info.y) >= 0) && 
+                  ((y-image->extract_info.y) < (ssize_t) image->rows))
                 {
-                  switch(quantum_types[i])
+                  p=GetVirtualPixels(canvas_image,canvas_image->extract_info.x,
+                    0,canvas_image->columns,1,exception);
+                  q=GetAuthenticPixels(image,0,y-image->extract_info.y,
+                    image->columns,1,exception);
+                  if ((p == (const PixelPacket *) NULL) ||
+                      (q == (PixelPacket *) NULL))
+                    break;
+                  for (x=0; x < (ssize_t) image->columns; x++)
                   {
-                    case RedQuantum:
-                    {
-                      SetRedPixelComponent(q,GetRedPixelComponent(p));
-                      break;
-                    }
-                    case GreenQuantum:
-                    {
-                      SetGreenPixelComponent(q,GetGreenPixelComponent(p));
-                      break;
-                    }
-                    case BlueQuantum:
-                    {
-                      SetBluePixelComponent(q,GetBluePixelComponent(p));
-                      break;
-                    }
-                    case OpacityQuantum:
-                    case AlphaQuantum:
-                    {
-                      SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
-                      break;
-                    }
-                    default:
-                      break;
+                    SetOpacityPixelComponent(q,GetOpacityPixelComponent(p));
+                    p++;
+                    q++;
                   }
-                  p++;
-                  q++;
-                }
-                if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                  if (SyncAuthenticPixels(image,exception) == MagickFalse)
+                    break;
+               }
+              count=ReadBlob(image,length,pixels);
+            }
+            if (image->previous == (Image *) NULL)
+              {
+                status=SetImageProgress(image,LoadImageTag,4,5);
+                if (status == MagickFalse)
                   break;
               }
-            count=ReadBlob(image,length,pixels);
           }
-          if (image->previous == (Image *) NULL)
-            {
-              status=SetImageProgress(image,LoadImageTag,(i+1),5);
-              if (status == MagickFalse)
-                break;
-            }
-          if (i != (channels-1))
-            (void) CloseBlob(image);
-        }
+        (void) CloseBlob(image);
         if (image->previous == (Image *) NULL)
           {
             status=SetImageProgress(image,LoadImageTag,5,5);
@@ -648,7 +975,7 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception)
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  RegisterRGBImage() adds attributes for the RGB or RGBA image format to
+%  RegisterRGBImage() adds attributes for the RGB image format to
 %  the list of supported formats.  The attributes include the image format
 %  tag, a method to read and/or write the format, whether the format
 %  supports the saving of more than one frame to the same file or blob,
@@ -673,54 +1000,6 @@ ModuleExport size_t RegisterRGBImage(void)
   entry->description=ConstantString("Raw red, green, and blue samples");
   entry->module=ConstantString("RGB");
   (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("RBG");
-  entry->decoder=(DecodeImageHandler *) ReadRGBImage;
-  entry->encoder=(EncodeImageHandler *) WriteRGBImage;
-  entry->raw=MagickTrue;
-  entry->endian_support=MagickTrue;
-  entry->description=ConstantString("Raw red, blue, and green samples");
-  entry->module=ConstantString("RGB");
-  (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("GRB");
-  entry->decoder=(DecodeImageHandler *) ReadRGBImage;
-  entry->encoder=(EncodeImageHandler *) WriteRGBImage;
-  entry->raw=MagickTrue;
-  entry->endian_support=MagickTrue;
-  entry->description=ConstantString("Raw green, red, and blue samples");
-  entry->module=ConstantString("RGB");
-  (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("GBR");
-  entry->decoder=(DecodeImageHandler *) ReadRGBImage;
-  entry->encoder=(EncodeImageHandler *) WriteRGBImage;
-  entry->raw=MagickTrue;
-  entry->endian_support=MagickTrue;
-  entry->description=ConstantString("Raw green, blue, and red samples");
-  entry->module=ConstantString("RGB");
-  (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("BRG");
-  entry->decoder=(DecodeImageHandler *) ReadRGBImage;
-  entry->encoder=(EncodeImageHandler *) WriteRGBImage;
-  entry->raw=MagickTrue;
-  entry->endian_support=MagickTrue;
-  entry->description=ConstantString("Raw blue, red, and green samples");
-  entry->module=ConstantString("RGB");
-  (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("BGR");
-  entry->decoder=(DecodeImageHandler *) ReadRGBImage;
-  entry->encoder=(EncodeImageHandler *) WriteRGBImage;
-  entry->raw=MagickTrue;
-  entry->endian_support=MagickTrue;
-  entry->description=ConstantString("Raw blue, green, and red samples");
-  entry->module=ConstantString("RGB");
-  (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("BGRA");
-  entry->decoder=(DecodeImageHandler *) ReadRGBImage;
-  entry->encoder=(EncodeImageHandler *) WriteRGBImage;
-  entry->raw=MagickTrue;
-  entry->endian_support=MagickTrue;
-  entry->description=ConstantString("Raw blue, green, red and alpha samples");
-  entry->module=ConstantString("RGB");
-  (void) RegisterMagickInfo(entry);
   entry=SetMagickInfo("RGBA");
   entry->decoder=(DecodeImageHandler *) ReadRGBImage;
   entry->encoder=(EncodeImageHandler *) WriteRGBImage;
@@ -729,13 +1008,13 @@ ModuleExport size_t RegisterRGBImage(void)
   entry->description=ConstantString("Raw red, green, blue, and alpha samples");
   entry->module=ConstantString("RGB");
   (void) RegisterMagickInfo(entry);
+  return(MagickImageCoderSignature);
   entry=SetMagickInfo("RGBO");
   entry->decoder=(DecodeImageHandler *) ReadRGBImage;
   entry->encoder=(EncodeImageHandler *) WriteRGBImage;
   entry->raw=MagickTrue;
   entry->endian_support=MagickTrue;
-  entry->description=ConstantString("Raw red, green, blue, and opacity "
-    "samples");
+  entry->description=ConstantString("Raw red, green, blue, and opacity samples");
   entry->module=ConstantString("RGB");
   (void) RegisterMagickInfo(entry);
   return(MagickImageCoderSignature);
@@ -752,8 +1031,8 @@ ModuleExport size_t RegisterRGBImage(void)
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  UnregisterRGBImage() removes format registrations made by the
-%  RGB module from the list of supported formats.
+%  UnregisterRGBImage() removes format registrations made by the RGB module
+%  from the list of supported formats.
 %
 %  The format of the UnregisterRGBImage method is:
 %
@@ -764,12 +1043,6 @@ ModuleExport void UnregisterRGBImage(void)
 {
   (void) UnregisterMagickInfo("RGBO");
   (void) UnregisterMagickInfo("RGBA");
-  (void) UnregisterMagickInfo("BGR");
-  (void) UnregisterMagickInfo("BGRA");
-  (void) UnregisterMagickInfo("BRG");
-  (void) UnregisterMagickInfo("GBR");
-  (void) UnregisterMagickInfo("GRB");
-  (void) UnregisterMagickInfo("RBG");
   (void) UnregisterMagickInfo("RGB");
 }
 \f
@@ -784,12 +1057,13 @@ ModuleExport void UnregisterRGBImage(void)
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  WriteRGBImage() writes an image to a file in the RGB or RGBA rasterfile
-%  format.
+%  WriteRGBImage() writes an image to a file in the RGB, RGBA, or RGBO
+%  rasterfile format.
 %
 %  The format of the WriteRGBImage method is:
 %
-%      MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
+%      MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
+%        Image *image)
 %
 %  A description of each parameter follows.
 %
@@ -798,11 +1072,9 @@ ModuleExport void UnregisterRGBImage(void)
 %    o image:  The image.
 %
 */
-static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
+static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
+  Image *image)
 {
-  ssize_t
-    y;
-
   MagickBooleanType
     status;
 
@@ -813,14 +1085,11 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
     *quantum_info;
 
   QuantumType
-    quantum_type,
-    quantum_types[4];
-
-  register ssize_t
-    i;
+    quantum_type;
 
   ssize_t
-    count;
+    count,
+    y;
 
   size_t
     length;
@@ -828,9 +1097,6 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
   unsigned char
     *pixels;
 
-  size_t
-    channels;
-
   /*
     Allocate memory for pixels.
   */
@@ -850,32 +1116,16 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
         return(status);
     }
   quantum_type=RGBQuantum;
-  for (i=0; i < 4; i++)
-  {
-    if (image_info->magick[i] == '\0')
-      break;
-    switch(image_info->magick[i])
+  if (LocaleCompare(image_info->magick,"RGBA") == 0)
     {
-      case 'R': quantum_types[i]=RedQuantum; break;
-      case 'G': quantum_types[i]=GreenQuantum; break;
-      case 'B': quantum_types[i]=BlueQuantum; break;
-      case 'A':
-      {
-        quantum_types[i]=AlphaQuantum;
-        quantum_type=RGBAQuantum;
-        break;
-      }
-      case 'O':
-      {
-        quantum_types[i]=OpacityQuantum;
-        quantum_type=RGBOQuantum;
-        break;
-      }
-      default:
-        break;
+      quantum_type=RGBAQuantum;
+      image->matte=MagickTrue;
+    }
+  if (LocaleCompare(image_info->magick,"RGBO") == 0)
+    {
+      quantum_type=RGBOQuantum;
+      image->matte=MagickTrue;
     }
-  }
-  channels=i;
   scene=0;
   do
   {
@@ -896,52 +1146,19 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
       case NoInterlace:
       default:
       {
-        CacheView
-          *image_view;
-          
-        PixelPacket
-          px;
-
-        Quantum
-          *qx[4];
-
         /*
           No interlacing:  RGBRGBRGBRGBRGBRGB...
         */
-        image_view=AcquireCacheView(image);
         for (y=0; y < (ssize_t) image->rows; y++)
         {
-          register ssize_t
-            x;
-
-          register PixelPacket
-            *restrict q;
+          register const PixelPacket
+            *restrict p;
 
-          q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
-            &image->exception);
-          if (q == (PixelPacket *) NULL)
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
             break;
-          for (x=0; x < (ssize_t) image->columns; x++)
-          {
-            px=(*q);
-            qx[0]=&(q->red);
-            qx[1]=&(q->green);
-            qx[2]=&(q->blue);
-            qx[3]=&(q->opacity);
-            for (i=0; i < channels; i++)
-              switch (quantum_types[i])
-              {
-                case RedQuantum: *qx[i]=px.red; break;
-                case GreenQuantum: *qx[i]=px.green; break;
-                case BlueQuantum: *qx[i]=px.blue; break;
-                case AlphaQuantum: *qx[i]=px.opacity; break;
-                case OpacityQuantum: *qx[i]=px.opacity; break;
-                default: break;
-              }
-            q++;
-          }
-          length=ExportQuantumPixels(image,image_view,quantum_info,quantum_type,
-            pixels,&image->exception);
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,quantum_type,pixels,&image->exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
             break;
@@ -953,7 +1170,6 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
                 break;
             }
         }
-        image_view=DestroyCacheView(image_view);
         break;
       }
       case LineInterlace:
@@ -969,14 +1185,37 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          for (i=0; i < (ssize_t) channels; i++)
-          {
-            length=ExportQuantumPixels(image,(const CacheView *) NULL,
-              quantum_info,quantum_types[i],pixels,&image->exception);
-            count=WriteBlob(image,length,pixels);
-            if (count != (ssize_t) length)
-              break;
-          }
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+          if (quantum_type == RGBAQuantum)
+            {
+              length=ExportQuantumPixels(image,(const CacheView *) NULL,
+                quantum_info,AlphaQuantum,pixels,&image->exception);
+              count=WriteBlob(image,length,pixels);
+              if (count != (ssize_t) length)
+                break;
+            }
+          if (quantum_type == RGBOQuantum)
+            {
+              length=ExportQuantumPixels(image,(const CacheView *) NULL,
+                quantum_info,OpacityQuantum,pixels,&image->exception);
+              count=WriteBlob(image,length,pixels);
+              if (count != (ssize_t) length)
+                break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -992,32 +1231,95 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
         /*
           Plane interlacing:  RRRRRR...GGGGGG...BBBBBB...
         */
-        for (i=0; i < (ssize_t) channels; i++)
+        for (y=0; y < (ssize_t) image->rows; y++)
         {
-          for (y=0; y < (ssize_t) image->rows; y++)
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
           {
-            register const PixelPacket
-              *restrict p;
+            status=SetImageProgress(image,SaveImageTag,1,6);
+            if (status == MagickFalse)
+              break;
+          }
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
 
-            p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
-            if (p == (const PixelPacket *) NULL)
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,2,6);
+            if (status == MagickFalse)
               break;
-            length=ExportQuantumPixels(image,(const CacheView *) NULL,
-              quantum_info,quantum_types[i],pixels,&image->exception);
-            count=WriteBlob(image,length,pixels);
-            if (count != (ssize_t) length)
+          }
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,3,6);
+            if (status == MagickFalse)
               break;
           }
-          if (image->previous == (Image *) NULL)
+        if (quantum_type == RGBAQuantum)
+          {
+            for (y=0; y < (ssize_t) image->rows; y++)
             {
-              status=SetImageProgress(image,SaveImageTag,(i+1),5);
-              if (status == MagickFalse)
+              register const PixelPacket
+                *restrict p;
+
+              p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+              if (p == (const PixelPacket *) NULL)
                 break;
+              length=ExportQuantumPixels(image,(const CacheView *) NULL,
+                quantum_info,AlphaQuantum,pixels,&image->exception);
+              count=WriteBlob(image,length,pixels);
+              if (count != (ssize_t) length)
+              break;
             }
-        }
+            if (image->previous == (Image *) NULL)
+              {
+                status=SetImageProgress(image,SaveImageTag,5,6);
+                if (status == MagickFalse)
+                  break;
+              }
+          }
+        if (image_info->interlace == PartitionInterlace)
+          (void) CopyMagickString(image->filename,image_info->filename,
+            MaxTextExtent);
         if (image->previous == (Image *) NULL)
           {
-            status=SetImageProgress(image,SaveImageTag,5,5);
+            status=SetImageProgress(image,SaveImageTag,6,6);
             if (status == MagickFalse)
               break;
           }
@@ -1025,47 +1327,123 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,Image *image)
       }
       case PartitionInterlace:
       {
-        char
-          sfx[] = {0, 0};
-
         /*
           Partition interlacing:  RRRRRR..., GGGGGG..., BBBBBB...
         */
-        for (i=0; i < (ssize_t) channels; i++)
+        AppendImageFormat("R",image->filename);
+        status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
+          AppendBinaryBlobMode,&image->exception);
+        if (status == MagickFalse)
+          return(status);
+        for (y=0; y < (ssize_t) image->rows; y++)
         {
-          sfx[0]=image_info->magick[i];
-          AppendImageFormat(sfx,image->filename);
-          status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
-            AppendBinaryBlobMode,&image->exception);
-          if (status == MagickFalse)
-            return(status);
-          for (y=0; y < (ssize_t) image->rows; y++)
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,RedQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
           {
-            register const PixelPacket
-              *restrict p;
+            status=SetImageProgress(image,SaveImageTag,1,6);
+            if (status == MagickFalse)
+              break;
+          }
+        (void) CloseBlob(image);
+        AppendImageFormat("G",image->filename);
+        status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
+          AppendBinaryBlobMode,&image->exception);
+        if (status == MagickFalse)
+          return(status);
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
 
-            p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
-            if (p == (const PixelPacket *) NULL)
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,GreenQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,2,6);
+            if (status == MagickFalse)
               break;
-            length=ExportQuantumPixels(image,(const CacheView *) NULL,
-              quantum_info,quantum_types[i],pixels,&image->exception);
-            count=WriteBlob(image,length,pixels);
-            if (count != (ssize_t) length)
+          }
+        (void) CloseBlob(image);
+        AppendImageFormat("B",image->filename);
+        status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
+          AppendBinaryBlobMode,&image->exception);
+        if (status == MagickFalse)
+          return(status);
+        for (y=0; y < (ssize_t) image->rows; y++)
+        {
+          register const PixelPacket
+            *restrict p;
+
+          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          if (p == (const PixelPacket *) NULL)
+            break;
+          length=ExportQuantumPixels(image,(const CacheView *) NULL,
+            quantum_info,BlueQuantum,pixels,&image->exception);
+          count=WriteBlob(image,length,pixels);
+          if (count != (ssize_t) length)
+            break;
+        }
+        if (image->previous == (Image *) NULL)
+          {
+            status=SetImageProgress(image,SaveImageTag,3,6);
+            if (status == MagickFalse)
               break;
           }
-          if (image->previous == (Image *) NULL)
+        (void) CloseBlob(image);
+        if (quantum_type == RGBAQuantum)
+          {
+            (void) CloseBlob(image);
+            AppendImageFormat("A",image->filename);
+            status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode :
+              AppendBinaryBlobMode,&image->exception);
+            if (status == MagickFalse)
+              return(status);
+            for (y=0; y < (ssize_t) image->rows; y++)
             {
-              status=SetImageProgress(image,SaveImageTag,(i+1),5);
-              if (status == MagickFalse)
+              register const PixelPacket
+                *restrict p;
+
+              p=GetVirtualPixels(image,0,y,image->columns,1,
+                &image->exception);
+              if (p == (const PixelPacket *) NULL)
+                break;
+              length=ExportQuantumPixels(image,(const CacheView *) NULL,
+                quantum_info,AlphaQuantum,pixels,&image->exception);
+              count=WriteBlob(image,length,pixels);
+              if (count != (ssize_t) length)
                 break;
             }
-          (void) CloseBlob(image);
-        }
+            if (image->previous == (Image *) NULL)
+              {
+                status=SetImageProgress(image,SaveImageTag,5,6);
+                if (status == MagickFalse)
+                  break;
+              }
+          }
+        (void) CloseBlob(image);
         (void) CopyMagickString(image->filename,image_info->filename,
           MaxTextExtent);
         if (image->previous == (Image *) NULL)
           {
-            status=SetImageProgress(image,SaveImageTag,5,5);
+            status=SetImageProgress(image,SaveImageTag,6,6);
             if (status == MagickFalse)
               break;
           }
index 337d49f467252489840f067b9a16bba96d25808a..c8efd8ebb1e858befb9cd54ec946638c2235f0d8 100644 (file)
@@ -9,7 +9,7 @@
   <configure name="NAME" value="ImageMagick"/>
   <configure name="LIB_VERSION" value="0x663"/>
   <configure name="LIB_VERSION_NUMBER" value="6,6,3,9"/>
-  <configure name="RELEASE_DATE" value="2010-08-20"/>
+  <configure name="RELEASE_DATE" value="2010-08-22"/>
   <configure name="CONFIGURE" value="./configure "/>
   <configure name="PREFIX" value="/usr/local"/>
   <configure name="EXEC-PREFIX" value="/usr/local"/>
index 50b0f124514d562d04cd84d947ade13db18bb24f..9a7d213df467bee74e193dd37c5c0debbe238975 100644 (file)
@@ -95,9 +95,7 @@ static const CoderMapInfo
     { "BMP3", "BMP" },
     { "B", "RAW" },
     { "BRF", "BRAILLE" },
-    { "BGR", "RGB" },
-    { "BGRA", "RGB" },
-    { "BRG", "RGB" },
+    { "BGRA", "BGR" },
     { "CMYKA", "CMYK" },
     { "C", "RAW" },
     { "CAL", "CALS" },
@@ -125,8 +123,6 @@ static const CoderMapInfo
     { "G3", "FAX" },
     { "GIF87", "GIF" },
     { "G", "RAW" },
-    { "GBR", "RGB" },
-    { "GRB", "RGB" },
     { "GRANITE", "MAGICK" },
     { "GROUP4", "TIFF" },
     { "K25", "DNG" },
@@ -191,7 +187,6 @@ static const CoderMapInfo
     { "RADIAL-GRADIENT", "GRADIENT" },
     { "RAF", "DNG" },
     { "RAS", "SUN" },
-    { "RBG", "RGB" },
     { "RGBA", "RGB" },
     { "RGBO", "RGB" },
     { "R", "RAW" },
index ebed0ff084506734f1496e9aed2a4d4398c5535a..071ae186d79b7ca8adc4969ac064adc6d95b0970 100644 (file)
@@ -29,6 +29,7 @@ extern "C" {
 #define WIN32_LEAN_AND_MEAN
 #define VC_EXTRALEAN
 #define _CRT_SECURE_NO_DEPRECATE  1
+#define _WIN32_WINNT 0x0501
 #include <windows.h>
 #include <wchar.h>
 #include <winuser.h>
index 3088390161c8787c7704f4c2fdcde025ce3b5c3a..50097e05ef103b9311732a4d68c47bdfe50f0d22 100644 (file)
@@ -42,7 +42,8 @@ extern "C" {
 #define SetGreenPixelComponent(q,value) ((q)->green=(value))
 #define SetBluePixelComponent(q,value) ((q)->blue=(value))
 #define SetOpacityPixelComponent(q,value) ((q)->opacity=(value))
-#define SetAlphaPixelComponent(q,value) ((q)->opacity=(QuantumRange-(value)))
+#define SetAlphaPixelComponent(q,value) \
+  ((q)->opacity=(Quantum) (QuantumRange-(value)))
 #define SetIndexPixelComponent(q,value) ((q)->index=(value))
 
 #define GetGrayPixelComponent(p) ((p)->red)
index e2b8c6aeff543556a334191aa98ccd1957f7eae2..e78e4861d652366b4a0d6b0c9108e508da5977f3 100644 (file)
@@ -75,7 +75,8 @@ typedef enum
   CbYCrYQuantum,
   CbYCrQuantum,
   CbYCrAQuantum,
-  CMYKOQuantum
+  CMYKOQuantum,
+  BGRQuantum
 } QuantumType;
 
 typedef struct _QuantumInfo
index fc1a5446e918a9ddbc9f2c94ca378a2c3156d704..bd4aad0798dcb37119c706af2df326fe58e9f7dd 100644 (file)
@@ -33,7 +33,7 @@ extern "C" {
 #define MagickLibAddendum  "-9"
 #define MagickLibInterface  4
 #define MagickLibMinInterface  4
-#define MagickReleaseDate  "2010-08-20"
+#define MagickReleaseDate  "2010-08-22"
 #define MagickChangeDate   "20100815"
 #define MagickAuthoritativeURL  "http://www.imagemagick.org"
 #define MagickFeatures  "OpenMP "