http://hi.baidu.com/zmstone/blog/item/6333c21fede38df6e1fe0bc8.html
HRESULT __stdcall IOemUni::FilterGraphics(
PDEVOBJ pdevobj,PBYTE pBuf,
DWORD dwLen)
{
DWORD dwResult;
HRESULT ret = S_OK;
VERBOSE(DLLTEXT("IOemUni::FilterGraphis() entry.\r\n"));
#define M 424
static BYTE ras[M] = {0}, N = 0;
static BYTE bgn[] = {0x1B, 0x4A, 0x10, 0x1B, 0x55, 0x01, 0x1B, 0x2A, 0x01, 0x00, 0x00};
for(DWORD I=0; I<dwLen; I++){
for(DWORD J=0; J<8; J++){
ras[I*8+J] |= (((pBuf[I]>>(7-J))&0x01)<<(7-N));
}
}
N++;
if(N==8){
N = 0;
bgn[9] = M&0xFF;
bgn[10] = (M>>8)&0xFF;
m_pOEMHelp->DrvWriteSpoolBuf(pdevobj, bgn, sizeof bgn, &dwResult);
if (dwResult != sizeof bgn) ret = S_FALSE;
m_pOEMHelp->DrvWriteSpoolBuf(pdevobj, ras, M, &dwResult);
if (dwResult != M) ret = S_FALSE;
memset(ras, 0, sizeof ras);
}
return ret;
}