FR2803156A1 - Computer controlled color facsimile machine having central processor having secondary processor with digital color processing central microprocessor variable color spacing table dedicated memory associated. - Google Patents
Computer controlled color facsimile machine having central processor having secondary processor with digital color processing central microprocessor variable color spacing table dedicated memory associated. Download PDFInfo
- Publication number
- FR2803156A1 FR2803156A1 FR9916250A FR9916250A FR2803156A1 FR 2803156 A1 FR2803156 A1 FR 2803156A1 FR 9916250 A FR9916250 A FR 9916250A FR 9916250 A FR9916250 A FR 9916250A FR 2803156 A1 FR2803156 A1 FR 2803156A1
- Authority
- FR
- France
- Prior art keywords
- color
- space
- microprocessor
- lab
- lpcci
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/40—Picture signal circuits
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/46—Colour picture communication systems
- H04N1/56—Processing of colour picture signals
- H04N1/60—Colour correction or control
- H04N1/6016—Conversion to subtractive colour signals
- H04N1/6019—Conversion to subtractive colour signals using look-up tables
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Facsimile Image Signal Circuits (AREA)
- Color Image Communication Systems (AREA)
Abstract
Description
<Desc/Clms Page number 1> <Desc / Clms Page number 1>
Pour télécopier une image en couleur, il faut d'abord l'analyser, ou la scanner, et, avant de la transmettre en ligne, il faut la coder, la traiter. To fax a color image, it must first be analyzed, or scanned, and before it is transmitted online, it must be coded and processed.
Inversement, pour recevoir une télécopie en couleur, il faut d'abord procéder à un traitement des données de l' image reçues, avant d'imprimer l'image. Un télécopieur classique comporte aussi bien un scanner qu'une imprimante. Par contre, pour le traitement d'image, il faut aujourd'hui faire usage d'un ordinateur, par exemple un terminal PC, d'ailleurs équipé d'un modem, qu'on associe donc à un télécopieur pour proposer de la télécopie couleur. Conversely, to receive a color fax, it is first necessary to process the image data received before printing the image. A conventional fax machine includes both a scanner and a printer. On the other hand, for image processing, it is now necessary to make use of a computer, for example a PC terminal, which is also equipped with a modem, which is therefore associated with a fax machine for proposing faxing. color.
La présente invention vise à s'affranchir d'un ordinateur dans le traitement des télécopies couleur et propose, à cet effet, un télécopieur couleur comprenant des moyens de traitement comportant un microprocesseur central avec au moins une mémoire de programmes de traitement et une mémoire de travail, télécopieur caractérisé par le fait qu' il comprend en outre un microprocesseur secondaire de traitement de données couleur associé au microprocesseur central et à une mémoire de travail dédiée agencée pour recevoir des tables de changement d'espace couleurs, le microprocesseur secondaire couleur étant agencé pour être commandé par des programmes stockés dans la mémoire de programmes du microprocesseur central. The present invention aims to overcome a computer in the processing of color faxes and proposes, for this purpose, a color fax comprising processing means comprising a central microprocessor with at least one processing program memory and a memory of work, fax characterized by the fact that it further comprises a secondary microprocessor color data processing associated with the central microprocessor and a dedicated working memory arranged to receive color space change tables, the secondary color microprocessor being arranged to be controlled by programs stored in the central microprocessor program memory.
Dans un équipement de traitement de données couleur, de nombreux changements d'espace de représentation des couleurs sont souvent nécessaires pour adapter au mieux l'espace au traitement. In color data processing equipment, many changes in color representation space are often required to best accommodate the space for processing.
Ainsi, et à titre d'exemple, un document peut être scanné en RVB (rouge, vert, bleu), affiché sous PC en SRVB (s pour standard), comprimé en mode CIELab (espace luminance, axe a, axe b, du Comité International de l'Eclairage) transmis en mode YCrCb (mode Lab version TB) et imprimé en mode CMJN (Cyan, Magenta, Jaune, Noir). Thus, and by way of example, a document can be scanned in RGB (red, green, blue), displayed under PC in SRVB (s for standard), compressed in CIELab mode (luminance space, axis a, axis b, of International Lighting Committee) transmitted in YCrCb mode (Lab mode TB version) and printed in CMYK mode (Cyan, Magenta, Yellow, Black).
Les espaces de représentation associés à un scanner et à une imprimante sont des espaces dits dépendants, car ils dépendent des caractéristiques structurelles de ces éléments. Les autres espaces sont des espaces indépendants qui ne dépendent d'aucun élément matériel. Dans un The representation spaces associated with a scanner and a printer are so-called dependent spaces because they depend on the structural characteristics of these elements. The other spaces are independent spaces that do not depend on any material element. In one
<Desc/Clms Page number 2><Desc / Clms Page number 2>
équipement de traitement de données couleurs, on utilise donc des tables de passage d'espaces dépendants vers des espaces indépendants et inversement. color data processing equipment, so we use tables for passage of dependent spaces to independent spaces and vice versa.
Stocker toutes les tables de changement d'espace de représentation des couleurs dans la mémoire de programmes du microprocesseur central nécessiterait une mémoire de taille prohibitive. Storing all the color representation space change tables in the central microprocessor program memory would require prohibitively large memory.
Aussi, dans la forme de réalisation préférée du télécopieur couleur de l'invention, le microprocesseur central est agencé pour, à l'initialisation du télécopieur, calculer toutes les tables de changement d'espace couleur et stocker, dans la mémoire de programmes de traitement du microprocesseur central, la table de passage de l'espace dépendant de représentation des couleurs du scanner vers un espace indépendant de représentation et la table de passage d'un autre espace indépendant de représentation vers l' espace dépendant de représentation des couleurs de l' imprimante et, dans la mémoire de travail dédiée du microprocesseur secondaire couleur, toutes les autres tables de changement d'espace couleur. Also, in the preferred embodiment of the color fax machine of the invention, the central microprocessor is arranged to, at the initialization of the facsimile machine, calculate all the tables of change of color space and store, in the memory of programs of treatment from the central microprocessor, the table of passage of the space depending on the representation of the colors of the scanner towards an independent space of representation and the table of passage of another independent space of representation towards the space dependent on representation of the colors of the printer and, in the dedicated working memory of the secondary color microprocessor, all the other color space change tables.
L'invention sera mieux comprise à l'aide de la description suivante d'une forme de réalisation préférée d'un télécopieur couleur selon l'invention, en référence à la figure unique annexée, qui en est un schéma par blocs et en référence au programme CEC.cpp de changement d'espace couleur en annexe. The invention will be better understood with the aid of the following description of a preferred embodiment of a color fax machine according to the invention, with reference to the single appended figure, which is a block diagram and with reference to FIG. CEC.cpp program for changing color space in the appendix.
Le télécopieur représenté comporte un microprocesseur central 1 relié à une mémoire morte ROM 2 de programmes de traitement, à une mémoire vive RAM de travail, à un scanner 4 et à une imprimante 5. Les circuits classiques de relations homme-machine et de transmission des télécopies n'ont pas été représentés. The illustrated fax machine comprises a central microprocessor 1 connected to a read only ROM 2 of processing programs, to a RAM working RAM, to a scanner 4 and to a printer 5. The conventional circuits of man-machine and transmission relations of faxes were not represented.
Au microprocesseur 1 est en outre relié un microprocesseur secondaire 6 associé, de traitement d'images et, notamment, de données couleur, luimême relié à une mémoire vive de travail RAM 7 dédiée, prévue pour recevoir des tables 72 de changement d'espace couleurs. Le Microprocessor 1 is further connected to a secondary microprocessor 6 associated, image processing and, in particular, color data, itself connected to a dedicated RAM RAM RAM 7, provided to receive tables 72 of color space change . The
<Desc/Clms Page number 3><Desc / Clms Page number 3>
microprocesseur 1 est concerné par toutes les fonctions autres que le traitement d'images. Le microprocesseur secondaire couleur 6 est commandé par des programmes, ou codes de commandes, stockés dans une zone 26 de la mémoire de programmes 2 du microprocesseur central 1. La représentation du dessin n'est que schématique et, en pratique, un bus relie les divers circuits représentés et offre ainsi une possibilité de liaison directe entre ceux-ci. microprocessor 1 is concerned with all functions other than image processing. The secondary color microprocessor 6 is controlled by programs, or control codes, stored in an area 26 of the program memory 2 of the central microprocessor 1. The representation of the drawing is only schematic and, in practice, a bus connects the various circuits represented and thus offers a possibility of direct connection between them.
Comme évoqué au début, le télécopieur doit pouvoir effectuer un grand nombre de changements d'espace de représentation des couleurs, chacun adapté à une opération déterminée : analyse par le scanner 4, dans l'espace dépendant qui lui est propre, compression, transmission, impression par l' imprimante 5 dans un autre espace dépendant adapté à celle-ci. As mentioned at the beginning, the facsimile machine must be able to make a large number of changes in color representation space, each adapted to a specific operation: analysis by the scanner 4, in the dependent space which is specific to it, compression, transmission, printing by the printer 5 in another dependent space adapted thereto.
Les espaces dépendants liés à un dispositif, scanner 4 (RVB) et imprimante 5 (CMJN), sont spécifiés, dans une zone 21 de la mémoire morte ROM 2, par une matrice ou table de transformation, de changement d'espace couleur, permettant de faire passer des données d'image couleur de l'espace dépendant considéré à un espace indépendant (CIELab, YCrCb et autres), ou inversement. Deux espaces indépendants quelconques sont mutuellement liés par une table de transformation qui, indépendante de tout élément matériel, a été conçue pour ne pas présenter de distorsions et a donc pu être définie par un algorithme. The dependent spaces linked to a device, scanner 4 (RGB) and printer 5 (CMYK), are specified, in an area 21 of the read-only memory ROM 2, by a matrix or table of transformation, of change of color space, allowing to pass color image data of the dependent space considered to an independent space (CIELab, YCrCb and others), or vice versa. Any two independent spaces are mutually linked by a transformation table which, independent of any hardware element, has been designed to be non-distorting and could therefore be defined by an algorithm.
De ce fait, seules sont stockées en mémoire morte 2, dans la zone 21 de changement d'espace couleur, les tables de transformation mettant en jeu au moins un espace dépendant (RVB, CMJN), c' est-à-dire la table de passage de l' espace dépendant de représentation des couleurs du scanner 4 vers un espace indépendant de représentation d'image et la table de passage d'un autre espace indépendant de représentation d'image vers l' espace dépendant de représentation des couleurs de l' imprimante 5. A titre d'exemple, le programme CEC.cpp en annexe fait passer les données de l'espace indépendant Lab à l'espace CMJN. Toutes les autres tables, de transformation entre espaces indépendants (CIELab, YCrCb), sont représentées, dans une zone 22 de la mémoire 2, par uniquement As a result, only the storage tables 2 containing at least one dependent space (RGB, CMYK), that is to say the table, are stored in the read-only memory 2 in the color space change zone 21. transitioning from the color representation dependent space of the scanner 4 to an independent image representation space and the passing table of another independent image representation space to the color representation dependent space of the As an example, the CEC.cpp program in the appendix switches data from the Lab independent space to the CMYK space. All the other tables, transformation between independent spaces (CIELab, YCrCb), are represented, in an area 22 of the memory 2, by only
<Desc/Clms Page number 4><Desc / Clms Page number 4>
l' algorithme permettant de les reconstituer par calcul . En pratique ici, ce calcul de toutes les tables de changement d'espace couleur indépendant intervient systématiquement, à l' initialisation du télécopieur, et les tables correspondantes sont stockées dans la zone 72 de la mémoire RAM 7. Le microprocesseur 6 dispose ainsi de ces tables en temps réel. the algorithm allowing to reconstitute them by calculation. In practice here, this calculation of all the tables of independent color space change occurs systematically, at the initialization of the fax machine, and the corresponding tables are stored in the area 72 of the RAM memory 7. The microprocessor 6 thus has these tables in real time.
Il est aussi prévu de calculer et stocker de même une table redondante représentant globalement une matrice de passage direct de l'espace dépendant RVB du scanner 4 à l'espace dépendant CMJN de l'imprimante 5, afin de limiter la tâche de traitement en cas de copie locale. It is also planned to calculate and store in the same way a redundant table globally representing a matrix of direct passage of the RGB-dependent space of the scanner 4 to the CMYK-dependent space of the printer 5, in order to limit the processing task in case local copy.
Un espace de référence de couleurs comporte ici 256 valeurs par composante de référence. L'espace RVB par exemple peut ainsi être représenté par un cube d'arête de longueur 256, à trois axes, R, V, B. A color reference space here has 256 values per reference component. The RGB space, for example, can thus be represented by an edge cube of length 256, with three axes, R, V, B.
Le passage de données de couleur d'un premier espace à un second espace s'effectue en trois étapes. Dans une première étape, on divise chaque axe du premier espace, ici R, V, B, en 2N + 1 segments, par exemple en 33 segments si N=5, ce qui définit 333volumes élémentaires cubiques d'arête égale à 8 unités. Dans une deuxième étape, on détermine par des tables ou algorithmes de transformation, telles que rotation et translation ou autres, les positions des sommets des cubes élémentaires du premier espace dans le second espace visé. On obtient ainsi des volumes élémentaires correspondants dans le second espace, dont la forme peut différer de celle d'un cube. La deuxième étape permet ainsi de placer tout point du premier espace, entraîné avec le cube le contenant, dans une position approximative correspondante du second espace. Dans une troisième étape, la position exacte du point du premier espace transféré dans le second espace est déterminée, à partir de tables en mémoire morte 2, par interpolation tétraédrique d'après la position du point dans le cube de départ le contenant. Pour ce faire, la position relative du point (3 valeurs de 0 à 8 selon les 3 axes respectifs R, V, B) étant repérée par rapport aux sommets du cube, il est déterminé une position relative homologue par rapport aux sommets de l'espace élémentaire constituant la transformée du cube considéré. On notera que, d'une façon générale, les espaces considérés sont des espaces vectoriels dont le nombre de vecteurs The passage of color data from a first space to a second space is done in three steps. In a first step, each axis of the first space, here R, V, B, is divided into 2N + 1 segments, for example into 33 segments if N = 5, which defines 333 cubic elementary volume with an edge equal to 8 units. In a second step, the positions of the vertices of the elementary cubes of the first space in the second targeted space are determined by transformation tables or algorithms, such as rotation and translation or other. Corresponding elementary volumes are thus obtained in the second space, the shape of which may differ from that of a cube. The second step thus makes it possible to place any point of the first space, driven with the cube containing it, in a corresponding approximate position of the second space. In a third step, the exact position of the point of the first space transferred in the second space is determined, from tables in read-only memory 2, by tetrahedral interpolation according to the position of the point in the starting cube containing it. To do this, the relative position of the point (3 values of 0 to 8 according to the 3 respective axes R, V, B) being identified with respect to the vertices of the cube, a relative relative position is determined relative to the vertices of the cube. elementary space constituting the transformed cube. It should be noted that, in general, the spaces considered are vector spaces whose number of vectors
<Desc/Clms Page number 5><Desc / Clms Page number 5>
propres peut être quelconque et que les volumes élémentaires tridimensionnels de l' exemple ci-dessus pourraient, dans un autre exemple, avoir un autre nombre de dimensions. Un volume élémentaire peut donc être défini comme étant une portion de l' espace vectoriel considéré, dans laquelle toutes les variables, spécifiant des positions par rapport aux vecteurs propres, varient mais ne présentent qu'une variation élémentaire. It may be neat and the three - dimensional elementary volumes of the above example could, in another example, have a different number of dimensions. An elementary volume can therefore be defined as being a portion of the considered vector space, in which all the variables, specifying positions with respect to the eigenvectors, vary but only have an elementary variation.
<Desc/Clms Page number 6><Desc / Clms Page number 6>
CEC.cpp // Ce programme effectue un changement d'espace // colorimétrique Lab -> CMJN à l'aide de tables // // d'interpolation codées sur 8 bits. CEC.cpp // This program performs a Lab → CMYK color space change using 8-bit interpolation tables.
// // // Par Stanislas de Crevoisier, octobre 1998 (Stan3.cpp) // Modifié le 04/03/99 pour le module "imprimante", SdC // // Modifié le 15/10/99 pour le projet "calibration", SdC // /////////////////////////////////////////////////////////////// #include "stdafx. h" #include <math.h> #include "calibration.h" #include "imprimante.h" #include "conversion.h" #include "TablesCEC. h" //Variables globales typedef struct taglpcci { int offset[10)[4]; unsigned short lpCoeff[32768][5]; unsigned short lpProfil[35937][4]; } CCECONVERTINFO, *LPCCECONVERTINFO ; // Eléments relatifs à la grille fine (LUT complète) unsigned char pas; unsigned char taille~cube; unsigned char taille~imp,taille~scan; unsigned char lsb, lsb2, msb,mask~lsb; unsigned short n~coins~1D, n~coins~2D;
//CString ctiemin~coeffs="C:\\Program Files\\DevStudio\\MyProjects\\Calibration\\Aide à la calibration\\"; CString chemin~coeffs; //Détermination des variables globales void calculer~variables (void) { switch(taille~imp) ( case 9 : lsb = 5; break ; case 17 : lsb = 4; break ; case 33 : lsb = 3; break; ) lsb2 = (lsb 1); msb = 8 - lsb; n~coins~ID = taille~imp; n~coins~2D = taille~imp * taille~imp; mask~lsb = (l lsb) - 1; // // // By Stanislas de Crevoisier, October 1998 (Stan3.cpp) // Modified on 04/03/99 for the "printer" module, Sd // // Modified on 15/10/99 for the project " calibration ", SdC // //////////////////////////////////////////// /////////////////// #include "stdafx.h"#include<math.h>#include"calibration.h"#include"printer.h"#include" conversion.h "#include" TablesCEC.h "// Global variables typedef struct taglpcci {int offset [10] [4]; unsigned short lpCoeff [32768] [5]; unsigned short lpProfile [35937] [4]; } CCECONVERTINFO, * LPCCECONVERTINFO; // Elements related to the fine grid (complete LUT) unsigned char not; unsigned char size ~ cube; unsigned char size ~ imp, size ~ scan; unsigned char lsb, lsb2, msb, mask ~ lsb; unsigned short n ~ corners ~ 1D, n ~ corners ~ 2D;
// CString ctiemin ~ coeffs = "C: \ Program Files \ DevStudio \ MyProjects \ Calibration \ Calibration help \\"; CString path ~ coeffs; // Determination of global variables void compute ~ variables (void) {switch (size ~ imp) (box 9: lsb = 5; break; box 17: lsb = 4; break; box 33: lsb = 3; break;) lsb2 = (lsb 1); msb = 8 - lsb; n ~ corners ~ ID = size ~ imp; n ~ corners ~ 2D = size ~ imp * size ~ imp; mask ~ lsb = (l lsb) -1;
<Desc/Clms Page number 7><Desc / Clms Page number 7>
taille~cube = mask~lsb + 1; } //chargement des profils Lab 8 bits LPCCECONVERTINFO charger~profils(LPCCECONVERTINFO lpcci, CString nom~fichier) ( int a,b,taille;
FILE *fichier; fichier=fopen(nom~fichier, "rb"); if(fichier==NULL) {
CString strMsg; strMsg="Erreur d'ouverture du profil imprimante";
MessageBox(NULL,strMsg, NULL, MB~ICONINFORMATION MB~OK) ; return 0 ; } //On récupère la taille des tables fseek(fichier, OL, SEEK~END); taille = ftell(fichier); fseek (fichier, OL, SEEK~SET); switch(taille) { case 2916 : taille~imp = 9; break ; case 19652 : taille~imp = 17; break ; case 143748 : taille~imp = 33; break ; default :
CString strMsg; strMsg="Erreur de taille des tables imprimante";
MessageBox(NULL,strMsg, NULL, MB~ICONINFORMATION MB~OK) ; return 0 ; } calculer~variables();
for(a=0;a<(taille~imp*taille~imp*taille~imp);a++) { for(b=0;b<4;b++) { lpcci->lpProfil[a][b]=fgetc(fichier); fclose(fichier); return lpcci; } //chargement des coefficients 16 bits LPCCECONVERTINFO charger~coeffs(LPCCECONVERTINFO lpcci) { int a,b ;
CString nom~fichier;
FILE *fichier; size ~ cube = mask ~ lsb + 1; } // loading 8-bit Lab profiles LPCCECONVERTINFO load ~ profiles (LPCCECONVERTINFO lpcci, CString name ~ file) (int a, b, size;
FILE * file; file = fopen (name ~ file, "rb"); if (file == NULL) {
CString strMsg; strMsg = "Error opening the printer profile";
MessageBox (NULL, strMsg, NULL, MB ~ ICONINFORMATION MB ~ OK); return 0; } // We get the size of the fseek tables (file, OL, SEEK ~ END); size = ftell (file); fseek (file, OL, SEEK ~ SET); switch (size) {box 2916: size ~ imp = 9; break; box 19652: size ~ imp = 17; break; box 143748: size ~ imp = 33; break; default:
CString strMsg; strMsg = "Printer table size error";
MessageBox (NULL, strMsg, NULL, MB ~ ICONINFORMATION MB ~ OK); return 0; } calculate ~ variables ();
for (a = 0; a <(size ~ imp * size ~ imp * size ~ imp); a ++) {for (b = 0; b <4; b ++) {lpcci-> lpProfile [a] [b] = fgetc (file); fclose (file); return lpcci; } // load 16-bit coefficients LPCCECONVERTINFO load ~ coeffs (LPCCECONVERTINFO lpcci) {int a, b;
CString name ~ file;
FILE * file;
<Desc/Clms Page number 8><Desc / Clms Page number 8>
//fichier=fopen("Coefs3.don", "r"); //fichier=fopen("Coeffl6b.don", "r"); switch(taille-imp) ( case 9 : nom~fichier = chemin~coeffs + "Coeffs9x9x9.don"; break ; case 17 : nom~fichier = chemin~coeffs + "Coeffsl7xl7xl7.don"; break ; case 33 : nom~fichier = chemin~coeffs + "Coeffs33x33x33.don"; break ; } fichier = fopen(nom fichier,"rb"); if(fichier==NULL) (
CString strMsg; strMsg="Erreur d'ouverture du fichier de coefficients";
MessageBox(NULL,strMsg, NULL, MB~ICONINFORMATION MB~OK) ; return 0 ; } for(a=0;a<(l (lsb*3) ) ;a++) ( for(b=O;b<5;b++) { lpcci->lpCoeff[a][b]=fgetc(fichier);
lpcci->lpCoeff[a][b]+=(fgetc(fichier)<<8) ; fclose(fichier); return lpcci; } //procédure de détermination des offsets LPCCECONVERTINFO charger~offsets(LPCCECONVERTINFO lpcci) { int q = n~coins~lD; int offset[8]; int type[10]; // initialisations pour trouver les offsets Il Il est plus rapide de calculer une table pour toutes les combinaisons // Lors du traitement de chaque pixel on fait 4 indirections // à la place de 5 indirections et 8 tests de masquage ' offset[0] = 0; // coordonnées de A dans le cube offset[1] = 1; // coordonnées de B dans le cube offset[2] = q+1; // coordonnées de C dans le cube offset[3] = q; // coordonnées de D dans le cube offset[4] = q*q; // coordonnées de E dans le cube offset[5] = q*q+l; // coordonnées de F dans le cube offset[6] = q*q+q+l; // coordonnées de G dans le cube offset[7] = q*q+q; // coordonnées de H dans le cube type[0] = Oxlb; //file=fopen("Coefs3.don "," r ");//file=fopen("Coeffl6b.don"," r "); switch (imp-size) (box 9: name ~ file = path ~ coeffs + "Coeffs9x9x9.don";break; box 17: name ~ file = path ~ coeffs + "Coeffsl7xl7xl7.don";break; box 33: name ~ file = path ~ coeffs + "Coeffs33x33x33.don";break;} file = fopen (file name, "rb"); if (file == NULL) (
CString strMsg; strMsg = "Error opening the coefficient file";
MessageBox (NULL, strMsg, NULL, MB ~ ICONINFORMATION MB ~ OK); return 0; } for (a = 0; a <(l (lsb * 3)); a ++) (for (b = 0; b <5; b ++) {lpcci-> lpCoeff [a] [b] = fgetc (file);
lpcci-> lpCoeff [a] [b] + = (fgetc (file) <<8); fclose (file); return lpcci; } // procedure for determining offsets LPCCECONVERTINFO load ~ offsets (LPCCECONVERTINFO lpcci) {int q = n ~ corners ~ lD; int offset [8]; int type [10]; // initializations to find the offsets It is faster to compute a table for all combinations // When processing each pixel we make 4 indirections // instead of 5 indirections and 8 masking tests' offset [0] = 0; // coordinates of A in the cube offset [1] = 1; // coordinates of B in the offset cube [2] = q + 1; // coordinates of C in the cube offset [3] = q; // coordinates of D in the offset cube [4] = q * q; // coordinates of E in the offset cube [5] = q * q + l; // coordinates of F in the offset cube [6] = q * q + q + l; // coordinates of G in the cube offset [7] = q * q + q; // coordinates of H in the cube type [0] = Oxlb;
<Desc/Clms Page number 9><Desc / Clms Page number 9>
type[l] = 0x72; type[2] = Ox4e; type[3] = Oxd8; type[4] = 0x5a; type[5] = Oxbl; type[6] = 0x27; type [7] = Oxe4; type[8] = 0x8d; type[9] = Oxa5; for (int nType = 0; nType < 10; nType++) { char tetra = type[nType]; int m = 1; int nOffset = 0; for (int sommet = 0 ; < 8; sommet ++, m = 1) { if (tetra & m) ( lpcci->offset[nType][nOffset] = offset[sommet]; nOffset ++ ; return Ipcci; ) struct CMJNQUADRUPLE calcul(LPCCECONVERTINFO lpcci,struct LABTRIPLE Lab) ( int L,a,b; struct CMJNQUADRUPLE CMJN ; int i,j,tmp; long x,aux[4]; int sommets,offsetCoef,type,coef; unsigned short lpCoeff[4]; unsigned short IpProfil[4]; //+pratiques que les pointeurs... type [l] = 0x72; type [2] = Ox4e; type [3] = Oxd8; type [4] = 0x5a; type [5] = Oxbl; type [6] = 0x27; type [7] = Oxe4; type [8] = 0x8d; type [9] = Oxa5; for (int nType = 0; nType <10; nType ++) {char tetra = type [nType]; int m = 1; int nOffset = 0; for (int vertex = 0; <8; vertex ++, m = 1) {if (tetra & m) (lpcci-> offset [nType] [nOffset] = offset [vertex]; nOffset ++; return Ipcci;) struct CMJNQUADRUPLE compute (LPCCECONVERTINFO lpcci, struct LABTRIPLE Lab) (int L, a, b; struct CMJNQUADCMY CMYK; int i, j, tmp; long x, aux [4]; int vertices, offsetCoef, type, coef; unsigned short lpCoeff [4]; unsigned short IpProfile [4]; // + practices that pointers ...
//Boucle écrite par CCE for(i=O;i<l;i++) //Fausse boucle pour traitements ultérieurs. // Loop written by CCE for (i = O; i <l; i ++) // False loop for subsequent processing.
{
L=(int)(Lab.L); a=(int)(Lab.a); b=(int)(Lab.b); aux[0]=0; aux[1]=0; aux[2]=0; aux[3]=0; offsetCoef = (L & mask~lsb) # ((a & mask~lsb) lsb) # ((b & mask~lsb) lsb2); x= (long) n~coins~2D*(b lsb) + n~coins~lD*(a lsb) + (L lsb); for(j=O;j<4;j++) lpCoeff[j] = lpcci->lpCoeff[offsetCoef][j]; type=lpcci->lpCoeff[offsetCoef][4];
for (sommets=0; sommets<4;sommets++) { tmp=(lpcci->offset(type](sommets]+x); for(j=O;j<4;j++) ( lpProfil[j]=lpcci->lpProfil[tmp][j]; {
L = (int) (Lab.L); a = (int) (Lab.a); b = (int) (Lab.b); to [0] = 0; to [1] = 0; to [2] = 0; to [3] = 0; offsetCoef = (L & Mask ~ lsb) # ((a & mask ~ lsb) lsb) # ((b & mask ~ lsb) lsb2); x = (long) n ~ corners ~ 2D * (b lsb) + n ~ corners ~ lD * (a lsb) + (L lsb); for (j = O; j <4; j ++) lpCoeff [j] = lpcci-> lpCoeff [offsetCoef] [j]; type = lpcci-> lpCoeff [offsetCoef] [4];
for (vertices = 0; vertices <4; vertices ++) {tmp = (lpcci-> offset (type) (vertices) + x); for (j = O; j <4; j ++) (lpProfile [j] = lpcci- > lpProfil [tmp] [j];
<Desc/Clms Page number 10><Desc / Clms Page number 10>
} coef=lpCoeff[sommets];
aux[0] += (long)(lpProfil[0]*coef); aux[l] += (long(lpProfil[1]*coef); aux[2] += (long)(lpProfil[2]*coef); aux[3] += (long)(lpProfil[-3]*coef): }
CMJN.c = (unsigned char)(aux[0] 15);
CMJN.m = (unsigned char)(aux[1] 15); CMJN. j = (unsigned char)(aux[2] 15);
CMJN.n = (unsigned char)(aux[3] 15); } return CMJN ; } //Permet d'appeler les différentes fonctions définies plus haut... } coef = lpCoeff [vertices];
to [0] + = (long) (lpProfile [0] * coef); to [l] + = (long (lpProfile [1] * coef) to [2] + = (long) (lpProfile [2] * coef) to [3] + = (long) (lpProfile [-3] * coef):}
CMYK.c = (unsigned char) (at [0] 15);
CMYK.m = (unsigned char) (to [1] 15); CMYK. j = (unsigned char) (to [2] 15);
CMYK.n = (unsigned char) (to [3] 15); } return CMYK; } // Allows calling the different functions defined above ...
//Réalise la conversion de tables : //RVB->Lab et Lab->CMJN en RVB->CMJN CString cec(CString nom~profil~scanner, CString nom~profil~imp) (
FILE *ficl, *fic2, *fic~sRGB, *fic~YCC;
LPCCECONVERTINFO lpcci = new(CCECONVERTINFO); int r,v,b ; unsigned int valeur[3]; struct RGBTRIPLE2 RGB, XYZ; struct LABTRIPLE Lab; struct CMJNQUADRUPLE CMJN ;
CString nom~profil~copie~locale;
CString nom~profil~cmjn~srgb, nom~profil~cmjn~ycc; chemin~coeffs.LoadString(IDS~BASE~DIRECTORY); //détermination de la structure lpcci //printf("Initialisation du changement d'espace colorimetrique...");
lpcci=charger profils(lpcci,nom-profil~imp); if(lpcci == NULL) return "erreur" ; lpcci=charger~coeffs(lpcci); if(lpcci == NULL) return "erreur" ; lpcci=charger~offsets(lpcci); if(lpcci == NULL) return "erreur" ; //chargement de la LUT 16 bits RVB->Lab //printf("OK\nChargement du profil scanner...\n");
if((ficl=fopen(nomrofil scanner,"rb"))==NULL) (
CString strMsg; strMsg="Erreur d'ouverture du profil scanner";
MessageBox(NULL,strMsg, NULL, MB~ICONINFORMATION # MB~OK) ; return "erreur"; ) //On récupère la taille des tables fseek (ficl, OL, SEEK~END); r = ftell(ficl); fseek (ficl, OL, SEEK~SET); switch(r) // Perform table conversion: // RGB-> Lab and Lab-> CMYK to RGB-> CMYK CString cec (CString name ~ profile ~ scanner, CString name ~ profile ~ imp) (
FILE * ficl, * fic2, * fic ~ sRGB, * fic ~ YCC;
LPCCECONVERTINFO lpcci = new (CCECONVERTINFO); int r, v, b; unsigned int value [3]; struct RGBTRIPLE2 RGB, XYZ; struct LABTRIPLE Lab; CMJNQUADRUPLE CMYK struct;
CString name ~ profile ~ copy ~ local;
CString name ~ profile ~ cmjn ~ srgb, name ~ profile ~ cmjn ~ ycc; coeffs.LoadString way ~ (~ IDS ~ BASE DIRECTORY); // determine the structure lpcci // printf ("Initialize the color space change ...");
lpcci = load profiles (lpcci, profile-name ~ imp); if (lpcci == NULL) return "error"; lpcci = load ~ coeffs (lpcci); if (lpcci == NULL) return "error"; lpcci = load ~ offsets (lpcci); if (lpcci == NULL) return "error"; // load the 16-bit LUT RGB-> Lab // printf ("OK \ nLoad scanner profile ... \ n");
if ((ficl = fopen (scannerfilename, "rb")) == NULL) (
CString strMsg; strMsg = "Error opening scanner profile";
MessageBox (NULL, strMsg, NULL, MB ~ ICONINFORMATION # MB ~ OK); return "error"; ) // We get the size of the fseek tables (ficl, OL, SEEK ~ END); r = ftell (ficl); fseek (ficl, OL, SEEK ~ SET); switch (r)
<Desc/Clms Page number 11><Desc / Clms Page number 11>
{ case 2187 : taille~scan = 9; break ; case 14739 : taille~scan = 17; break ; case 107811 : taille~scan = 33; break ; default :
CString strMsg; strMsg="Erreur de taille des tables du profil scanner";
MessageBox(NULL,strMsg, NULL, MB-ICONINFORMATION # MB~OK) ; return "erreur" ; } nom~profil~copie~locale = nom~profil~scanner.SpanExcluding("."); nom~profil~cmjn~srgb = nom~profil~scanner.SpanExcluding("~"); nom~profil~cmjn~ycc = nom~profil~cmjn~srgb + "~ycc~cmjn.raw"; nom~profil~cmjn~srgb = nom~profil~cmjn~srgb + "~srgb~cmjn.raw";
nom profil copie locale += "cmjn.raw"; if((fic2=fopen(nom~profil~copie~locale,"wb"))==NULL) {
CString strMsg; strMsg="Erreur d'ouverture du profil copie locale";
MessageBox(NULL,strMsg, NULL, MB-ICONINFORMATION # MB~OK) ; return "erreur"; }
if((fic-sRGB=fopen(nom profil cmjn-srgb,"wb"))==NULL) {
CString strMsg; strMsg="Erreur d'ouverture du profil sRGB -> CMJN";
MessageBox(NULL,strMsg, NULL, MB~ICONINFORMATION # MB~OK) ; return "erreur"; }
if((fic-YCC=fopen(nom profil çmjn ycc,"wb"))==NULL) {
CString strMsg; strMsg="Erreur d'ouverture du profil YCrCb-> CMJN" ;
MessageBox(NULL,strMsg, NULL, MB~ICONINFORMATION # MB~OK); return "erreur" ; } //printf("OK\nCreation de la table RVB->CMJN...");
for(r=O;r<(taille~scan*taille~scan*taille~scan);r++) { for(b=O;b<3;b++) ( valeur[b]=fgetc(ficl);
////valeur[bJ+=(fgetc(ficl) 8); } RGB. red = valeur[0]; RGB. green = valeur [1] ; RGB. blue = valeur(2]; XYZ = sRGB2XYZ(RGB); //Lab.L=(float)valeur[O]; //Lab.a=(float)valeur[l]; {box 2187: size ~ scan = 9; break; box 14739: size ~ scan = 17; break; box 107811: size ~ scan = 33; break; default:
CString strMsg; strMsg = "Scanner table size error";
MessageBox (NULL, strMsg, NULL, MB-ICONINFORMATION # MB ~ OK); return "error"; } name ~ profile ~ copy ~ local = name ~ profile ~ scanner.SpanExcluding ("."); name ~ profile ~ cmjn ~ srgb = name ~ profile ~ scanner.SpanExcluding ("~"); name ~ profile ~ cmjn ~ ycc = name ~ profile ~ cmjn ~ srgb + "~ ycc ~ cmjn.raw"; name ~ profile ~ cmjn ~ srgb = name ~ profile ~ cmjn ~ srgb + "~ srgb ~ cmjn.raw";
name profile local copy + = "cmjn.raw"; if ((fic2 = fopen (name ~ profile ~ copy ~ local, "wb")) == NULL) {
CString strMsg; strMsg = "Error opening local copy profile";
MessageBox (NULL, strMsg, NULL, MB-ICONINFORMATION # MB ~ OK); return "error"; }
if ((fic-sRGB = fopen (profile name cmjn-srgb, "wb")) == NULL) {
CString strMsg; strMsg = "Error opening sRGB -> CMYK profile";
MessageBox (NULL, strMsg, NULL, MB ~ ICONINFORMATION # MB ~ OK); return "error"; }
if ((fic-YCC = fopen (profile name çmjn ycc, "wb")) == NULL) {
CString strMsg; strMsg = "Error opening YCrCb-> CMYK profile";
MessageBox (NULL, strMsg, NULL, MB ~ ICONINFORMATION # MB ~ OK); return "error"; } // printf ("OK \ nCreation of the RGB-> CMYK ..."table);
for (r = O; r <(size ~ scan * size ~ scan * size ~ scan); r ++) {for (b = O; b <3; b ++) (value [b] = fgetc (ficl);
//// value [bJ + = (fgetc (ficl) 8); } RGB. red = value [0]; RGB. green = value [1]; RGB. blue = value (2); XYZ = sRGB2XYZ (RGB); //Lab.L=(float) value; O]; //Lab.a=(float) value;
<Desc/Clms Page number 12><Desc / Clms Page number 12>
//Lab.b=(float)valeur[2];
Lab = XYZ2Lab(XYZ.red,XYZ.green,XYZ.blue);
Lab.L = (float)(Lab.L*2.55); if(Lab.L > 255)
Lab. L = 255; if(Lab.L<0)
Lab. L = 0;
Lab.a= (float)((Lab.a+85)*255.0/170.0);
Lab. b = (float)((Lab.a+75)*255.0/200.0); if(Lab.a > 255)
Lab.a= 255 ; if(Lab.a<0)
Lab.a = 0; if(Lab.b > 255)
Lab. b = 255; if(Lab.b<0)
Lab. b = 0;
CMJN=calcul(lpcci,Lab); fputc(CMJN.c,fic2); fputc(CMJN.m,fic2); fputc(CMJN.j,fic2); fputc(CMJN.n,fic2); } //Création des tables sRGB -> CMJN et YCC -> CMJN //Elles sont 33x33x33 par défaut for(b=0;b<257;b+=8) ( if(b == 256) b = 255; for(v=O;v<257;v+=8) { if(v == 256) v = 255; for (r=0;r<257;r+=8) { if(r == 256) r = 255;
RGB. red = r;
RGB. green = v;
RGB. blue = b; //sRGB -> CMJN
XYZ = sRGB2XYZ(RGB);
Lab = XYZ2Lab (XYZ.red, XYZ.green, XYZ.blue) ;
CMJN=calcul(lpcci,Lab); fputc(CMJN.c,fic~sRGB); fputc(CMJN.m,fic~sRGB); fputc (CMJN.j,fic~sRGB); fputc(CMJN.n,fic~sRGB); //YCC-> CMJN
RGB = YCrCb2sRGB(RGB);
XYZ = sRGB2XYZ(RGB);
Lab = XYZ2Lab(XYZ.red, XYZ.green, XYZ.blue) ;
CMJN=calcul(lpcci,Lab); fputc(CMJN.c,fic YCC); fputc (CMJN.m,fic~YCC); fputc(CMJN.j,fic~YCC); fputc (CMJN.n,fic~YCC); //Lab.b=(float)valeur[2];
Lab = XYZ2Lab (XYZ.red, XYZ.green, XYZ.blue);
Lab.L = (float) (Lab.L * 2.55); if (Lab.L> 255)
Lab. L = 255; if (Lab.L <0)
Lab. L = 0;
Lab.a = (float) ((Lab.a + 85) * 255.0 / 170.0);
Lab. b = (float) ((Lab.a + 75) * 255.0 / 200.0); if (Lab.a> 255)
Lab.a = 255; if (Lab.a <0)
Lab.a = 0; if (Lab.b> 255)
Lab. b = 255; if (Lab.b <0)
Lab. b = 0;
CMYK = calculation (lpcci Lab); fputc (CMJN.c, file2); fputc (CMJN.m, file2); fputc (CMJN.j, file2); fputc (CMJN.n, file2); } // Create sRGB -> CMYK and YCC -> CMYK tables // They are 33x33x33 default for (b = 0; b <257; b + = 8) (if (b == 256) b = 255; v = 0; v <257; v + = 8) {if (v == 256) v = 255; for (r = 0; r <257; r + = 8) {if (r == 256) r = 255;
RGB. red = r;
RGB. green = v;
RGB. blue = b; // sRGB -> CMYK
XYZ = sRGB2XYZ (RGB);
Lab = XYZ2Lab (XYZ.red, XYZ.green, XYZ.blue);
CMYK = calculation (lpcci Lab); fputc (CMJN.c, fic ~ sRGB); fputc (CMJN.m, fic ~ sRGB); fputc (CMYK.j, fic ~ sRGB); fputc (CMJN.n, fic ~ sRGB); // YCC-> CMYK
RGB = YCrCb2sRGB (RGB);
XYZ = sRGB2XYZ (RGB);
Lab = XYZ2Lab (XYZ.red, XYZ.green, XYZ.blue);
CMYK = calculation (lpcci Lab); fputc (CMYK.c, fic YCC); fputc (CMYK.m, fic ~ YCC); fputc (CMJN.j, fic ~ YCC); fputc (CMYK.n, fic ~ YCC);
<Desc/Clms Page number 13><Desc / Clms Page number 13>
fclose(ficl); fclose(fic2); fclose(fic~sRGB); fclose(fic~YCC); return nom~profil~copie~locale; } //RVB->Lab et Lab->CMJN en RVB->CMJN int format~tables~imp(CString nom~profil~imp) {
FILE *fichier;
LPCCECONVERTINFO lpcci = new(CCECONVERTINFO); int r,v,b ; struct LABTRIPLE Lab; struct CMJNQUADRUPLE CMJN ; //RGBTRIPLE2 RGB ; ////// chemin~coeffs.LoadString(IDS~BASE~DIRECTORY); //détermination de la structure lpcci //printf("Initialisation du changement d'espace colorimetrique...");
lpcci=charger~profils(lpcci,nom profil-imp); if(lpcci == NULL) return 0 ; lpcci=charger~coeffs(lpcci); if(lpcci == NULL) return 0 ; lpcci=charger~offsets(lpcci); if(lpcci == NULL) return 0 ;
if((fichier=fopen(nom profil imp,"wb"))==NULL) {
CString strMsg; strMsg="Erreur d'ouverture du profil imprimante";
MessageBox(NULL,strMsg, NULL, MB-ICONINFORMATION # MB~OK); return 0 ; } //Création des tables Lab->CMJN au bon format for (b=0;b<257;b+=taille~cube) { if (b == 256) b = 255;
for(v=O;v<257;v+=taille cube) ( if(v == 256) v = 255; for(r=0;r<257;r+=taille~cube) { if(r == 256) r = 255; //RGB.red = r;///// //RGB. green = v;///// //RGB. blue = b;///// //RGB = sRGB2XYZ(RGB);///// fclose (FICL); fclose (file2); fclose (~ fic sRGB); fclose (~ fic YCC); return name ~ profile ~ copy ~ local; } // RGB-> Lab and Lab-> CMYK in RGB-> CMYK int format ~ tables ~ imp (CString name ~ profile ~ imp) {
FILE * file;
LPCCECONVERTINFO lpcci = new (CCECONVERTINFO); int r, v, b; struct LABTRIPLE Lab; CMJNQUADRUPLE CMYK struct; // RGBTRIPLE2 RGB; ////// path ~ coeffs.LoadString (IDS ~ BASE ~ DIRECTORY); // determine the structure lpcci // printf ("Initialize the color space change ...");
lpcci = load ~ profiles (lpcci, name profile-imp); if (lpcci == NULL) return 0; lpcci = load ~ coeffs (lpcci); if (lpcci == NULL) return 0; lpcci = load ~ offsets (lpcci); if (lpcci == NULL) return 0;
if ((file = fopen (name profile imp, "wb")) == NULL) {
CString strMsg; strMsg = "Error opening the printer profile";
MessageBox (NULL, strMsg, NULL, MB-ICONINFORMATION # MB ~ OK); return 0; } // Create the correct Lab-> CMYK tables for (b = 0; b <257; b + = cube size) {if (b == 256) b = 255;
for (v = 0; v <257; v + = cube size) (if (v == 256) v = 255; for (r = 0; r <257; r + = cube size) {if (r == 256 ) r = 255; //RGB.red = r; ///// // RGB. green = v; ///// // RGB. blue = b; ///// // RGB = sRGB2XYZ ( RGB) /////
<Desc/Clms Page number 14><Desc / Clms Page number 14>
//Lab = XYZ2Lab(RGB.red, RGB. green, RGB.blue);/////
Lab. L = (float)r;
Lab.a= (float) v;
Lab. b = (float)b;
Lab = conversionOasis~ICC(Lab);
CMJN=calcul(lpcci,Lab); fputc(CMJN.c,fichier); fputc(CMJN.m,fichier); fputc (CMJN,j,fichier); fputc(CMJN.n,fichier); } } } fclose(fichier); return 1 ; }// Lab = XYZ2Lab (RGB.red, RGB, green, RGB.blue); /////
Lab. L = (float) r;
Lab.a = (float) v;
Lab. b = (float) b;
Lab = conversionOasis ~ ICC (Lab);
CMYK = calculation (lpcci Lab); fputc (CMJN.c, file) fputc (CMJN.m, file) fputc (CMYK, j, file); fputc (CMJN.n, file) }}} fclose (file); return 1; }
Claims (2)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR9916250A FR2803156B1 (en) | 1999-12-22 | 1999-12-22 | COLOR FAX INCLUDING A SECONDARY IMAGE PROCESSING MICROPROCESSOR |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR9916250A FR2803156B1 (en) | 1999-12-22 | 1999-12-22 | COLOR FAX INCLUDING A SECONDARY IMAGE PROCESSING MICROPROCESSOR |
Publications (2)
Publication Number | Publication Date |
---|---|
FR2803156A1 true FR2803156A1 (en) | 2001-06-29 |
FR2803156B1 FR2803156B1 (en) | 2002-11-22 |
Family
ID=9553629
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
FR9916250A Expired - Fee Related FR2803156B1 (en) | 1999-12-22 | 1999-12-22 | COLOR FAX INCLUDING A SECONDARY IMAGE PROCESSING MICROPROCESSOR |
Country Status (1)
Country | Link |
---|---|
FR (1) | FR2803156B1 (en) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0534871A2 (en) * | 1991-09-27 | 1993-03-31 | Eastman Kodak Company | Method and apparatus for selective interception of a graphics rendering operation for effecting image data modification |
EP0581590A2 (en) * | 1992-07-31 | 1994-02-02 | Canon Kabushiki Kaisha | Color processing method |
WO1994024626A1 (en) * | 1993-04-16 | 1994-10-27 | Data Translation, Inc. | Video peripheral for a computer |
US5489921A (en) * | 1993-04-08 | 1996-02-06 | Linotype-Hell Ag | Method for generating uniform color area definitions with addition and removal operators |
EP0703701A2 (en) * | 1990-09-28 | 1996-03-27 | Eastman Kodak Company | Color image processing system for preparing a composite image transformation module for performing a plurality of selected image transformations |
-
1999
- 1999-12-22 FR FR9916250A patent/FR2803156B1/en not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0703701A2 (en) * | 1990-09-28 | 1996-03-27 | Eastman Kodak Company | Color image processing system for preparing a composite image transformation module for performing a plurality of selected image transformations |
EP0534871A2 (en) * | 1991-09-27 | 1993-03-31 | Eastman Kodak Company | Method and apparatus for selective interception of a graphics rendering operation for effecting image data modification |
EP0581590A2 (en) * | 1992-07-31 | 1994-02-02 | Canon Kabushiki Kaisha | Color processing method |
US5489921A (en) * | 1993-04-08 | 1996-02-06 | Linotype-Hell Ag | Method for generating uniform color area definitions with addition and removal operators |
WO1994024626A1 (en) * | 1993-04-16 | 1994-10-27 | Data Translation, Inc. | Video peripheral for a computer |
Also Published As
Publication number | Publication date |
---|---|
FR2803156B1 (en) | 2002-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4241643B2 (en) | Color determination apparatus and color determination method | |
US6825876B1 (en) | Digital camera device with methodology for efficient color conversion | |
US6094454A (en) | Multi-spectral image compression and transformation | |
CN101938650B (en) | Image compressing apparatus, image compressing method, image decompressing apparatus, image decompressing method, image forming apparatus | |
CN101662558B (en) | Display control device, image forming apparatus, method for controlling display device | |
US5719956A (en) | Image processing apparatus with separate color conversion for CMY signals and K signal | |
US5489998A (en) | Color image processing apparatus having transmitter and receiver which perform color correction in accordance with a common standard color image and method for same | |
US6310696B1 (en) | Color gamut displaying method, an image processing method, and apparatus utilizing these methods | |
US6738509B2 (en) | Multi-spectral image compression with bounded loss | |
JPH0877341A (en) | Equipment and method for color image processing | |
US8625177B2 (en) | Image processing apparatus, image forming apparatus, image processing method, and storage medium, each of which performs, on monochrome image data to image display device, or two-color image data, color matching process of reducing differences in color between image to be outputted by image display device and image to be outputted by printing apparatus | |
EP0886236A3 (en) | Configurable data processing pipeline | |
JPH11127340A (en) | Image processor and image processing method | |
EP0886205A3 (en) | Multi-path data processing pipeline | |
US20040183814A1 (en) | Method of generating color separation table | |
Hardeberg et al. | Color printer characterization using a computational geometry approach | |
US7843600B2 (en) | Information processing apparatus | |
FR2803156A1 (en) | Computer controlled color facsimile machine having central processor having secondary processor with digital color processing central microprocessor variable color spacing table dedicated memory associated. | |
US7123378B2 (en) | Image processing apparatus, method and program enabling high-precision color conversion | |
WO2001054397A2 (en) | Improved digital camera device with methodology for efficient color conversion | |
JP2705541B2 (en) | Printing apparatus and method of creating conversion table used for the same | |
Triantaphillidou et al. | Digital image file formats | |
JP2005005802A (en) | Color image processing apparatus, color image processing method, program, and recording medium | |
Szedo | Color-space converter: RGB to YCrCb | |
JP2004129149A (en) | Color scanner |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
CA | Change of address | ||
CD | Change of name or company name | ||
TP | Transmission of property | ||
TP | Transmission of property | ||
ST | Notification of lapse |
Effective date: 20110831 |