From a75620c6a42ff046070f63de9412c88cbbf09747 Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Tue, 31 Jan 2023 15:54:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3scannerlib=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=9B=BE=E5=83=8F=E6=97=B6dpi=E4=B8=8D=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk/scannerlib/HGLibDeviceImpl.cpp | 12 +++++++++ sdk/scannerlib/HGLibDeviceImpl.hpp | 1 + .../huagao/c#/WindowsFormsApp1/Form1.cs | 26 ++++++++++++------- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/sdk/scannerlib/HGLibDeviceImpl.cpp b/sdk/scannerlib/HGLibDeviceImpl.cpp index 9761dda1..6a1b2470 100644 --- a/sdk/scannerlib/HGLibDeviceImpl.cpp +++ b/sdk/scannerlib/HGLibDeviceImpl.cpp @@ -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); } diff --git a/sdk/scannerlib/HGLibDeviceImpl.hpp b/sdk/scannerlib/HGLibDeviceImpl.hpp index 6fc92e02..f0abb594 100644 --- a/sdk/scannerlib/HGLibDeviceImpl.hpp +++ b/sdk/scannerlib/HGLibDeviceImpl.hpp @@ -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; diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs index 51f044f5..68e23234 100644 --- a/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs @@ -156,7 +156,13 @@ namespace WindowsFormsApp1 gamma[0] = 1.0; 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)