Hi. I am implementing a bitmap printer driver using oemuni sample in
NTDDK.
My problem is...
When I print a document, some(it could be one or more) garbage bitmaps
are generated in ImageProcessing. I just dumped the pSrcBitmap data to
a bitmap file in ImageProcessing. I think I can get a printed bitmap
image by merging all band images. But there is a problem in my driver.
As I mensioned above there are some garbage band images.
For example... During one page is printed through my driver, the page
devided into 5 bands and I saved each band. When I checked the saved
iamges after printing is finished the last image is a garbage image.
It has any portion of the document. But the portion has already been
included in previous band image. So to get a perfect bitmap I should
merge the first four images in this case. But I think there is no way
to find out what image is garbage.
I think the number of bands is sensitive to or dependent on the GPD.
But I don't know where should I change to solve this problem. If there
is no garbage image every printing job, all I have to do to get an
image is to merge all band images.
Anyone has good idea to solve my problem?
Thanks in advance.
/// below is my GPD snippet ///
*Feature: Orientation
{
*rcNameID: =ORIENTATION_DISPLAY
*DefaultOption: PORTRAIT
*Option: PORTRAIT
{
*rcNameID: =PORTRAIT_DISPLAY
*Command: CmdSelect
{
*Order: DOC_SETUP.6
*Cmd: "<1B>&l0O"
}
}
*Option: LANDSCAPE_CC90
{
*rcNameID: =LANDSCAPE_DISPLAY
*Command: CmdSelect
{
*Order: DOC_SETUP.6
*Cmd: "<1B>&l1O"
}
}
}
*Feature: InputBin
{
*rcNameID: =PAPER_SOURCE_DISPLAY
*DefaultOption: MANUAL
*Option: MANUAL
{
*rcNameID: =MANUAL_FEED_DISPLAY
*Command: CmdSelect
{
*Order: DOC_SETUP.9
*Cmd: "<1B>&l2H"
}
}
}
*Feature: PaperSize
{
*rcNameID: =PAPER_SIZE_DISPLAY
*DefaultOption: LETTER
*Option: LETTER
{
*rcNameID: =RCID_DMPAPER_SYSTEM_NAME
*PageProtectMem: 4109
*switch: Orientation
{
*case: PORTRAIT
{
*PrintableArea: PAIR(9592, 12648)
*PrintableOrigin: PAIR(300, 300)
*CursorOrigin: PAIR(300, 180)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l2a8c1E<1B>*p0x0Y<1B>*c0t5760x7704Y"
}
}
*case: LANDSCAPE_CC90
{
*switch: Resolution
{
*case: Option1
{
*PrintableArea: PAIR(9754, 12710)
*PrintableOrigin: PAIR(200, 250)
}
*case: Option2
{
*PrintableArea: PAIR(9752, 12708)
*PrintableOrigin: PAIR(200, 252)
}
}
*CursorOrigin: PAIR(200, 12960)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l2a8c1E<1B>*p0x0Y<1B>*c0t7632x5880Y"
}
}
}
}
*Option: LEGAL
{
*rcNameID: =RCID_DMPAPER_SYSTEM_NAME
*PageProtectMem: 5230
*switch: Orientation
{
*case: PORTRAIT
{
*PrintableArea: PAIR(9592, 16248)
*PrintableOrigin: PAIR(300, 300)
*CursorOrigin: PAIR(300, 180)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l3a8c1E<1B>*p0x0Y<1B>*c0t5760x9864Y"
}
}
*case: LANDSCAPE_CC90
{
*switch: Resolution
{
*case: Option1
{
*PrintableArea: PAIR(9754, 16310)
*PrintableOrigin: PAIR(200, 250)
}
*case: Option2
{
*PrintableArea: PAIR(9752, 16308)
*PrintableOrigin: PAIR(200, 252)
}
}
*CursorOrigin: PAIR(200, 16560)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l3a8c1E<1B>*p0x0Y<1B>*c0t9792x5880Y"
}
}
}
}
*Option: A3
{
*rcNameID: =RCID_DMPAPER_SYSTEM_NAME
*switch: Orientation
{
*case: PORTRAIT
{
*PrintableArea: PAIR(13428, 19308)
*PrintableOrigin: PAIR(300, 300)
*switch: Resolution
{
*case: Option2
{
*PrintableArea: PAIR(13424, 19304)
*PrintableOrigin: PAIR(304, 304)
}
}
*CursorOrigin: PAIR(300, 180)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l27a8c1E<1B>*p0x0Y<1B>*c0t8057x11693Y"
}
}
*case: LANDSCAPE_CC90
{
*PrintableArea: PAIR(13588, 19368)
*PrintableOrigin: PAIR(200, 240)
*switch: Resolution
{
*case: Option2
{
*PrintableArea: PAIR(13584, 19368)
}
}
*CursorOrigin: PAIR(200, 19608)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l27a8c1E<1B>*p0x0Y<1B>*c0t11621x8177Y"
}
}
}
}
*Option: A4
{
*rcNameID: =RCID_DMPAPER_SYSTEM_NAME
*PageProtectMem: 4249
*switch: Orientation
{
*case: PORTRAIT
{
*PrintableArea: PAIR(9352, 13400)
*PrintableOrigin: PAIR(260, 300)
*CursorOrigin: PAIR(260, 160)
*switch: Resolution
{
*case: Option2
{
*PrintableArea: PAIR(9352, 13400)
}
}
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l26a8c1E<1B>*p0x0Y<1B>*c0t5594x8201Y"
}
}
*case: LANDSCAPE_CC90
{
*PrintableArea: PAIR(9424, 13428)
*PrintableOrigin: PAIR(200, 300)
*CursorOrigin: PAIR(200, 13728)
*switch: Resolution
{
*case: Option2
{
*PrintableArea: PAIR(9424, 13428)
*PrintableOrigin: PAIR(200, 300)
}
}
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd:
"<1B>&l26a8c1e-500Z<1B>*p0x0Y<1B>*c0t8129x5714Y"
}
}
}
}
*Option: ENV_10
{
*rcNameID: =RCID_DMPAPER_SYSTEM_NAME
*PageProtectMem: 4109
*switch: Orientation
{
*case: PORTRAIT
{
*PrintableArea: PAIR(4356, 10200)
*PrintableOrigin: PAIR(300, 300)
*CursorOrigin: PAIR(300, 160)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd:
"<1B>&l81a8c1e230Z<1B>*p0x0Y<1B>*c0t2614x6648Y"
}
}
*case: LANDSCAPE_CC90
{
*PrintableArea: PAIR(4356, 10200)
*PrintableOrigin: PAIR(300, 300)
*CursorOrigin: PAIR(200, 11100)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd:
"<1B>&l81a8c1e-220Z<1B>*p0x0Y<1B>*c0t6480x2734Y"
}
}
}
}
*Option: ENV_DL
{
*rcNameID: =RCID_DMPAPER_SYSTEM_NAME
*PageProtectMem: 4109
*switch: Orientation
{
*case: PORTRAIT
{
*PrintableArea: PAIR(4596, 9192)
*PrintableOrigin: PAIR(300, 300)
*CursorOrigin: PAIR(300, 160)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd:
"<1B>&l90a8c1e230Z<1B>*p0x0Y<1B>*c0t2758x6043Y"
}
}
*case: LANDSCAPE_CC90
{
*PrintableArea: PAIR(4596, 9192)
*PrintableOrigin: PAIR(300, 300)
*CursorOrigin: PAIR(200, 10092)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd:
"<1B>&l90a8c1e-220Z<1B>*p0x0Y<1B>*c0t5875x2878Y"
}
}
}
}
*Option: ENV_C5
{
*rcNameID: =RCID_DMPAPER_SYSTEM_NAME
*PageProtectMem: 4109
*switch: Orientation
{
*case: PORTRAIT
{
*PrintableArea: PAIR(7056, 9624)
*PrintableOrigin: PAIR(300, 300)
*CursorOrigin: PAIR(300, 200)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd:
"<1B>&l91a8c1e230Z<1B>*p0x0Y<1B>*c0t4234x6254Y"
}
}
*case: LANDSCAPE_CC90
{
*PrintableArea: PAIR(7056, 9624)
*PrintableOrigin: PAIR(300, 300)
*CursorOrigin: PAIR(200, 10524)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd:
"<1B>&l91a8c1e-220Z<1B>*p0x0Y<1B>*c0t6134x4354Y"
}
}
}
}
*Option: TABLOID
{
*rcNameID: =RCID_DMPAPER_SYSTEM_NAME
*switch: Orientation
{
*case: PORTRAIT
{
*PrintableArea: PAIR(12600, 19800)
*PrintableOrigin: PAIR(300, 220)
*switch: Resolution
{
*case: Option2
{
*PrintableArea: PAIR(12592, 19792)
*PrintableOrigin: PAIR(304, 220)
}
}
*CursorOrigin: PAIR(300, 200)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l6a8c1E<1B>*p0x0Y<1B>*c0t7560x12000Y"
}
}
*case: LANDSCAPE_CC90
{
*PrintableArea: PAIR(12600, 19800)
*PrintableOrigin: PAIR(300, 220)
*switch: Resolution
{
*case: Option2
{
*PrintableArea: PAIR(12592, 19792)
*PrintableOrigin: PAIR(304, 220)
}
}
*CursorOrigin: PAIR(200, 20100)
*Command: CmdSelect
{
*Order: DOC_SETUP.10
*Cmd: "<1B>&l6a8c1E<1B>*p0x0Y<1B>*c0t11880x7680Y"
}
}
}
}
*Option: CUSTOMSIZE
{
*rcNameID: =USER_DEFINED_SIZE_DISPLAY
*MinSize: PAIR(4680, 9000)
*MaxSize: PAIR(14040, 32767)
*MaxPrintableWidth: 14040
*MinLeftMargin: 100
*CenterPrintable?: FALSE
*PageProtectMem: 1692
*switch: Orientation
{
*case: PORTRAIT
{
*Command: CmdSelect
{
*Order: DOC_SETUP.12
*Cmd: "<1B>&l101a4d1e" %d{((PhysPaperWidth -
14040) / 20) }"u" %d{(PhysPaperLength / 300) - 1}
+ "F<1B>*p0x0Y<1B>*p0x0Y<1B>*c0t" %d{(((PhysPaperWidth - 598) * 6) /
10) }"x" %d{(((PhysPaperLength - 440) * 6) / 10) }
+ "Y"
}
}
*case: LANDSCAPE_CC90
{
*Command: CmdSelect
{
*Order: DOC_SETUP.12
*Cmd: "<1B>&l101a4d1e" %d{(PhysPaperLength / 300)
- 1}"f" %d{((PhysPaperWidth - 14040) / 20) + 10}
+ "u" %d{(((PhysPaperLength - 21240) * 6) / 10) +
10}"Z<1B>*p0x0Y<1B>*c0t" %d{(((PhysPaperLength - 600) * 6) / 10) }
+ "x" %d{(((PhysPaperWidth - 600) * 6) / 10) }"Y"
}
}
}
}
}
*Feature: Resolution
{
*rcNameID: =RESOLUTION_DISPLAY
*DefaultOption: Option2
*Option: Option1
{
*Name: "600 x 600 " =DOTS_PER_INCH
*DPI: PAIR(600, 600)
*TextDPI: PAIR(600, 600)
*MinStripBlankPixels: 32
*SpotDiameter: 100
*Command: CmdBeginRaster { *Cmd : "<1B>*r1A" }
*Command: CmdEndRaster { *Cmd : "<1B>*rB" }
*Command: CmdSelect
{
*Order: DOC_SETUP.4
*Cmd: "@PJL SET RESOLUTION=600<0A>@PJL ENTER
LANGUAGE=PCL<0A0D1B>E<1B>*t600R"
}
}
*Option: Option2
{
*Name: "300 x 300 " =DOTS_PER_INCH
*DPI: PAIR(300, 300)
*TextDPI: PAIR(300, 300)
*MinStripBlankPixels: 32
*SpotDiameter: 140
*Command: CmdBeginRaster { *Cmd : "<1B>*v7S<1B>*r1A" }
*Command: CmdEndRaster { *Cmd : "<1B>*rC" }
*Command: CmdSelect
{
*Order: DOC_SETUP.4
*Cmd: "@PJL SET RESOLUTION=300<0A>@PJL ENTER
LANGUAGE=PCL<0A0D1B>E<1B>*t300R"
}
}
*Option: Option3
{
*Name: "200 x 200 " =DOTS_PER_INCH
*DPI: PAIR(200, 200)
*TextDPI: PAIR(200, 200)
*MinStripBlankPixels: 32
*SpotDiameter: 100
*Command: CmdBeginRaster { *Cmd : "<1B>*v7S<1B>*r1A" }
*Command: CmdEndRaster { *Cmd : "<1B>*rC" }
*Command: CmdSelect
{
*Order: DOC_SETUP.4
*Cmd: "@PJL SET RESOLUTION=200<0A>@PJL ENTER
LANGUAGE=PCL<0A0D1B>E<1B>*t200R"
}
}
*Option: Option4
{
*Name: "100 x 100 " =DOTS_PER_INCH
*DPI: PAIR(100, 100)
*TextDPI: PAIR(100, 100)
*MinStripBlankPixels: 32
*SpotDiameter: 100
*Command: CmdBeginRaster { *Cmd : "<1B>*v7S<1B>*r1A" }
*Command: CmdEndRaster { *Cmd : "<1B>*rC" }
*Command: CmdSelect
{
*Order: DOC_SETUP.4
*Cmd: "@PJL SET RESOLUTION=100<0A>@PJL ENTER
LANGUAGE=PCL<0A0D1B>E<1B>*t100R"
}
}
}
*Feature: ColorMode
{
*rcNameID: =COLOR_PRINTING_MODE_DISPLAY
*DefaultOption: Mono
*Option: Mono
{
*rcNameID: =MONO_DISPLAY
*DevNumOfPlanes: 0
*DevBPP: 0
*DrvBPP:1
*Color? : FALSE
*ColorPlaneOrder: LIST(YELLOW, MAGENTA, CYAN, BLACK)
*RasterMode: DIRECT
*IPCallbackID: =COLOR_IPID
*Command: CmdSelect
{
*Order: DOC_SETUP.90
*CallbackID: =SET_COLORMODE
}
}
*Option: Color
{
*rcNameID: =24BPP_DISPLAY
*DevNumOfPlanes: 0
*DevBPP: 0
*DrvBPP:24
*Color? : TRUE
*ColorPlaneOrder: LIST(YELLOW, MAGENTA, CYAN, BLACK)
*RasterMode: DIRECT
*IPCallbackID: =COLOR_IPID
*Command: CmdSelect
{
*Order: DOC_SETUP.90
*CallbackID: =SET_COLORMODE
}
}
}
*Command: CmdStartDoc
{
*Order: DOC_SETUP.5
*Cmd: "<1B>&u600D<1B>*r0F"
}
*Command: CmdStartPage
{
*Order: PAGE_SETUP.1
*Cmd: "<1B>*b0M<0D>"
}
*Command: CmdEndJob
{
*Order: JOB_FINISH.1
*Cmd: "<1B>E<1B>%%-12345X"
}
*RotateCoordinate?: TRUE
*RotateRaster?: TRUE
*RotateFont?: TRUE
*TextCaps: LIST(TC_CR_90,TC_UA_ABLE)
*CursorXAfterCR: AT_PRINTABLE_X_ORIGIN
*BadCursorMoveInGrxMode: LIST(X_PORTRAIT,Y_LANDSCAPE)
*XMoveThreshold: 0
*YMoveThreshold: 0
*XMoveUnit: 600
*YMoveUnit: 600
*Command: CmdXMoveAbsolute { *Cmd : "<1B>*p" %d{(DestX / 2) }"X" }
*Command: CmdXMoveRelRight { *Cmd : "<1B>*p+"
%d[0,9600]{max_repeat((DestXRel / 2) )}"X" }
*Command: CmdXMoveRelLeft { *Cmd : "<1B>*p-"
%d[0,9600]{max_repeat((DestXRel / 2) )}"X" }
*Command: CmdYMoveAbsolute { *Cmd : "<1B>*p" %d{(DestY / 2) }"Y" }
*Command: CmdYMoveRelDown { *Cmd : "<1B>*p+" %d{(DestYRel / 2) }"Y" }
*Command: CmdYMoveRelUp { *Cmd : "<1B>*p-" %d{(DestYRel / 2) }"Y" }
*Command: CmdCR { *Cmd : "<0D>" }
*Command: CmdLF { *Cmd : "<0A>" }
*Command: CmdFF { *Cmd : "<0C>" }
*Command: CmdBackSpace { *Cmd : "<08>" }
*Command: CmdUniDirectionOn { *Cmd : "<00>" }
*Command: CmdUniDirectionOff { *Cmd : "<00>" }
*Command: CmdPushCursor { *Cmd : "<1B>&f0S" }
*Command: CmdPopCursor { *Cmd : "<1B>&f1S" }
*Command: CmdSetSimpleRotation { *Cmd : "<1B>&a"
%d{PrintDirInCCDegrees}"P" }
*EjectPageWithFF?: TRUE
*Command: CmdSelectBlackColor { *Cmd : "<1B>*v7S" }
*Command: CmdSelectRedColor { *Cmd : "<1B>*v6S" }
*Command: CmdSelectGreenColor { *Cmd : "<1B>*v5S" }
*Command: CmdSelectYellowColor { *Cmd : "<1B>*v4S" }
*Command: CmdSelectBlueColor { *Cmd : "<1B>*v3S" }
*Command: CmdSelectMagentaColor { *Cmd : "<1B>*v2S" }
*Command: CmdSelectCyanColor { *Cmd : "<1B>*v1S" }
*Command: CmdSelectWhiteColor { *Cmd : "<1B>*v0S" }
*Command: CmdDefinePaletteEntry { *Cmd : "<1B>*v" %d{RedValue}"a"
%d{GreenValue}"b" %d{BlueValue}"c" %d{PaletteIndexToProgram}
+ "I" }
*Command: CmdSelectPaletteEntry { *Cmd : "<1B>*v"
%d{CurrentPaletteIndex}"S" }
*Command: CmdEnableTIFF4 { *Cmd : "<1B>*b2M" }
*Command: CmdDisableCompression { *Cmd : "<1B>*b0M" }
*Command: CmdEnableDRC { *Cmd : "<1B>*b3M" }
*OutputDataFormat: H_BYTE
*%*OptimizeLeftBound?: TRUE
*%*StripBlanks: LIST(ENCLOSED,TRAILING)
*Command: CmdSendBlockData { *Cmd : "<1B>*b" %d{NumOfDataBytes}"W" }
*CursorXAfterSendBlockData: AT_GRXDATA_ORIGIN
*CursorYAfterSendBlockData: AUTO_INCREMENT
*RasterSendAllData? : TRUE
*DefaultFont: 136
*DefaultCTT: 0
*CharPosition: BASELINE
*TTFSEnabled?: TRUE
*MinFontID: 16534
*MaxFontID: 32768
*FontFormat: HPPCL_OUTLINE
*Command: CmdSetFontID { *Cmd : "<1B>*c" %d{NextFontID}"D" }
*Command: CmdSelectFontID { *Cmd : "<1B>(" %d{CurrentFontID}"X" }
*Command: CmdSetCharCode { *Cmd : "<1B>*c" %d{NextGlyph}"E" }
*Command: CmdUnderlineOn { *Cmd : "<1B>&dD" }
*Command: CmdUnderlineOff { *Cmd : "<1B>&d@" }
*Command: CmdWhiteTextOn { *Cmd : "<1B>*v1o1T" }
*Command: CmdWhiteTextOff { *Cmd : "<1B>*v0o0T" }
*MinGrayFill: 1
*MaxGrayFill: 100
*Command: CmdSetRectWidth { *Cmd : "<1B>*c" %d{(RectXSize / 2) }"A" }
*Command: CmdSetRectHeight { *Cmd : "<1B>*c" %d{(RectYSize / 2) }"B" }
*Command: CmdRectGrayFill { *Cmd : "<1B>*c" %d{GrayPercentage }"g2P" }
*Command: CmdRectWhiteFill { *Cmd : "<1B>*c1P" }
*Command: CmdRectBlackFill { *Cmd : "<1B>*c0P" }