~edwin-grubbs/python-imaging/trunk

« back to all changes in this revision

Viewing changes to libImaging/Convert.c

  • Committer: effbot
  • Date: 2006-03-01 19:11:48 UTC
  • Revision ID: svn-v4:be285980-f00d-0410-a9fe-d4747b46ecd0:pil:18
Load Imaging-1.1.3 into pil.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* 
2
2
 * The Python Imaging Library
3
 
 * $Id$
 
3
 * $Id: //modules/pil/libImaging/Convert.c#3 $
4
4
 * 
5
5
 * convert images
6
6
 *
639
639
}
640
640
 
641
641
static Imaging
642
 
topalette(Imaging imOut, Imaging imIn, ImagingPalette palette, int dither)
 
642
topalette(Imaging imOut, Imaging imIn, ImagingPalette inpalette, int dither)
643
643
{
644
644
    int x, y;
 
645
    ImagingPalette palette = inpalette;;
645
646
 
646
647
    /* Map L or RGB/RGBX/RGBA to palette image */
647
648
    if (strcmp(imIn->mode, "L") != 0 && strncmp(imIn->mode, "RGB", 3) != 0)
648
649
        return (Imaging) ImagingError_ValueError("conversion not supported");
649
650
 
650
 
    /* FIXME: make user configurable */
651
 
    if (imIn->bands == 1)
 
651
    if (palette == NULL) {
 
652
      /* FIXME: make user configurable */
 
653
      if (imIn->bands == 1)
652
654
        palette = ImagingPaletteNew("RGB"); /* Initialised to grey ramp */
653
 
    else
 
655
      else
654
656
        palette = ImagingPaletteNewBrowser(); /* Standard colour cube */
 
657
    }
655
658
 
656
659
    if (!palette)
657
660
        return (Imaging) ImagingError_ValueError("no palette");
658
661
 
659
662
    imOut = ImagingNew2("P", imOut, imIn);
660
663
    if (!imOut) {
 
664
      if (palette != inpalette)
661
665
        ImagingPaletteDelete(palette);
662
 
        return NULL;
 
666
      return NULL;
663
667
    }
664
668
 
665
669
    imOut->palette = ImagingPaletteDuplicate(palette);
677
681
        /* Create mapping cache */
678
682
        if (ImagingPaletteCachePrepare(palette) < 0) {
679
683
            ImagingDelete(imOut);
680
 
            ImagingPaletteDelete(palette);
 
684
            if (palette != inpalette)
 
685
              ImagingPaletteDelete(palette);
681
686
            return NULL;
682
687
        }
683
688
 
764
769
                }
765
770
            }
766
771
        }
767
 
        ImagingPaletteCacheDelete(palette);
 
772
        if (inpalette != palette)
 
773
          ImagingPaletteCacheDelete(palette);
768
774
    }
769
775
 
770
 
    ImagingPaletteDelete(palette);
 
776
    if (inpalette != palette)
 
777
      ImagingPaletteDelete(palette);
771
778
 
772
779
    return imOut;
773
780
}
880
887
        return frompalette(imOut, imIn, mode);
881
888
 
882
889
    if (strcmp(mode, "P") == 0)
883
 
        return topalette(imOut, imIn, NULL, dither);
 
890
        return topalette(imOut, imIn, palette, dither);
884
891
 
885
892
    if (dither && strcmp(mode, "1") == 0)
886
893
        return tobilevel(imOut, imIn, dither);