解决scannerlib保存图像时dpi不正常的问题
This commit is contained in:
parent
c2ab5c4416
commit
a75620c6a4
|
@ -220,6 +220,7 @@ HGLibDeviceImpl::HGLibDeviceImpl()
|
|||
HGBase_CreateLock(&m_lock);
|
||||
m_devHandle = NULL;
|
||||
m_devName.clear();
|
||||
m_dpi = 96;
|
||||
m_scanning = HGFALSE;
|
||||
m_scanEvent = NULL;
|
||||
m_eventFunc = NULL;
|
||||
|
@ -975,6 +976,13 @@ HGBool HGLibDeviceImpl::StartScan(HGLibDeviceScanEventFunc eventFunc, HGPointer
|
|||
HGBase_EnterLock(m_lock);
|
||||
if (!m_scanning)
|
||||
{
|
||||
HGLibDeviceParam* devParam = GetParam(HGLIB_OPTION_NAME_FBL);
|
||||
if (NULL != devParam && devParam->type == HGLIB_OPTION_VALUETYPE_INT)
|
||||
{
|
||||
m_dpi = devParam->intValue;
|
||||
ReleaseParam(devParam);
|
||||
}
|
||||
|
||||
HGBase_CreateEvent(HGFALSE, HGFALSE, &m_scanEvent);
|
||||
assert(NULL != m_scanEvent);
|
||||
m_eventFunc = eventFunc;
|
||||
|
@ -993,6 +1001,7 @@ HGBool HGLibDeviceImpl::StartScan(HGLibDeviceScanEventFunc eventFunc, HGPointer
|
|||
m_imageParam = NULL;
|
||||
HGBase_DestroyEvent(m_scanEvent);
|
||||
m_scanEvent = NULL;
|
||||
m_dpi = 96;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1020,6 +1029,7 @@ HGBool HGLibDeviceImpl::StopScan()
|
|||
m_imageFunc = NULL;
|
||||
m_imageParam = NULL;
|
||||
m_scanning = HGFALSE;
|
||||
m_dpi = 96;
|
||||
ret = HGTRUE;
|
||||
}
|
||||
HGBase_LeaveLock(m_lock);
|
||||
|
@ -1177,6 +1187,7 @@ int HGLibDeviceImpl::sane_ex_callback(SANE_Handle hdev, int code, void* data, un
|
|||
deviceImpl->m_imageFunc = NULL;
|
||||
deviceImpl->m_imageParam = NULL;
|
||||
deviceImpl->m_scanning = HGFALSE;
|
||||
deviceImpl->m_dpi = 96;
|
||||
HGBase_LeaveLock(deviceImpl->m_lock);
|
||||
|
||||
if (NULL != eventFunc)
|
||||
|
@ -1224,6 +1235,7 @@ int HGLibDeviceImpl::sane_ex_callback(SANE_Handle hdev, int code, void* data, un
|
|||
HGBase_CreateImageFromData(data, &imgInfo, NULL, 0, HGBASE_IMGORIGIN_TOP, &img);
|
||||
if (NULL != img)
|
||||
{
|
||||
HGBase_SetImageDpi(img, deviceImpl->m_dpi, deviceImpl->m_dpi);
|
||||
deviceImpl->m_imageFunc((HGLibDevice)deviceImpl, (HGLibImage)img, deviceImpl->m_imageParam);
|
||||
HGBase_DestroyImage(img);
|
||||
}
|
||||
|
|
|
@ -57,6 +57,7 @@ private:
|
|||
HGLock m_lock;
|
||||
SANE_Handle m_devHandle;
|
||||
std::string m_devName;
|
||||
HGInt m_dpi;
|
||||
HGBool m_scanning;
|
||||
HGEvent m_scanEvent;
|
||||
HGLibDeviceScanEventFunc m_eventFunc;
|
||||
|
|
|
@ -157,6 +157,12 @@ namespace WindowsFormsApp1
|
|||
Int32 ret3 = HGScannerLib.HGLib_SetDeviceParam(device, 35,
|
||||
Marshal.UnsafeAddrOfPinnedArrayElement(gamma, 0));
|
||||
|
||||
// 设置DPI
|
||||
UInt32[] dpi = new UInt32[1];
|
||||
dpi[0] = 133;
|
||||
Int32 ret4 = HGScannerLib.HGLib_SetDeviceParam(device, 27,
|
||||
Marshal.UnsafeAddrOfPinnedArrayElement(dpi, 0));
|
||||
|
||||
// 获取旋转的配置
|
||||
IntPtr rotateParam = HGScannerLib.HGLib_GetDeviceParam(device, 59);
|
||||
if (IntPtr.Zero != rotateParam)
|
||||
|
@ -246,16 +252,16 @@ namespace WindowsFormsApp1
|
|||
String fileName = String.Format("Scan_{0}.jpg", m_scanCount);
|
||||
++m_scanCount;
|
||||
|
||||
Bitmap curBitmap = createBitmap(image);
|
||||
curBitmap.Save(fileName);
|
||||
//Bitmap curBitmap = createBitmap(image);
|
||||
//curBitmap.Save(fileName);
|
||||
|
||||
//HGScannerLib.HGLibSaveImageParam saveParam;
|
||||
//saveParam.size = (UInt32)Marshal.SizeOf(typeof(HGScannerLib.HGLibSaveImageParam));
|
||||
//saveParam.jpegQuality = 80;
|
||||
//saveParam.tiffCompression = 4;
|
||||
//saveParam.tiffJpegQuality = 80;
|
||||
//saveParam.ocr = 0;
|
||||
//HGScannerLib.HGLib_SaveImage(image, StringToUtf8(fileName), ref saveParam);
|
||||
HGScannerLib.HGLibSaveImageParam saveParam;
|
||||
saveParam.size = (UInt32)Marshal.SizeOf(typeof(HGScannerLib.HGLibSaveImageParam));
|
||||
saveParam.jpegQuality = 80;
|
||||
saveParam.tiffCompression = 4;
|
||||
saveParam.tiffJpegQuality = 80;
|
||||
saveParam.ocr = 0;
|
||||
HGScannerLib.HGLib_SaveImage(image, StringToUtf8(fileName), ref saveParam);
|
||||
}
|
||||
|
||||
public String Utf8ToString(IntPtr str)
|
||||
|
|
Loading…
Reference in New Issue