📄 testmcro.cpp
字号:
Trace(TEXT("SCAN_NEXT"));
//
// get data from the scanner and set plReceived value
//
//
// read data
//
switch(pScanInfo->DataType) {
case WIA_DATA_THRESHOLD:
//
// make buffer alternate black/White, for sample 1-bit data
//
memset(pBuffer,0,lLength);
memset(pBuffer,255,lLength/2);
break;
case WIA_DATA_GRAYSCALE:
//
// make buffer grayscale data, for sample 8-bit data
//
if(!g_bDown){
g_PalIndex+=10;
if(g_PalIndex > 255){
g_PalIndex = 255;
g_bDown = TRUE;
}
}
else {
g_PalIndex-=10;
if(g_PalIndex < 0){
g_PalIndex = 0;
g_bDown = FALSE;
}
}
memset(pBuffer,g_PalIndex,lLength);
break;
case WIA_DATA_COLOR:
//
// make buffer red, for sample color data
//
for (i = 0;i+2<lLength;i+=3) {
memset(pBuffer+i,255,1);
memset(pBuffer+(i+1),0,1);
memset(pBuffer+(i+2),0,1);
}
break;
default:
break;
}
//
// test device always returns the exact amount of scanned data
//
*plReceived = lLength;
break;
case SCAN_FINISHED:
default:
Trace(TEXT("SCAN_FINISHED"));
//
// stop scanner, do not set lRecieved, or write any data to pBuffer. Those values
// will be NULL. This lPhase is only to allow you to stop scanning, and return the
// scan head to the HOME position. SCAN_FINISHED will be called always for regular scans, and
// for cancelled scans.
//
break;
}
return S_OK;
}
/**************************************************************************\
* SetPixelWindow (MicroDriver Entry point)
*
* Called by the WIA driver to set the scan selection area to the MicroDriver.
*
* Arguments:
*
* pScanInfo - SCANINFO structure used for settings
* pValue - VAL structure used for settings
* x - X Position of scan rect (upper left x coordinate)
* y - Y Position of scan rect (upper left y coordinate)
* xExtent - Width of scan rect (in pixels)
* yExtent - Height of scan rect (in pixels)
*
*
* Return Value:
*
* Status
*
* History:
*
* 1/20/2000 Original Version
*
\**************************************************************************/
WIAMICRO_API HRESULT SetPixelWindow(PSCANINFO pScanInfo, LONG x, LONG y, LONG xExtent, LONG yExtent)
{
if(pScanInfo == NULL) {
return E_INVALIDARG;
}
pScanInfo->Window.xPos = x;
pScanInfo->Window.yPos = y;
pScanInfo->Window.xExtent = xExtent;
pScanInfo->Window.yExtent = yExtent;
return S_OK;
}
/**************************************************************************\
* ReadRegistryInformation (helper)
*
* Called by the MicroDriver to Read registry information from the device's
* installed device section. The HKEY passed in will be closed by the host
* driver after CMD_INITIALIZE is completed.
*
* Arguments:
*
* none
*
* Return Value:
*
* void
*
* History:
*
* 1/20/2000 Original Version
*
\**************************************************************************/
VOID ReadRegistryInformation(PVAL pValue)
{
HKEY hKey = NULL;
if(NULL != pValue->pHandle){
hKey = (HKEY)*pValue->pHandle;
//
// Open DeviceData section to read driver specific information
//
HKEY hOpenKey = NULL;
if (RegOpenKeyEx(hKey, // handle to open key
TEXT("DeviceData"), // address of name of subkey to open
0, // options (must be NULL)
KEY_QUERY_VALUE|KEY_READ, // just want to QUERY a value
&hOpenKey // address of handle to open key
) == ERROR_SUCCESS) {
DWORD dwWritten = sizeof(DWORD);
DWORD dwType = REG_DWORD;
LONG lSampleEntry = 0;
RegQueryValueEx(hOpenKey,
TEXT("Sample Entry"),
NULL,
&dwType,
(LPBYTE)&lSampleEntry,
&dwWritten);
Trace(TEXT("lSampleEntry Value = %d"),lSampleEntry);
} else {
Trace(TEXT("Could not open DeviceData section"));
}
}
}
/**************************************************************************\
* InitScannerDefaults (helper)
*
* Called by the MicroDriver to Initialize the SCANINFO structure
*
* Arguments:
*
* none
*
* Return Value:
*
* void
*
* History:
*
* 1/20/2000 Original Version
*
\**************************************************************************/
VOID InitScannerDefaults(PSCANINFO pScanInfo)
{
pScanInfo->ADF = 0; // set to no ADF in Test device
pScanInfo->RawDataFormat = WIA_PACKED_PIXEL;
pScanInfo->RawPixelOrder = WIA_ORDER_BGR;
pScanInfo->bNeedDataAlignment = TRUE;
pScanInfo->SupportedCompressionType = 0;
pScanInfo->SupportedDataTypes = SUPPORT_BW|SUPPORT_GRAYSCALE|SUPPORT_COLOR;
pScanInfo->BedWidth = 8500; // 1000's of an inch (WIA compatible unit)
pScanInfo->BedHeight = 11000; // 1000's of an inch (WIA compatible unit)
pScanInfo->OpticalXResolution = 300;
pScanInfo->OpticalYResolution = 300;
pScanInfo->IntensityRange.lMin = -127;
pScanInfo->IntensityRange.lMax = 127;
pScanInfo->IntensityRange.lStep = 1;
pScanInfo->ContrastRange.lMin = -127;
pScanInfo->ContrastRange.lMax = 127;
pScanInfo->ContrastRange.lStep = 1;
// Scanner settings
pScanInfo->Intensity = 0;
pScanInfo->Contrast = 0;
pScanInfo->Xresolution = 150;
pScanInfo->Yresolution = 150;
pScanInfo->Window.xPos = 0;
pScanInfo->Window.yPos = 0;
pScanInfo->Window.xExtent = (pScanInfo->Xresolution * pScanInfo->BedWidth)/1000;
pScanInfo->Window.yExtent = (pScanInfo->Yresolution * pScanInfo->BedHeight)/1000;
// Scanner options
pScanInfo->DitherPattern = 0;
pScanInfo->Negative = 0;
pScanInfo->Mirror = 0;
pScanInfo->AutoBack = 0;
pScanInfo->ColorDitherPattern = 0;
pScanInfo->ToneMap = 0;
pScanInfo->Compression = 0;
// Image Info
pScanInfo->DataType = WIA_DATA_GRAYSCALE;
pScanInfo->WidthPixels = (pScanInfo->Window.xExtent)-(pScanInfo->Window.xPos);
switch(pScanInfo->DataType) {
case WIA_DATA_THRESHOLD:
pScanInfo->PixelBits = 1;
break;
case WIA_DATA_COLOR:
pScanInfo->PixelBits = 24;
break;
case WIA_DATA_GRAYSCALE:
default:
pScanInfo->PixelBits = 8;
break;
}
pScanInfo->WidthBytes = pScanInfo->Window.xExtent * (pScanInfo->PixelBits/8);
pScanInfo->Lines = pScanInfo->Window.yExtent;
}
/**************************************************************************\
* SetScannerSettings (helper)
*
* Called by the MicroDriver to set the values stored in the SCANINFO structure
* to the actual device.
*
* Arguments:
*
* none
*
*
* Return Value:
*
* TRUE - Success, FALSE - Failure
*
* History:
*
* 1/20/2000 Original Version
*
\**************************************************************************/
BOOL SetScannerSettings(PSCANINFO pScanInfo)
{
if(pScanInfo->DataType == WIA_DATA_THRESHOLD) {
pScanInfo->PixelBits = 1;
pScanInfo->WidthBytes = (pScanInfo->Window.xExtent)-(pScanInfo->Window.xPos) * (pScanInfo->PixelBits/7);
//
// Set data type to device
//
// if the set fails..
// return FALSE;
}
else if(pScanInfo->DataType == WIA_DATA_GRAYSCALE) {
pScanInfo->PixelBits = 8;
pScanInfo->WidthBytes = (pScanInfo->Window.xExtent)-(pScanInfo->Window.xPos) * (pScanInfo->PixelBits/8);
//
// Set data type to device
//
// if the set fails..
// return FALSE;
}
else {
pScanInfo->PixelBits = 24;
pScanInfo->WidthBytes = (pScanInfo->Window.xExtent)-(pScanInfo->Window.xPos) * (pScanInfo->PixelBits/8);
//
// Set data type to device
//
// if the set fails..
// return FALSE;
}
#ifdef DEBUG
Trace(TEXT("ScanInfo"));
Trace(TEXT("x res = %d"),pScanInfo->Xresolution);
Trace(TEXT("y res = %d"),pScanInfo->Yresolution);
Trace(TEXT("bpp = %d"),pScanInfo->PixelBits);
Trace(TEXT("xpos = %d"),pScanInfo->Window.xPos);
Trace(TEXT("ypos = %d"),pScanInfo->Window.yPos);
Trace(TEXT("xext = %d"),pScanInfo->Window.xExtent);
Trace(TEXT("yext = %d"),pScanInfo->Window.yExtent);
#endif
//
// send other values to device, use the values set in pScanInfo to set them to your
// device.
//
return TRUE;
}
/**************************************************************************\
* InitializeScanner (helper)
*
* Called by the MicroDriver to Iniitialize any device specific operations
*
* Arguments:
*
* none
*
* Return Value:
*
* TRUE - Success, FALSE - Failure
*
* History:
*
* 1/20/2000 Original Version
*
\**************************************************************************/
BOOL InitializeScanner(PSCANINFO pScanInfo)
{
HRESULT hr = S_OK;
//
// Do any device initialization here...
// The test device does not need any.
//
if (SUCCEEDED(hr)) {
return TRUE;
}
return FALSE;
}
/**************************************************************************\
* CheckButtonStatus (helper)
*
* Called by the MicroDriver to Set the current Button pressed value.
*
* Arguments:
*
* pValue - VAL structure used for settings
*
*
* Return Value:
*
* VOID
*
* History:
*
* 1/20/2000 Original Version
*
\**************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -