|
|
//***************************************************************************************************
// N5DIZPC.C
//
// Functions of dithering (For N5 printer)
//---------------------------------------------------------------------------------------------------
// copyright(C) 1997-2000 CASIO COMPUTER CO.,LTD. / CASIO ELECTRONICS MANUFACTURING CO.,LTD.
//***************************************************************************************************
#include <WINDOWS.H>
#include <WINBASE.H>
#include "PDEV.H" //+2002.2.23
//#include "COLDEF.H" //-2002.2.23
//#include "COMDIZ.H" //-2002.2.23
//#include "N5DIZPC.H" //-2002.2.23
#include "strsafe.h" // Security-Code 2002.3.6
//===================================================================================================
// Structure for dithering information (each color)
//===================================================================================================
typedef struct { struct { LPBYTE Cyn; LPBYTE Mgt; LPBYTE Yel; LPBYTE Bla; } Cur; struct { LPBYTE Cyn; LPBYTE Mgt; LPBYTE Yel; LPBYTE Bla; } Xsp; struct { LPBYTE Cyn; LPBYTE Mgt; LPBYTE Yel; LPBYTE Bla; } Xep; struct { LPBYTE Cyn; LPBYTE Mgt; LPBYTE Yel; LPBYTE Bla; } Ysp; struct { LPBYTE Cyn; LPBYTE Mgt; LPBYTE Yel; LPBYTE Bla; } Yep; struct { DWORD Cyn; DWORD Mgt; DWORD Yel; DWORD Bla; } DYY; } DIZCOLINF, FAR* LPDIZCOLINF;
//===================================================================================================
// Static functions
//===================================================================================================
//---------------------------------------------------------------------------------------------------
// Dithering (color 2value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcC02( // Return value no
LPDIZINF, // Fixation dithering information
LPDRWINF, // Drawing information
DWORD // Source data line number
); #endif
//---------------------------------------------------------------------------------------------------
// Dithering (color 4value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcC04( // Return value no
LPDIZINF, // Fixation dithering information
LPDRWINF, // Drawing information
DWORD // Source data line number
); #endif
//---------------------------------------------------------------------------------------------------
// Dithering (color 16value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcC16( // Return value no
LPDIZINF, // Fixation dithering information
LPDRWINF, // Drawing information
DWORD // Source data line number
); #endif
//---------------------------------------------------------------------------------------------------
// Dithering (mono 2value)
//---------------------------------------------------------------------------------------------------
static VOID DizPrcM02( // Return value no
LPDIZINF, // Fixation dithering information
LPDRWINF, // Drawing information
DWORD // Source data line number
);
//---------------------------------------------------------------------------------------------------
// Dithering (mono 4value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcM04( // Return value no
LPDIZINF, // Fixation dithering information
LPDRWINF, // Drawing information
DWORD // Source data line number
); #endif
//---------------------------------------------------------------------------------------------------
// Dithering (mono 16value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcM16( // Return value no
LPDIZINF, // Fixation dithering information
LPDRWINF, // Drawing information
DWORD // Source data line number
); #endif
//---------------------------------------------------------------------------------------------------
// Dithering procedure (For DRIVER)
//---------------------------------------------------------------------------------------------------
static VOID ColDizPrcNln( // Return value no
LPDIZINF, // Fixation dithering information
LPDRWINF, // Drawing information
DWORD // Source data line number
);
//---------------------------------------------------------------------------------------------------
// Dithering information set (color)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizInfSetCol( // Return value no
LPDIZINF, // Fixation dithering information
LPDIZCOLINF, // Dithering information (each color)
LPDRWINF, // Drawing information
DWORD // Threshold (per 1pixel)
); #endif
//---------------------------------------------------------------------------------------------------
// Dithering information set (monochrome)
//---------------------------------------------------------------------------------------------------
static VOID DizInfSetMon( // Return value no
LPDIZINF, // Fixation dithering information
LPDIZCOLINF, // Dithering information (each color)
LPDRWINF, // Drawing information
DWORD // Threshold (per 1pixel)
);
//---------------------------------------------------------------------------------------------------
// Dithering information renewal (color)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizInfChgCol( // Return value no
LPDIZINF, // Fixation dithering information
LPDIZCOLINF // Dithering information (each color)
); #endif
//---------------------------------------------------------------------------------------------------
// Dithering information renewal (monochrome)
//---------------------------------------------------------------------------------------------------
static VOID DizInfChgMon( // Return value no
LPDIZINF, // Fixation dithering information
LPDIZCOLINF // Dithering information (each color)
);
//***************************************************************************************************
// Functions
//***************************************************************************************************
//===================================================================================================
// Drawing information make
//===================================================================================================
#if !defined(CP80W9X) // CP-E8000 is invalid
DWORD WINAPI N501ColDrwInfSet( // In a bundle development possibility line number
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf, // Dithering information
DWORD linBufSiz // Line buffer size (1color)
) { DWORD lvl;
// Check of zero divide 2002.3.23 >>>
if ((drwInf->XaxNrt == 0) || (drwInf->XaxDnt == 0) || (drwInf->YaxNrt == 0) || (drwInf->YaxDnt == 0)) { ERR(("N501ColDrwInfSet() 0Div-Check [drwInf->XaxNrt,XaxDnt,YaxNrt,YaxDnt=0] \n")); return 0; } // Check of zero divide 2002.3.23 <<<
/*----- variable power offset calculation ------------------------------*/ drwInf->XaxOfs = (drwInf->StrXax * drwInf->XaxDnt + drwInf->XaxNrt / 2) / drwInf->XaxNrt; drwInf->YaxOfs = (drwInf->StrYax * drwInf->YaxDnt + drwInf->YaxNrt / 2) / drwInf->YaxNrt; /*----- One line dot number calculation --------------------------------*/ drwInf->LinDot = (drwInf->XaxOfs + drwInf->XaxSiz) * drwInf->XaxNrt / drwInf->XaxDnt - drwInf->XaxOfs * drwInf->XaxNrt / drwInf->XaxDnt; /*----- One line byte calculation --------------------------------------*/ switch (dizInf->PrnMod) { case PRM316: case PRM616: lvl = 4; break; case PRM604: lvl = 2; break; default: lvl = 1; break; } drwInf->LinByt = (drwInf->LinDot * lvl + 7) / 8; /*----- In a bundle development possibility line number ----------------*/ return (linBufSiz / drwInf->LinByt) * drwInf->YaxDnt / drwInf->YaxNrt; } #endif
//===================================================================================================
// Dithering procedure (For DRIVER)
//===================================================================================================
VOID WINAPI N501ColDizPrc( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf // Drawing information
) { ColDizPrcNln(dizInf, drwInf, 1); return; }
//===================================================================================================
// Static functions
//===================================================================================================
//---------------------------------------------------------------------------------------------------
// Dithering procedure (For DRIVER)
//---------------------------------------------------------------------------------------------------
static VOID ColDizPrcNln( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf, // Drawing information
DWORD linNum // Source data line number
) { DWORD lvl;
switch (dizInf->PrnMod) { #if !defined(CP80W9X) // CP-E8000 is invalid
case PRM316: case PRM616: lvl = 4; break; case PRM604: lvl = 2; break; #endif
default: lvl = 1; break; }
#if !defined(CP80W9X) // CP-E8000 is invalid
if (dizInf->ColMon == CMMCOL) { /*===== Color ======================================================*/ switch (lvl) { case 1: DizPrcC02(dizInf, drwInf, linNum); return; case 2: DizPrcC04(dizInf, drwInf, linNum); return; case 4: DizPrcC16(dizInf, drwInf, linNum); return; } } #endif
/*===== Monochrome =====================================================*/ switch (lvl) { case 1: DizPrcM02(dizInf, drwInf, linNum); return; #if !defined(CP80W9X) // CP-E8000 is invalid
case 2: DizPrcM04(dizInf, drwInf, linNum); return; case 4: DizPrcM16(dizInf, drwInf, linNum); return; #endif
} }
//---------------------------------------------------------------------------------------------------
// Dithering (color 2value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcC02( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf, // Drawing information
DWORD linNum // Source data line number
) { LPCMYK src; BYTE wrtPix; BYTE bytCyn, bytMgt, bytYel, bytBla; CMYK cmy; LPBYTE dizCyn, dizMgt, dizYel, dizBla; LPBYTE linC00, linM00, linY00, linK00; DWORD xax, yax; LPCMYK srcPtr; LONG xaxNrt, xaxDnt, yaxNrt, yaxDnt; LONG amrXax, amrYax, amrXax000; DWORD elmSiz, linByt;
DIZCOLINF dizColInf;
elmSiz = 1;
// DizInfSetCol(dizInf, drwInf, elmSiz);
DizInfSetCol(dizInf, &dizColInf, drwInf, elmSiz);
dizCyn = dizInf->TblCyn; dizMgt = dizInf->TblMgt; dizYel = dizInf->TblYel; dizBla = dizInf->TblBla;
linC00 = drwInf->LinBufCyn + drwInf->LinByt * drwInf->AllLinNum; linM00 = drwInf->LinBufMgt + drwInf->LinByt * drwInf->AllLinNum; linY00 = drwInf->LinBufYel + drwInf->LinByt * drwInf->AllLinNum; linK00 = drwInf->LinBufBla + drwInf->LinByt * drwInf->AllLinNum;
xaxNrt = drwInf->XaxNrt; xaxDnt = drwInf->XaxDnt; yaxNrt = drwInf->YaxNrt; yaxDnt = drwInf->YaxDnt;
src = drwInf->CmyBuf;
/****** Dithering main **************************************************/ if ((xaxNrt == xaxDnt) && (yaxNrt == yaxDnt)) {
/*===== Same size(Expansion/reduction no) ==========================*/ for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .................................*/ wrtPix = (BYTE)0x80; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; // dizCyn = DizCynCur;
// dizMgt = DizMgtCur;
// dizYel = DizYelCur;
// dizBla = DizBlaCur;
dizCyn = dizColInf.Cur.Cyn; dizMgt = dizColInf.Cur.Mgt; dizYel = dizColInf.Cur.Yel; dizBla = dizColInf.Cur.Bla; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ /****** Dithering *******************************************/ cmy = *src++; if (cmy.Cyn > *dizCyn++) bytCyn |= wrtPix; // Cyan
if (cmy.Mgt > *dizMgt++) bytMgt |= wrtPix; // Magenta
if (cmy.Yel > *dizYel++) bytYel |= wrtPix; // Yellow
if (cmy.Bla > *dizBla++) bytBla |= wrtPix; // Black
if (!(wrtPix >>= 1)) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } wrtPix = (BYTE)0x80; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; } // if (dizCyn == DizCynXep) dizCyn = DizCynXsp;
// if (dizMgt == DizMgtXep) dizMgt = DizMgtXsp;
// if (dizYel == DizYelXep) dizYel = DizYelXsp;
// if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizCyn == dizColInf.Xep.Cyn) dizCyn = dizColInf.Xsp.Cyn; if (dizMgt == dizColInf.Xep.Mgt) dizMgt = dizColInf.Xsp.Mgt; if (dizYel == dizColInf.Xep.Yel) dizYel = dizColInf.Xsp.Yel; if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } if (wrtPix != 0x80) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } } while (linByt) { *linC00++ = (BYTE)0x00; *linM00++ = (BYTE)0x00; *linY00++ = (BYTE)0x00; *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgCol(dizInf); // Dithering information renewal(Y)
DizInfChgCol(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->YaxOfs += 1; drwInf->StrYax += 1; drwInf->AllLinNum += 1; } return; }
/*===== Expansion/reduction ============================================*/ amrXax000 = amrXax = (LONG)(drwInf->XaxOfs) * xaxNrt % xaxDnt; amrYax = (LONG)(drwInf->YaxOfs) * yaxNrt % yaxDnt;
for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .....................................*/ srcPtr = src; for (amrYax += yaxNrt; ((amrYax >= yaxDnt) || (amrYax < 0)); amrYax -= yaxDnt) { // Magnification set for vertical
amrXax = amrXax000; wrtPix = (BYTE)0x80; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; // dizCyn = DizCynCur;
// dizMgt = DizMgtCur;
// dizYel = DizYelCur;
// dizBla = DizBlaCur;
dizCyn = dizColInf.Cur.Cyn; dizMgt = dizColInf.Cur.Mgt; dizYel = dizColInf.Cur.Yel; dizBla = dizColInf.Cur.Bla; src = srcPtr; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ cmy = *src++; for (amrXax += xaxNrt; ((amrXax >= xaxDnt) || (amrXax < 0)); amrXax -= xaxDnt) { // Magnification set for Horizontal
/****** Dithering ***************************************/ if (cmy.Cyn > *dizCyn++) bytCyn |= wrtPix; // Cyan
if (cmy.Mgt > *dizMgt++) bytMgt |= wrtPix; // Magenta
if (cmy.Yel > *dizYel++) bytYel |= wrtPix; // Yellow
if (cmy.Bla > *dizBla++) bytBla |= wrtPix; // Black
if (!(wrtPix >>= 1)) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } wrtPix = (BYTE)0x80; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; } // if (dizCyn == DizCynXep) dizCyn = DizCynXsp;
// if (dizMgt == DizMgtXep) dizMgt = DizMgtXsp;
// if (dizYel == DizYelXep) dizYel = DizYelXsp;
// if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizCyn == dizColInf.Xep.Cyn) dizCyn = dizColInf.Xsp.Cyn; if (dizMgt == dizColInf.Xep.Mgt) dizMgt = dizColInf.Xsp.Mgt; if (dizYel == dizColInf.Xep.Yel) dizYel = dizColInf.Xsp.Yel; if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } } if (wrtPix != 0x80) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } } while (linByt) { *linC00++ = (BYTE)0x00; *linM00++ = (BYTE)0x00; *linY00++ = (BYTE)0x00; *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgCol(dizInf); // Dithering information renewal(Y)
DizInfChgCol(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->StrYax += 1; drwInf->AllLinNum += 1; } drwInf->YaxOfs += 1; } return; } #endif
//---------------------------------------------------------------------------------------------------
// Dithering (color 4value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcC04( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf, // Drawing information
DWORD linNum // Source data line number
) { LPCMYK src; BYTE wrtPix004, wrtPix008, wrtPix00c; BYTE bytCyn, bytMgt, bytYel, bytBla; CMYK cmy; LPBYTE dizCyn, dizMgt, dizYel, dizBla; LPBYTE linC00, linM00, linY00, linK00; DWORD xax, yax; LPCMYK srcPtr; LONG xaxNrt, xaxDnt, yaxNrt, yaxDnt; LONG amrXax, amrYax, amrXax000; DWORD elmSiz, linByt;
DIZCOLINF dizColInf;
elmSiz = 3;
// DizInfSetCol(dizInf, drwInf, elmSiz);
DizInfSetCol(dizInf, &dizColInf, drwInf, elmSiz);
dizCyn = dizInf->TblCyn; dizMgt = dizInf->TblMgt; dizYel = dizInf->TblYel; dizBla = dizInf->TblBla;
linC00 = drwInf->LinBufCyn + drwInf->LinByt * drwInf->AllLinNum; linM00 = drwInf->LinBufMgt + drwInf->LinByt * drwInf->AllLinNum; linY00 = drwInf->LinBufYel + drwInf->LinByt * drwInf->AllLinNum; linK00 = drwInf->LinBufBla + drwInf->LinByt * drwInf->AllLinNum;
xaxNrt = drwInf->XaxNrt; xaxDnt = drwInf->XaxDnt; yaxNrt = drwInf->YaxNrt; yaxDnt = drwInf->YaxDnt;
src = drwInf->CmyBuf;
/****** Dithering main **************************************************/ if ((xaxNrt == xaxDnt) && (yaxNrt == yaxDnt)) {
/*===== Same size(Expansion/reduction no) ==========================*/ for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .................................*/ wrtPix004 = (BYTE)0x40; wrtPix008 = (BYTE)0x80; wrtPix00c = (BYTE)0xc0; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; // dizCyn = DizCynCur;
// dizMgt = DizMgtCur;
// dizYel = DizYelCur;
// dizBla = DizBlaCur;
dizCyn = dizColInf.Cur.Cyn; dizMgt = dizColInf.Cur.Mgt; dizYel = dizColInf.Cur.Yel; dizBla = dizColInf.Cur.Bla; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ /****** Dithering *******************************************/ cmy = *src++; if (cmy.Cyn > *dizCyn) { // Cyan
if (cmy.Cyn > *(dizCyn + 2)) bytCyn |= wrtPix00c; else if (cmy.Cyn > *(dizCyn + 1)) bytCyn |= wrtPix008; else bytCyn |= wrtPix004; } if (cmy.Mgt > *dizMgt) { // Magenta
if (cmy.Mgt > *(dizMgt + 2)) bytMgt |= wrtPix00c; else if (cmy.Mgt > *(dizMgt + 1)) bytMgt |= wrtPix008; else bytMgt |= wrtPix004; } if (cmy.Yel > *dizYel) { // Yellow
if (cmy.Yel > *(dizYel + 2)) bytYel |= wrtPix00c; else if (cmy.Yel > *(dizYel + 1)) bytYel |= wrtPix008; else bytYel |= wrtPix004; } if (cmy.Bla > *dizBla) { // Black
if (cmy.Bla > *(dizBla + 2)) bytBla |= wrtPix00c; else if (cmy.Bla > *(dizBla + 1)) bytBla |= wrtPix008; else bytBla |= wrtPix004; }
wrtPix00c >>= 2; wrtPix008 >>= 2; wrtPix004 >>= 2; if (!wrtPix004) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } wrtPix004 = (BYTE)0x40; wrtPix008 = (BYTE)0x80; wrtPix00c = (BYTE)0xc0; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; } dizCyn += elmSiz; dizMgt += elmSiz; dizYel += elmSiz; dizBla += elmSiz; // if (dizCyn == DizCynXep) dizCyn = DizCynXsp;
// if (dizMgt == DizMgtXep) dizMgt = DizMgtXsp;
// if (dizYel == DizYelXep) dizYel = DizYelXsp;
// if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizCyn == dizColInf.Xep.Cyn) dizCyn = dizColInf.Xsp.Cyn; if (dizMgt == dizColInf.Xep.Mgt) dizMgt = dizColInf.Xsp.Mgt; if (dizYel == dizColInf.Xep.Yel) dizYel = dizColInf.Xsp.Yel; if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } if (wrtPix004 != 0x40) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } } while (linByt) { *linC00++ = (BYTE)0x00; *linM00++ = (BYTE)0x00; *linY00++ = (BYTE)0x00; *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgCol(dizInf); // Dithering information renewal(Y)
DizInfChgCol(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->YaxOfs += 1; drwInf->StrYax += 1; drwInf->AllLinNum += 1; } return; }
/*===== Expansion/reduction ============================================*/ amrXax000 = amrXax = (LONG)(drwInf->XaxOfs) * xaxNrt % xaxDnt; amrYax = (LONG)(drwInf->YaxOfs) * yaxNrt % yaxDnt;
for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .....................................*/ srcPtr = src; for (amrYax += yaxNrt; ((amrYax >= yaxDnt) || (amrYax < 0)); amrYax -= yaxDnt) { /* Magnification set for vertical */
amrXax = amrXax000; wrtPix004 = (BYTE)0x40; wrtPix008 = (BYTE)0x80; wrtPix00c = (BYTE)0xc0; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; // dizCyn = DizCynCur;
// dizMgt = DizMgtCur;
// dizYel = DizYelCur;
// dizBla = DizBlaCur;
dizCyn = dizColInf.Cur.Cyn; dizMgt = dizColInf.Cur.Mgt; dizYel = dizColInf.Cur.Yel; dizBla = dizColInf.Cur.Bla; src = srcPtr; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ cmy = *src++; for (amrXax += xaxNrt; ((amrXax >= xaxDnt) || (amrXax < 0)); amrXax -= xaxDnt) { // Magnification set for Horizontal
/****** Dithering ***************************************/ if (cmy.Cyn > *dizCyn) { // Cyan
if (cmy.Cyn > *(dizCyn + 2)) bytCyn |= wrtPix00c; else if (cmy.Cyn > *(dizCyn + 1)) bytCyn |= wrtPix008; else bytCyn |= wrtPix004; } if (cmy.Mgt > *dizMgt) { // Magenta
if (cmy.Mgt > *(dizMgt + 2)) bytMgt |= wrtPix00c; else if (cmy.Mgt > *(dizMgt + 1)) bytMgt |= wrtPix008; else bytMgt |= wrtPix004; } if (cmy.Yel > *dizYel) { // Yellow
if (cmy.Yel > *(dizYel + 2)) bytYel |= wrtPix00c; else if (cmy.Yel > *(dizYel + 1)) bytYel |= wrtPix008; else bytYel |= wrtPix004; } if (cmy.Bla > *dizBla) { // Black
if (cmy.Bla > *(dizBla + 2)) bytBla |= wrtPix00c; else if (cmy.Bla > *(dizBla + 1)) bytBla |= wrtPix008; else bytBla |= wrtPix004; }
wrtPix00c >>= 2; wrtPix008 >>= 2; wrtPix004 >>= 2; if (!wrtPix004) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } wrtPix004 = (BYTE)0x40; wrtPix008 = (BYTE)0x80; wrtPix00c = (BYTE)0xc0; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; } dizCyn += elmSiz; dizMgt += elmSiz; dizYel += elmSiz; dizBla += elmSiz; // if (dizCyn == DizCynXep) dizCyn = DizCynXsp;
// if (dizMgt == DizMgtXep) dizMgt = DizMgtXsp;
// if (dizYel == DizYelXep) dizYel = DizYelXsp;
// if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizCyn == dizColInf.Xep.Cyn) dizCyn = dizColInf.Xsp.Cyn; if (dizMgt == dizColInf.Xep.Mgt) dizMgt = dizColInf.Xsp.Mgt; if (dizYel == dizColInf.Xep.Yel) dizYel = dizColInf.Xsp.Yel; if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } } if (wrtPix004 != 0x40) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } } while (linByt) { *linC00++ = (BYTE)0x00; *linM00++ = (BYTE)0x00; *linY00++ = (BYTE)0x00; *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgCol(dizInf); // Dithering information renewal(Y)
DizInfChgCol(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->StrYax += 1; drwInf->AllLinNum += 1; } drwInf->YaxOfs += 1; } return; } #endif
//---------------------------------------------------------------------------------------------------
// Dithering (color 16value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcC16( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf, // Drawing information
DWORD linNum // Source data line number
) { LPCMYK src; DWORD sft; BYTE min, max, mid; BYTE bytCyn, bytMgt, bytYel, bytBla; CMYK cmy; LPBYTE dizCyn, dizMgt, dizYel, dizBla; LPBYTE linC00, linM00, linY00, linK00; DWORD xax, yax; LPCMYK srcPtr; LONG xaxNrt, xaxDnt, yaxNrt, yaxDnt; LONG amrXax, amrYax, amrXax000; DWORD elmSiz, linByt;
DIZCOLINF dizColInf;
elmSiz = 15;
// DizInfSetCol(dizInf, drwInf, elmSiz);
DizInfSetCol(dizInf, &dizColInf, drwInf, elmSiz);
dizCyn = dizInf->TblCyn; dizMgt = dizInf->TblMgt; dizYel = dizInf->TblYel; dizBla = dizInf->TblBla;
linC00 = drwInf->LinBufCyn + drwInf->LinByt * drwInf->AllLinNum; linM00 = drwInf->LinBufMgt + drwInf->LinByt * drwInf->AllLinNum; linY00 = drwInf->LinBufYel + drwInf->LinByt * drwInf->AllLinNum; linK00 = drwInf->LinBufBla + drwInf->LinByt * drwInf->AllLinNum;
xaxNrt = drwInf->XaxNrt; xaxDnt = drwInf->XaxDnt; yaxNrt = drwInf->YaxNrt; yaxDnt = drwInf->YaxDnt;
src = drwInf->CmyBuf;
// Check of zero divide 2002.3.23 >>>
if ((xaxDnt == 0) || (yaxDnt == 0)) { ERR(("DizPrcC16() 0Div-Check [xaxDnt,yaxDnt=0] \n")); return; } // Check of zero divide 2002.3.23 <<<
/****** Dithering main **************************************************/ if ((xaxNrt == xaxDnt) && (yaxNrt == yaxDnt)) {
/*===== Same size(Expansion/reduction no) ==========================*/ for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .................................*/ sft = 4; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; // dizCyn = DizCynCur;
// dizMgt = DizMgtCur;
// dizYel = DizYelCur;
// dizBla = DizBlaCur;
dizCyn = dizColInf.Cur.Cyn; dizMgt = dizColInf.Cur.Mgt; dizYel = dizColInf.Cur.Yel; dizBla = dizColInf.Cur.Bla; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ /****** Dithering *******************************************/ cmy = *src++; if (cmy.Cyn > *dizCyn) { // Cyan
if (cmy.Cyn > *(dizCyn + 14)) bytCyn |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Cyn > *(dizCyn + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytCyn |= (mid + 1) << sft; } } if (cmy.Mgt > *dizMgt) { // Magenta
if (cmy.Mgt > *(dizMgt + 14)) bytMgt |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Mgt > *(dizMgt + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytMgt |= (mid + 1) << sft; } } if (cmy.Yel > *dizYel) { // Yellow
if (cmy.Yel > *(dizYel + 14)) bytYel |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Yel > *(dizYel + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytYel |= (mid + 1) << sft; } } if (cmy.Bla > *dizBla) { // Black
if (cmy.Bla > *(dizBla + 14)) bytBla |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Bla > *(dizBla + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytBla |= (mid + 1) << sft; } }
if (sft == 0) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } sft = 8; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; } sft-=4; dizCyn += elmSiz; dizMgt += elmSiz; dizYel += elmSiz; dizBla += elmSiz; // if (dizCyn == DizCynXep) dizCyn = DizCynXsp;
// if (dizMgt == DizMgtXep) dizMgt = DizMgtXsp;
// if (dizYel == DizYelXep) dizYel = DizYelXsp;
// if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizCyn == dizColInf.Xep.Cyn) dizCyn = dizColInf.Xsp.Cyn; if (dizMgt == dizColInf.Xep.Mgt) dizMgt = dizColInf.Xsp.Mgt; if (dizYel == dizColInf.Xep.Yel) dizYel = dizColInf.Xsp.Yel; if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } if (sft != 4) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } } while (linByt) { *linC00++ = (BYTE)0x00; *linM00++ = (BYTE)0x00; *linY00++ = (BYTE)0x00; *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgCol(dizInf); // Dithering information renewal(Y)
DizInfChgCol(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->YaxOfs += 1; drwInf->StrYax += 1; drwInf->AllLinNum += 1; } return; }
/*===== Expansion/reduction ============================================*/ amrXax000 = amrXax = (LONG)(drwInf->XaxOfs) * xaxNrt % xaxDnt; amrYax = (LONG)(drwInf->YaxOfs) * yaxNrt % yaxDnt;
for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .....................................*/ srcPtr = src; for (amrYax += yaxNrt; ((amrYax >= yaxDnt) || (amrYax < 0)); amrYax -= yaxDnt) { //Magnification set for vertical
amrXax = amrXax000; sft = 4; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; // dizCyn = DizCynCur;
// dizMgt = DizMgtCur;
// dizYel = DizYelCur;
// dizBla = DizBlaCur;
dizCyn = dizColInf.Cur.Cyn; dizMgt = dizColInf.Cur.Mgt; dizYel = dizColInf.Cur.Yel; dizBla = dizColInf.Cur.Bla; src = srcPtr; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ cmy = *src++; for (amrXax += xaxNrt; ((amrXax >= xaxDnt) || (amrXax < 0)); amrXax -= xaxDnt) { // Magnification set for Horizontal
/****** Dithering ***************************************/ if (cmy.Cyn > *dizCyn) { // Cyan
if (cmy.Cyn > *(dizCyn + 14)) bytCyn |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Cyn > *(dizCyn + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytCyn |= (mid + 1) << sft; } } if (cmy.Mgt > *dizMgt) { // Magenta
if (cmy.Mgt > *(dizMgt + 14)) bytMgt |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Mgt > *(dizMgt + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytMgt |= (mid + 1) << sft; } } if (cmy.Yel > *dizYel) { // Yellow
if (cmy.Yel > *(dizYel + 14)) bytYel |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Yel > *(dizYel + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytYel |= (mid + 1) << sft; } } if (cmy.Bla > *dizBla) { // Black
if (cmy.Bla > *(dizBla + 14)) bytBla |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Bla > *(dizBla + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytBla |= (mid + 1) << sft; } }
if (sft == 0) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } sft = 8; bytCyn = bytMgt = bytYel = bytBla = (BYTE)0x00; } sft-=4; dizCyn += elmSiz; dizMgt += elmSiz; dizYel += elmSiz; dizBla += elmSiz; // if (dizCyn == DizCynXep) dizCyn = DizCynXsp;
// if (dizMgt == DizMgtXep) dizMgt = DizMgtXsp;
// if (dizYel == DizYelXep) dizYel = DizYelXsp;
// if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizCyn == dizColInf.Xep.Cyn) dizCyn = dizColInf.Xsp.Cyn; if (dizMgt == dizColInf.Xep.Mgt) dizMgt = dizColInf.Xsp.Mgt; if (dizYel == dizColInf.Xep.Yel) dizYel = dizColInf.Xsp.Yel; if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } } if (sft != 4) { if (linByt) { *linC00++ = bytCyn; *linM00++ = bytMgt; *linY00++ = bytYel; *linK00++ = bytBla; linByt--; } } while (linByt) { *linC00++ = (BYTE)0x00; *linM00++ = (BYTE)0x00; *linY00++ = (BYTE)0x00; *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgCol(dizInf); // Dithering information renewal(Y)
DizInfChgCol(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->StrYax += 1; drwInf->AllLinNum += 1; } drwInf->YaxOfs += 1; } return; } #endif
//---------------------------------------------------------------------------------------------------
// Dithering (mono 2value)
//---------------------------------------------------------------------------------------------------
static VOID DizPrcM02( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf, // Drawing information
DWORD linNum // Source data line number
) { LPCMYK src; BYTE wrtPix; BYTE bytBla; CMYK cmy; LPBYTE dizBla; LPBYTE linK00; DWORD xax, yax; LPCMYK srcPtr; LONG xaxNrt, xaxDnt, yaxNrt, yaxDnt; LONG amrXax, amrYax, amrXax000; DWORD elmSiz, linByt;
DIZCOLINF dizColInf;
elmSiz = 1;
// DizInfSetMon(dizInf, drwInf, elmSiz);
DizInfSetMon(dizInf, &dizColInf, drwInf, elmSiz);
dizBla = dizInf->TblBla;
linK00 = drwInf->LinBufBla + drwInf->LinByt * drwInf->AllLinNum;
xaxNrt = drwInf->XaxNrt; xaxDnt = drwInf->XaxDnt; yaxNrt = drwInf->YaxNrt; yaxDnt = drwInf->YaxDnt;
src = drwInf->CmyBuf;
// Check of zero divide 2002.3.23 >>>
if ((xaxDnt == 0) || (yaxDnt == 0)) { ERR(("DizPrcM02() 0Div-Check [xaxDnt,yaxDnt=0] \n")); return; } // Check of zero divide 2002.3.23 <<<
/****** Dithering main **************************************************/ if ((xaxNrt == xaxDnt) && (yaxNrt == yaxDnt)) {
/*===== Same size(Expansion/reduction no) ==========================*/ for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .................................*/ wrtPix = (BYTE)0x80; bytBla = (BYTE)0x00; // dizBla = DizBlaCur;
dizBla = dizColInf.Cur.Bla; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ /****** Dithering *******************************************/ cmy = *src++; if (cmy.Bla > *dizBla++) bytBla |= wrtPix; // Black
if (!(wrtPix >>= 1)) { if (linByt) { *linK00++ = bytBla; linByt--; } wrtPix = (BYTE)0x80; bytBla = (BYTE)0x00; } // if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } if (wrtPix != 0x80) { if (linByt) { *linK00++ = bytBla; linByt--; } } while (linByt) { *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgMon(dizInf); // Dithering information renewal(Y)
DizInfChgMon(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->YaxOfs += 1; drwInf->StrYax += 1; drwInf->AllLinNum += 1; } return; }
/*===== Expansion/reduction ============================================*/ amrXax000 = amrXax = (LONG)(drwInf->XaxOfs) * xaxNrt % xaxDnt; amrYax = (LONG)(drwInf->YaxOfs) * yaxNrt % yaxDnt;
for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .....................................*/ srcPtr = src; for (amrYax += yaxNrt; ((amrYax >= yaxDnt) || (amrYax < 0)); amrYax -= yaxDnt) { // Magnification set for vertical
amrXax = amrXax000; wrtPix = (BYTE)0x80; bytBla = (BYTE)0x00; // dizBla = DizBlaCur;
dizBla = dizColInf.Cur.Bla; src = srcPtr; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ cmy = *src++; for (amrXax += xaxNrt; ((amrXax >= xaxDnt) || (amrXax < 0)); amrXax -= xaxDnt) { // Magnification set for Horizontal
/****** Dithering ***************************************/ if (cmy.Bla > *dizBla++) bytBla |= wrtPix; // Black
if (!(wrtPix >>= 1)) { if (linByt) { *linK00++ = bytBla; linByt--; } wrtPix = (BYTE)0x80; bytBla = (BYTE)0x00; } // if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } } if (wrtPix != 0x80) { if (linByt) { *linK00++ = bytBla; linByt--; } } while (linByt) { *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgMon(dizInf); // Dithering information renewal(Y)
DizInfChgMon(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->StrYax += 1; drwInf->AllLinNum += 1; } drwInf->YaxOfs += 1; } return; }
//---------------------------------------------------------------------------------------------------
// Dithering (mono 4value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcM04( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf, // Drawing information
DWORD linNum // Source data line number
) { LPCMYK src; BYTE wrtPix004, wrtPix008, wrtPix00c; BYTE bytBla; CMYK cmy; LPBYTE dizBla; LPBYTE linK00; DWORD xax, yax; LPCMYK srcPtr; LONG xaxNrt, xaxDnt, yaxNrt, yaxDnt; LONG amrXax, amrYax, amrXax000; DWORD elmSiz, linByt;
DIZCOLINF dizColInf;
elmSiz = 3;
// DizInfSetMon(dizInf, drwInf, elmSiz);
DizInfSetMon(dizInf, &dizColInf, drwInf, elmSiz);
dizBla = dizInf->TblBla;
linK00 = drwInf->LinBufBla + drwInf->LinByt * drwInf->AllLinNum;
xaxNrt = drwInf->XaxNrt; xaxDnt = drwInf->XaxDnt; yaxNrt = drwInf->YaxNrt; yaxDnt = drwInf->YaxDnt;
src = drwInf->CmyBuf;
// Check of zero divide 2002.3.23 >>>
if ((xaxDnt == 0) || (yaxDnt == 0)) { ERR(("DizPrcM04() 0Div-Check [xaxDnt,yaxDnt=0] \n")); return; } // Check of zero divide 2002.3.23 <<<
/****** Dithering main **************************************************/ if ((xaxNrt == xaxDnt) && (yaxNrt == yaxDnt)) {
/*===== Same size(Expansion/reduction no) ==========================*/ for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .................................*/ wrtPix004 = (BYTE)0x40; wrtPix008 = (BYTE)0x80; wrtPix00c = (BYTE)0xc0; bytBla = (BYTE)0x00; // dizBla = DizBlaCur;
dizBla = dizColInf.Cur.Bla; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ /****** Dithering *******************************************/ cmy = *src++; if (cmy.Bla > *dizBla) { // Black
if (cmy.Bla > *(dizBla + 2)) bytBla |= wrtPix00c; else if (cmy.Bla > *(dizBla + 1)) bytBla |= wrtPix008; else bytBla |= wrtPix004; }
wrtPix00c >>= 2; wrtPix008 >>= 2; wrtPix004 >>= 2; if (!wrtPix004) { if (linByt) { *linK00++ = bytBla; linByt--; } wrtPix004 = (BYTE)0x40; wrtPix008 = (BYTE)0x80; wrtPix00c = (BYTE)0xc0; bytBla = (BYTE)0x00; } dizBla += elmSiz; // if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } if (wrtPix004 != 0x40) { if (linByt) { *linK00++ = bytBla; linByt--; } } while (linByt) { *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgMon(dizInf); // Dithering information renewal(Y)
DizInfChgMon(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->YaxOfs += 1; drwInf->StrYax += 1; drwInf->AllLinNum += 1; } return; }
/*===== Expansion/reduction ============================================*/ amrXax000 = amrXax = (LONG)(drwInf->XaxOfs) * xaxNrt % xaxDnt; amrYax = (LONG)(drwInf->YaxOfs) * yaxNrt % yaxDnt;
for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .....................................*/ srcPtr = src; for (amrYax += yaxNrt; ((amrYax >= yaxDnt) || (amrYax < 0)); amrYax -= yaxDnt) { // Magnification set for vertical
amrXax = amrXax000; wrtPix004 = (BYTE)0x40; wrtPix008 = (BYTE)0x80; wrtPix00c = (BYTE)0xc0; bytBla = (BYTE)0x00; // dizBla = DizBlaCur;
dizBla = dizColInf.Cur.Bla; src = srcPtr; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ cmy = *src++; for (amrXax += xaxNrt; ((amrXax >= xaxDnt) || (amrXax < 0)); amrXax -= xaxDnt) { // Magnification set for Horizontal
/****** Dithering ***************************************/ if (cmy.Bla > *dizBla) { /* Black */ if (cmy.Bla > *(dizBla + 2)) bytBla |= wrtPix00c; else if (cmy.Bla > *(dizBla + 1)) bytBla |= wrtPix008; else bytBla |= wrtPix004; }
wrtPix00c >>= 2; wrtPix008 >>= 2; wrtPix004 >>= 2; if (!wrtPix004) { if (linByt) { *linK00++ = bytBla; linByt--; } wrtPix004 = (BYTE)0x40; wrtPix008 = (BYTE)0x80; wrtPix00c = (BYTE)0xc0; bytBla = (BYTE)0x00; } dizBla += elmSiz; // if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } } if (wrtPix004 != 0x40) { if (linByt) { *linK00++ = bytBla; linByt--; } } while (linByt) { *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgMon(dizInf); // Dithering information renewal(Y)
DizInfChgMon(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->StrYax += 1; drwInf->AllLinNum += 1; } drwInf->YaxOfs += 1; } return; } #endif
//---------------------------------------------------------------------------------------------------
// Dithering (mono 16value)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizPrcM16( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDRWINF drwInf, // Drawing information
DWORD linNum // Source data line number
) { LPCMYK src; DWORD sft; BYTE min, max, mid; BYTE bytBla; CMYK cmy; LPBYTE dizBla; LPBYTE linK00; DWORD xax, yax; LPCMYK srcPtr; LONG xaxNrt, xaxDnt, yaxNrt, yaxDnt; LONG amrXax, amrYax, amrXax000; DWORD elmSiz, linByt;
DIZCOLINF dizColInf;
elmSiz = 15;
// DizInfSetMon(dizInf, drwInf, elmSiz);
DizInfSetMon(dizInf, &dizColInf, drwInf, elmSiz);
dizBla = dizInf->TblBla;
linK00 = drwInf->LinBufBla + drwInf->LinByt * drwInf->AllLinNum;
xaxNrt = drwInf->XaxNrt; xaxDnt = drwInf->XaxDnt; yaxNrt = drwInf->YaxNrt; yaxDnt = drwInf->YaxDnt;
src = drwInf->CmyBuf;
// Check of zero divide 2002.3.23 >>>
if ((xaxDnt == 0) || (yaxDnt == 0)) { ERR(("DizPrcM04() 0Div-Check [xaxDnt,yaxDnt=0] \n")); return; } // Check of zero divide 2002.3.23 <<<
/****** Dithering main **************************************************/ if ((xaxNrt == xaxDnt) && (yaxNrt == yaxDnt)) {
/*===== Same size(Expansion/reduction no) ==========================*/ for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .................................*/ sft = 4; bytBla = (BYTE)0x00; // dizBla = DizBlaCur;
dizBla = dizColInf.Cur.Bla; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ /****** Dithering *******************************************/ cmy = *src++; if (cmy.Bla > *dizBla) { // Black
if (cmy.Bla > *(dizBla + 14)) bytBla |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Bla > *(dizBla + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytBla |= (mid + 1) << sft; } }
if (sft == 0) { if (linByt) { *linK00++ = bytBla; linByt--; } sft = 8; bytBla = (BYTE)0x00; } sft-=4; dizBla += elmSiz; // if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } if (sft != 4) { if (linByt) { *linK00++ = bytBla; linByt--; } } while (linByt) { *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgMon(dizInf); // Dithering information renewal(Y)
DizInfChgMon(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->StrYax += 1; drwInf->AllLinNum += 1; } return; }
/*===== Expansion/reduction ============================================*/ amrXax000 = amrXax = (LONG)(drwInf->XaxOfs) * xaxNrt % xaxDnt; amrYax = (LONG)(drwInf->YaxOfs) * yaxNrt % yaxDnt;
for (yax = 0; yax < linNum; yax++) { /*..... Vertical axis movement .....................................*/ srcPtr = src; for (amrYax += yaxNrt; ((amrYax >= yaxDnt) || (amrYax < 0)); amrYax -= yaxDnt) { // Magnification set for vertical
amrXax = amrXax000; sft = 4; bytBla = (BYTE)0x00; // dizBla = DizBlaCur;
dizBla = dizColInf.Cur.Bla; src = srcPtr; linByt = drwInf->LinByt;
for (xax = 0; xax < drwInf->XaxSiz; xax++) { /*..... Horizontal axis movement ...........................*/ cmy = *src++; for (amrXax += xaxNrt; ((amrXax >= xaxDnt) || (amrXax < 0)); amrXax -= xaxDnt) { // Magnification set for Horizontal
/****** Dithering ***************************************/ if (cmy.Bla > *dizBla) { // Black
if (cmy.Bla > *(dizBla + 14)) bytBla |= 0x0f << sft; else { min = 0; max = 13; mid = 7; while (min < max) { if (cmy.Bla > *(dizBla + mid)) min = mid; else max = mid - 1; mid = (min + max + 1) / 2; } bytBla |= (mid + 1) << sft; } }
if (sft == 0) { if (linByt) { *linK00++ = bytBla; linByt--; } sft = 8; bytBla = (BYTE)0x00; } sft-=4; dizBla += elmSiz; // if (dizBla == DizBlaXep) dizBla = DizBlaXsp;
if (dizBla == dizColInf.Xep.Bla) dizBla = dizColInf.Xsp.Bla; } } if (sft != 4) { if (linByt) { *linK00++ = bytBla; linByt--; } } while (linByt) { *linK00++ = (BYTE)0x00; linByt--; } // DizInfChgMon(dizInf); // Dithering information renewal(Y)
DizInfChgMon(dizInf, &dizColInf); // Dithering information renewal(Y)
drwInf->StrYax += 1; drwInf->AllLinNum += 1; } drwInf->YaxOfs += 1; } return; } #endif
//---------------------------------------------------------------------------------------------------
// Dithering information set (color)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizInfSetCol( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDIZCOLINF dizColInf, // Dithering information (each color)
LPDRWINF drwInf, // Drawing information
DWORD elmSiz // Threshold (per 1pixel)
) { DWORD dizSiz, dzx, dzy; LPBYTE diz;
// Check of zero divide 2002.3.23 >>>
if ((dizInf->SizCyn == 0) || (dizInf->SizMgt == 0) || (dizInf->SizYel == 0) || (dizInf->SizBla == 0)) { ERR(("DizInfSetCol() 0Div-Check [dizInf->SizCyn,SizMgt,SizYel,SizBla=0] \n")); return; } // Check of zero divide 2002.3.23 <<<
// dizSiz = dizInf->SizCyn; DizCynDYY = dizSiz * elmSiz;
dizSiz = dizInf->SizCyn; dizColInf->DYY.Cyn = dizSiz * elmSiz; dzx = ((drwInf->StrXax) % dizSiz) * elmSiz; // dzy = ((drwInf->StrYax) % dizSiz) * DizCynDYY;
dzy = ((drwInf->StrYax) % dizSiz) * dizColInf->DYY.Cyn; diz = dizInf->TblCyn; // DizCynCur = diz + dzy + dzx;
// DizCynXsp = diz + dzy; DizCynXep = DizCynXsp + DizCynDYY;
// DizCynYsp = diz + dzx; DizCynYep = DizCynYsp + dizSiz * DizCynDYY;
dizColInf->Cur.Cyn = diz + dzy + dzx; dizColInf->Xsp.Cyn = diz + dzy; dizColInf->Xep.Cyn = dizColInf->Xsp.Cyn + dizColInf->DYY.Cyn; dizColInf->Ysp.Cyn = diz + dzx; dizColInf->Yep.Cyn = dizColInf->Ysp.Cyn + dizSiz * dizColInf->DYY.Cyn;
// dizSiz = dizInf->SizMgt; DizMgtDYY = dizSiz * elmSiz;
dizSiz = dizInf->SizMgt; dizColInf->DYY.Mgt = dizSiz * elmSiz; dzx = ((drwInf->StrXax) % dizSiz) * elmSiz; // dzy = ((drwInf->StrYax) % dizSiz) * DizMgtDYY;
dzy = ((drwInf->StrYax) % dizSiz) * dizColInf->DYY.Mgt; diz = dizInf->TblMgt; // DizMgtCur = diz + dzy + dzx;
// DizMgtXsp = diz + dzy; DizMgtXep = DizMgtXsp + DizMgtDYY;
// DizMgtYsp = diz + dzx; DizMgtYep = DizMgtYsp + dizSiz * DizMgtDYY;
dizColInf->Cur.Mgt = diz + dzy + dzx; dizColInf->Xsp.Mgt = diz + dzy; dizColInf->Xep.Mgt = dizColInf->Xsp.Mgt + dizColInf->DYY.Mgt; dizColInf->Ysp.Mgt = diz + dzx; dizColInf->Yep.Mgt = dizColInf->Ysp.Mgt + dizSiz * dizColInf->DYY.Mgt;
// dizSiz = dizInf->SizYel; DizYelDYY = dizSiz * elmSiz;
dizSiz = dizInf->SizYel; dizColInf->DYY.Yel = dizSiz * elmSiz; dzx = ((drwInf->StrXax) % dizSiz) * elmSiz; // dzy = ((drwInf->StrYax) % dizSiz) * DizYelDYY;
dzy = ((drwInf->StrYax) % dizSiz) * dizColInf->DYY.Yel; diz = dizInf->TblYel; // DizYelCur = diz + dzy + dzx;
// DizYelXsp = diz + dzy; DizYelXep = DizYelXsp + DizYelDYY;
// DizYelYsp = diz + dzx; DizYelYep = DizYelYsp + dizSiz * DizYelDYY;
dizColInf->Cur.Yel = diz + dzy + dzx; dizColInf->Xsp.Yel = diz + dzy; dizColInf->Xep.Yel = dizColInf->Xsp.Yel + dizColInf->DYY.Yel; dizColInf->Ysp.Yel = diz + dzx; dizColInf->Yep.Yel = dizColInf->Ysp.Yel + dizSiz * dizColInf->DYY.Yel;
// dizSiz = dizInf->SizBla; DizBlaDYY = dizSiz * elmSiz;
dizSiz = dizInf->SizBla; dizColInf->DYY.Bla = dizSiz * elmSiz; dzx = ((drwInf->StrXax) % dizSiz) * elmSiz; // dzy = ((drwInf->StrYax) % dizSiz) * DizBlaDYY;
dzy = ((drwInf->StrYax) % dizSiz) * dizColInf->DYY.Bla; diz = dizInf->TblBla; // DizBlaCur = diz + dzy + dzx;
// DizBlaXsp = diz + dzy; DizBlaXep = DizBlaXsp + DizBlaDYY;
// DizBlaYsp = diz + dzx; DizBlaYep = DizBlaYsp + dizSiz * DizBlaDYY;
dizColInf->Cur.Bla = diz + dzy + dzx; dizColInf->Xsp.Bla = diz + dzy; dizColInf->Xep.Bla = dizColInf->Xsp.Bla + dizColInf->DYY.Bla; dizColInf->Ysp.Bla = diz + dzx; dizColInf->Yep.Bla = dizColInf->Ysp.Bla + dizSiz * dizColInf->DYY.Bla;
return; } #endif
//---------------------------------------------------------------------------------------------------
// Dithering information set (monochrome)
//---------------------------------------------------------------------------------------------------
static VOID DizInfSetMon( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDIZCOLINF dizColInf, // Dithering information (each color)
LPDRWINF drwInf, // Drawing information
DWORD elmSiz // Threshold (per 1pixel)
) { DWORD dizSiz, dzx, dzy; LPBYTE diz;
// Check of zero divide 2002.3.23 >>>
if (dizInf->SizBla == 0) { ERR(("DizInfSetMon() 0Div-Check [dizInf->SizBla=0] \n")); return; } // Check of zero divide 2002.3.23 <<<
// dizSiz = dizInf->SizBla; DizBlaDYY = dizSiz * elmSiz;
dizSiz = dizInf->SizBla; dizColInf->DYY.Bla = dizSiz * elmSiz; dzx = ((drwInf->StrXax) % dizSiz) * elmSiz; // dzy = ((drwInf->StrYax) % dizSiz) * DizBlaDYY;
dzy = ((drwInf->StrYax) % dizSiz) * dizColInf->DYY.Bla; diz = dizInf->TblBla; // DizBlaCur = diz + dzy + dzx;
// DizBlaXsp = diz + dzy; DizBlaXep = DizBlaXsp + DizBlaDYY;
// DizBlaYsp = diz + dzx; DizBlaYep = DizBlaYsp + dizSiz * DizBlaDYY;
dizColInf->Cur.Bla = diz + dzy + dzx; dizColInf->Xsp.Bla = diz + dzy; dizColInf->Xep.Bla = dizColInf->Xsp.Bla + dizColInf->DYY.Bla; dizColInf->Ysp.Bla = diz + dzx; dizColInf->Yep.Bla = dizColInf->Ysp.Bla + dizSiz * dizColInf->DYY.Bla;
return; }
//---------------------------------------------------------------------------------------------------
// Dithering information renewal (color)
//---------------------------------------------------------------------------------------------------
#if !defined(CP80W9X) // CP-E8000 is invalid
static VOID DizInfChgCol( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDIZCOLINF dizColInf // Dithering information (each color)
) { // DizCynCur += DizCynDYY; DizCynXsp += DizCynDYY; DizCynXep += DizCynDYY;
dizColInf->Cur.Cyn += dizColInf->DYY.Cyn; dizColInf->Xsp.Cyn += dizColInf->DYY.Cyn; dizColInf->Xep.Cyn += dizColInf->DYY.Cyn; // DizMgtCur += DizMgtDYY; DizMgtXsp += DizMgtDYY; DizMgtXep += DizMgtDYY;
dizColInf->Cur.Mgt += dizColInf->DYY.Mgt; dizColInf->Xsp.Mgt += dizColInf->DYY.Mgt; dizColInf->Xep.Mgt += dizColInf->DYY.Mgt; // DizYelCur += DizYelDYY; DizYelXsp += DizYelDYY; DizYelXep += DizYelDYY;
dizColInf->Cur.Yel += dizColInf->DYY.Yel; dizColInf->Xsp.Yel += dizColInf->DYY.Yel; dizColInf->Xep.Yel += dizColInf->DYY.Yel; // DizBlaCur += DizBlaDYY; DizBlaXsp += DizBlaDYY; DizBlaXep += DizBlaDYY;
dizColInf->Cur.Bla += dizColInf->DYY.Bla; dizColInf->Xsp.Bla += dizColInf->DYY.Bla; dizColInf->Xep.Bla += dizColInf->DYY.Bla;
// if (DizCynCur == DizCynYep) {
// DizCynXsp = dizInf->TblCyn;
// DizCynXep = DizCynXsp + DizCynDYY;
// DizCynCur = DizCynYsp;
// }
if (dizColInf->Cur.Cyn == dizColInf->Yep.Cyn) { dizColInf->Xsp.Cyn = dizInf->TblCyn; dizColInf->Xep.Cyn = dizColInf->Xsp.Cyn + dizColInf->DYY.Cyn; dizColInf->Cur.Cyn = dizColInf->Ysp.Cyn; } // if (DizMgtCur == DizMgtYep) {
// DizMgtXsp = dizInf->TblMgt;
// DizMgtXep = DizMgtXsp + DizMgtDYY;
// DizMgtCur = DizMgtYsp;
// }
if (dizColInf->Cur.Mgt == dizColInf->Yep.Mgt) { dizColInf->Xsp.Mgt = dizInf->TblMgt; dizColInf->Xep.Mgt = dizColInf->Xsp.Mgt + dizColInf->DYY.Mgt; dizColInf->Cur.Mgt = dizColInf->Ysp.Mgt; } // if (DizYelCur == DizYelYep) {
// DizYelXsp = dizInf->TblYel;
// DizYelXep = DizYelXsp + DizYelDYY;
// DizYelCur = DizYelYsp;
// }
if (dizColInf->Cur.Yel == dizColInf->Yep.Yel) { dizColInf->Xsp.Yel = dizInf->TblYel; dizColInf->Xep.Yel = dizColInf->Xsp.Yel + dizColInf->DYY.Yel; dizColInf->Cur.Yel = dizColInf->Ysp.Yel; } // if (DizBlaCur == DizBlaYep) {
// DizBlaXsp = dizInf->TblBla;
// DizBlaXep = DizBlaXsp + DizBlaDYY;
// DizBlaCur = DizBlaYsp;
// }
if (dizColInf->Cur.Bla == dizColInf->Yep.Bla) { dizColInf->Xsp.Bla = dizInf->TblBla; dizColInf->Xep.Bla = dizColInf->Xsp.Bla + dizColInf->DYY.Bla; dizColInf->Cur.Bla = dizColInf->Ysp.Bla; }
return; } #endif
//---------------------------------------------------------------------------------------------------
// Dithering information renewal (monochrome)
//---------------------------------------------------------------------------------------------------
static VOID DizInfChgMon( // Return value no
LPDIZINF dizInf, // Fixation dithering information
LPDIZCOLINF dizColInf // Dithering information (each color)
) { // DizBlaCur += DizBlaDYY; DizBlaXsp += DizBlaDYY; DizBlaXep += DizBlaDYY;
dizColInf->Cur.Bla += dizColInf->DYY.Bla; dizColInf->Xsp.Bla += dizColInf->DYY.Bla; dizColInf->Xep.Bla += dizColInf->DYY.Bla;
// if (DizBlaCur == DizBlaYep) {
// DizBlaXsp = dizInf->TblBla;
// DizBlaXep = DizBlaXsp + DizBlaDYY;
// DizBlaCur = DizBlaYsp;
// }
if (dizColInf->Cur.Bla == dizColInf->Yep.Bla) { dizColInf->Xsp.Bla = dizInf->TblBla; dizColInf->Xep.Bla = dizColInf->Xsp.Bla + dizColInf->DYY.Bla; dizColInf->Cur.Bla = dizColInf->Ysp.Bla; }
return; }
// End of N5DIZPC.C
|