示例#1
0
        //--------------------------------------------------------------------//
        //                                                        M e t h o d //
        // g e n e r a t e P a g e                                            //
        //--------------------------------------------------------------------//
        //                                                                    //
        // Write individual test data page sequences to output file.          //
        //                                                                    //
        //--------------------------------------------------------------------//

        private static void generatePage(BinaryWriter prnWriter,
                                         Int32 indxPaperSize,
                                         Int32 indxPaperType,
                                         Int32 indxOrientation,
                                         Boolean formAsMacro,
                                         UInt16 logXOffset)
        {
            Int16 posX,
                  posY,
                  rectX,
                  rectY,
                  rectHeight,
                  rectWidth;

            //----------------------------------------------------------------//

            if (formAsMacro)
            {
                PCLWriter.macroControl(prnWriter, _macroId,
                                       PCLWriter.eMacroControl.Call);
            }
            else
            {
                generateOverlay(prnWriter, false, logXOffset,
                                indxPaperSize, indxOrientation);
            }

            rectHeight = (Int16)(_lineInc / 2);
            rectWidth  = _lineInc;

            //----------------------------------------------------------------//
            //                                                                //
            // Set pattern transparency to Opaque so that white samples show  //
            // on the shaded background.                                      //
            //                                                                //
            //----------------------------------------------------------------//

            PCLWriter.patternTransparency(prnWriter,
                                          true);

            //----------------------------------------------------------------//
            //                                                                //
            // Monochrome palette.                                            //
            //                                                                //
            //----------------------------------------------------------------//

            PCLWriter.paletteSimple(prnWriter,
                                    PCLWriter.eSimplePalette.K);

            posX = (Int16)(_posXData - logXOffset);
            posY = _posYData;

            rectX = posX;
            rectY = posY;

            PCLWriter.setForegroundColour(prnWriter, 0);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 1);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            //----------------------------------------------------------------//
            //                                                                //
            // RGB palette.                                                   //
            //                                                                //
            //----------------------------------------------------------------//

            PCLWriter.paletteSimple(prnWriter,
                                    PCLWriter.eSimplePalette.RGB);

            posX += _colInc;

            rectX = posX;
            rectY = posY;

            PCLWriter.setForegroundColour(prnWriter, 0);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 1);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 2);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 3);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 4);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 5);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 6);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 7);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            //----------------------------------------------------------------//
            //                                                                //
            // CMY palette.                                                   //
            //                                                                //
            //----------------------------------------------------------------//

            PCLWriter.paletteSimple(prnWriter,
                                    PCLWriter.eSimplePalette.CMY);

            posX += _colInc;

            rectX = posX;
            rectY = posY;

            PCLWriter.setForegroundColour(prnWriter, 0);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, true,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 1);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 2);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 3);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 4);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 5);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 6);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            rectY += _lineInc;

            PCLWriter.setForegroundColour(prnWriter, 7);

            PCLWriter.rectangleSolid(prnWriter, rectX, rectY,
                                     rectHeight, rectWidth, false,
                                     false, false);

            //----------------------------------------------------------------//

            PCLWriter.formFeed(prnWriter);
        }
        //--------------------------------------------------------------------//
        //                                                        M e t h o d //
        // g e n e r a t e I m a g e H e a d e r                              //
        //--------------------------------------------------------------------//
        //                                                                    //
        // Write image initialisation sequences to output file.               //
        //                                                                    //
        //--------------------------------------------------------------------//

        private static void generateImageHeader(BinaryWriter prnWriter,
                                                UInt16 srcBitsPerPixel,
                                                Int32 srcWidth,
                                                Int32 srcHeight,
                                                Int32 srcResX,
                                                Int32 srcResY,
                                                Single destPosX,
                                                Single destPosY,
                                                Int32 destScalePercentX,
                                                Int32 destScalePercentY,
                                                Int32 rasterResolution,
                                                UInt32 srcPaletteEntries,
                                                Boolean srcBlackWhite)
        {
            Int16 coordX,
                  coordY;

            UInt32 paletteEntries = 0;

            Byte bitsPerIndex = 0x00;

            Boolean indexed = true;

            //----------------------------------------------------------------//
            //                                                                //
            // Set position.                                                  //
            //                                                                //
            //----------------------------------------------------------------//

            coordX = (Int16)(destPosX * 600);
            coordY = (Int16)(destPosY * 600);

            PCLWriter.palettePushPop(prnWriter, PCLWriter.ePushPop.Push);

            PCLWriter.cursorPosition(prnWriter, coordX, coordY);

            //----------------------------------------------------------------//
            //                                                                //
            // Set colour space, etc.                                         //
            //                                                                //
            // Note that we only support the following bitmap types:          //
            //                                                                //
            //   -  1-bit black and white:                                    //
            //      Colour space: Gray (1 plane)                              //
            //      Encoding:     indirect-pixel                              //
            //      Palette:      elements = 2 (= 2^1)                        //
            //                    planes   = 1                                //
            //                    length   = 2 (= 2 * 1) bytes.               //
            //      Image data:   Each image pixel is defined by 1 bit        //
            //                    which is used an an index into the          //
            //                    2-element palette.                          //
            //                                                                //
            //   -  1-bit colour                                              //
            //      Colour space: RGB (3 plane)                               //
            //      Encoding:     indirect-pixel                              //
            //      Palette:      elements = 2 (= 2^1)                        //
            //                    planes   = 3                                //
            //                    length   = 6 (= 2 * 3) bytes.               //
            //      Image data:   Each image pixel is defined by 1 bit        //
            //                    which is used an an index into the          //
            //                    2-element palette.                          //
            //                                                                //
            //   -  4-bit:                                                    //
            //      Colour space: RGB (3-plane)                               //
            //      Encoding:     indirect-pixel                              //
            //      Palette:      elements = 16 (= 2^4)                       //
            //                    planes   = 3                                //
            //                    length   = 48 (= 16 * 3) bytes.             //
            //      Image data:   Each group of 4 bits defines an image       //
            //                    pixel by use as an index into the           //
            //                    16-element palette.                         //
            //                                                                //
            //   -  24-bit:                                                   //
            //      Colour space: RGB (3-plane)                               //
            //      Encoding:     direct-pixel                                //
            //      Palette:      none                                        //
            //      Image data:   Each group of 24 bits defines an image      //
            //                    pixel as three 8-bit values, directly       //
            //                    specifying the RGB values.                  //
            //                                                                //
            //----------------------------------------------------------------//

            if (srcBlackWhite)
            {
                indexed        = true;
                bitsPerIndex   = 0x01;
                paletteEntries = 0;
            }
            else if (srcBitsPerPixel == 1)
            {
                indexed      = true;
                bitsPerIndex = 0x01;
                //  paletteEntries = 0x00000001 << 1;
                paletteEntries = srcPaletteEntries;
            }
            else if (srcBitsPerPixel == 4)
            {
                indexed      = true;
                bitsPerIndex = 0x04;
                //  paletteEntries = 0x00000001 << 4;
                paletteEntries = srcPaletteEntries;
            }
            else if (srcBitsPerPixel == 24)
            {
                indexed        = false;
                bitsPerIndex   = 0x00;
                paletteEntries = 0;
            }

            if (srcBlackWhite)
            {
                PCLWriter.paletteSimple(prnWriter, PCLWriter.eSimplePalette.K);
            }
            else
            {
                if (indexed)
                {
                    PCLWriter.configureImageData(prnWriter,
                                                 0x02,  // ColourSpace = sRGB
                                                 0x01,  // PEM = Indexed by Pixel
                                                 bitsPerIndex,
                                                 0x00,  // Not used
                                                 0x00,  // Bits per component
                                                 0x00); // Bits per component
                }
                else
                {
                    PCLWriter.configureImageData(prnWriter,
                                                 0x02,  // ColourSpace = sRGB
                                                 0x03,  // PEM = Direct by Pixel
                                                 0x00,  // Not used
                                                 0x08,  // Bits per component
                                                 0x08,  // Bits per component
                                                 0x08); // Bits per component
                }

                if (paletteEntries != 0)
                {
                    Byte red   = 0x00,
                         green = 0x00,
                         blue  = 0x00;

                    for (Int16 i = 0; i < paletteEntries; i++)
                    {
                        ToolImageBitmapCore.getBmpPaletteEntry(i,
                                                               ref red,
                                                               ref green,
                                                               ref blue);

                        PCLWriter.paletteEntry(prnWriter, i, red, green, blue);
                    }
                }
            }


            //----------------------------------------------------------------//
            //                                                                //
            // Generate raster definition and start sequences.                //
            //                                                                //
            //----------------------------------------------------------------//

            PCLWriter.rasterResolution(prnWriter,
                                       rasterResolution,
                                       true);

            PCLWriter.rasterBegin(prnWriter,
                                  srcWidth,
                                  srcHeight,
                                  srcResX,
                                  srcResY,
                                  destScalePercentX,
                                  destScalePercentY,
                                  0);
        }