~ubuntu-branches/debian/squeeze/ghostscript/squeeze

« back to all changes in this revision

Viewing changes to src/gxcmap.c

  • Committer: Bazaar Package Importer
  • Author(s): Masayuki Hatta (mhatta)
  • Date: 2009-01-04 12:09:59 UTC
  • mfrom: (16.1.1 sid)
  • Revision ID: james.westby@ubuntu.com-20090104120959-m9lbagj775ucg0h3
Tags: 8.63.dfsg.1-2
libgs-dev: put versioned dependency on libgs8 - closes: #510691

Show diffs side-by-side

added added

removed removed

Lines of Context:
11
11
   San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.
12
12
*/
13
13
 
14
 
/* $Id: gxcmap.c 8422 2007-12-03 21:31:16Z henrys $ */
 
14
/* $Id: gxcmap.c 8764 2008-05-21 18:27:42Z mvrhel $ */
15
15
/* Color mapping for Ghostscript */
16
16
#include "gx.h"
17
17
#include "gserrors.h"
28
28
#include "gxdither.h"
29
29
#include "gxcdevn.h"
30
30
#include "string_.h"
 
31
#include "gsnamecl.h"  /* Custom color call back define */
31
32
 
32
33
/* Structure descriptor */
33
34
public_st_device_color();
621
622
#if ENABLE_CUSTOM_COLOR_CALLBACK
622
623
    {
623
624
        client_custom_color_params_t * pcb =
624
 
            (client_custom_color_params_t *) (pis->custom_color_callback);
 
625
            (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
625
626
 
626
627
        if (pcb != NULL) {
627
628
            int code = pcb->client_procs->remap_DeviceGray(pcb, pconc,
656
657
#if ENABLE_CUSTOM_COLOR_CALLBACK
657
658
    {
658
659
        client_custom_color_params_t * pcb =
659
 
            (client_custom_color_params_t *) (pis->custom_color_callback);
 
660
            (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
660
661
 
661
662
        if (pcb != NULL) {
662
663
            int code = pcb->client_procs->remap_DeviceGray(pcb, &fgray,
695
696
#if ENABLE_CUSTOM_COLOR_CALLBACK
696
697
    {
697
698
        client_custom_color_params_t * pcb =
698
 
            (client_custom_color_params_t *) (pis->custom_color_callback);
 
699
            (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
699
700
 
700
701
        if (pcb != NULL) {
701
702
            int code = pcb->client_procs->remap_DeviceRGB(pcb, pconc,
732
733
#if ENABLE_CUSTOM_COLOR_CALLBACK
733
734
    {
734
735
        client_custom_color_params_t * pcb =
735
 
            (client_custom_color_params_t *) (pis->custom_color_callback);
 
736
            (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
736
737
 
737
738
        if (pcb != NULL) {
738
739
            frac conc[3];
777
778
#if ENABLE_CUSTOM_COLOR_CALLBACK
778
779
    {
779
780
        client_custom_color_params_t * pcb =
780
 
            (client_custom_color_params_t *) (pis->custom_color_callback);
 
781
            (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
781
782
 
782
783
        if (pcb != NULL) {
783
784
            int code = pcb->client_procs->remap_DeviceCMYK(pcb, pconc,
808
809
#if ENABLE_CUSTOM_COLOR_CALLBACK
809
810
    {
810
811
        client_custom_color_params_t * pcb =
811
 
            (client_custom_color_params_t *) (pis->custom_color_callback);
 
812
            (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
812
813
 
813
814
        if (pcb != NULL) {
814
815
            frac conc[4];
851
852
        for (i = 0; i < ncomps; i++)
852
853
            cm_comps[i] = gx_map_color_frac(pis,
853
854
                                cm_comps[i], effective_transfer[i]);
854
 
    else
855
 
        for (i = 0; i < ncomps; i++)
856
 
            cm_comps[i] = frac_1 - gx_map_color_frac(pis,
 
855
    else {
 
856
        if (dev->color_info.opmode == GX_CINFO_OPMODE_UNKNOWN)
 
857
            check_cmyk_color_model_comps(dev);  
 
858
        if (dev->color_info.opmode == GX_CINFO_OPMODE) {  /* CMYK-like color space */
 
859
            int k = dev->color_info.black_component;
 
860
 
 
861
            for (i = 0; i < ncomps; i++) {
 
862
                if (i == k)
 
863
                    cm_comps[i] = frac_1 - gx_map_color_frac(pis,
857
864
                        (frac)(frac_1 - cm_comps[i]), effective_transfer[i]);
858
 
 
 
865
                 else
 
866
                    cm_comps[i] = cm_comps[i]; /* Ignore transfer, see PLRM3 p. 494 */
 
867
            }
 
868
        } else {
 
869
            for (i = 0; i < ncomps; i++)
 
870
                cm_comps[i] = frac_1 - gx_map_color_frac(pis,
 
871
                            (frac)(frac_1 - cm_comps[i]), effective_transfer[i]);
 
872
        }
 
873
    }
859
874
    if (gx_render_device_DeviceN(cm_comps, pdc, dev, pis->dev_ht,
860
875
                                        &pis->screen_phase[select]) == 1)
861
876
        gx_color_load_select(pdc, pis, dev, select);
878
893
        for (i = 0; i < ncomps; i++)
879
894
            cv[i] = frac2cv(gx_map_color_frac(pis,
880
895
                                cm_comps[i], effective_transfer[i]));
881
 
    else
882
 
        for (i = 0; i < ncomps; i++)
883
 
            cv[i] = frac2cv(frac_1 - gx_map_color_frac(pis,
 
896
    else {
 
897
        if (dev->color_info.opmode == GX_CINFO_OPMODE_UNKNOWN)
 
898
            check_cmyk_color_model_comps(dev);  
 
899
        if (dev->color_info.opmode == GX_CINFO_OPMODE) {  /* CMYK-like color space */
 
900
            int k = dev->color_info.black_component;
 
901
 
 
902
            for (i = 0; i < ncomps; i++) {
 
903
                if (i == k)
 
904
                    cv[i] = frac2cv(frac_1 - gx_map_color_frac(pis,
884
905
                        (frac)(frac_1 - cm_comps[i]), effective_transfer[i]));
885
 
 
 
906
                else
 
907
                    cv[i] = frac2cv(cm_comps[i]); /* Ignore transfer, see PLRM3 p. 494 */
 
908
            }
 
909
        } else {
 
910
            for (i = 0; i < ncomps; i++)
 
911
                cv[i] = frac2cv(frac_1 - gx_map_color_frac(pis,
 
912
                            (frac)(frac_1 - cm_comps[i]), effective_transfer[i]));
 
913
        }
 
914
    }
886
915
    /* encode as a color index */
887
916
    color = dev_proc(dev, encode_color)(dev, cv);
888
917