demo更新

This commit is contained in:
13038267101 2022-11-29 16:16:26 +08:00
parent 423d8dc7fc
commit 9de7fc9a83
2 changed files with 73 additions and 29 deletions

View File

@ -11,12 +11,12 @@ namespace WinFormsApp1
InitializeComponent(); InitializeComponent();
scan = new HgScan(); scan = new HgScan();
scan.initDriver();
} }
private void button1_Click(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e)
{ {
scan.initDriver();
scan.initInstance(); scan.initInstance();
scan.scanExec(); scan.scanExec();
} }

View File

@ -4,7 +4,8 @@ using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows.Forms; using System.Windows.Forms;
using System;
using System.Text;
namespace DNScanner.Scan namespace DNScanner.Scan
{ {
/** /**
@ -25,8 +26,15 @@ namespace DNScanner.Scan
[DllImport("hgscannersdk.dll", EntryPoint = "HG_OpenScanner", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] [DllImport("hgscannersdk.dll", EntryPoint = "HG_OpenScanner", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern IntPtr HG_OpenScanner(string deviceName); public static extern IntPtr HG_OpenScanner(string deviceName);
[DllImport("hgscannersdk.dll", EntryPoint = "HG_ImgSaveType", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern IntPtr HG_ImgSaveType(string deviceName);
[DllImport("hgscannersdk.dll", EntryPoint = "HG_StartScan", CallingConvention = CallingConvention.Cdecl)] [DllImport("hgscannersdk.dll", EntryPoint = "HG_StartScan", CallingConvention = CallingConvention.Cdecl)]
public static extern int HG_StartScan(IntPtr handle, int count); public static extern int HG_StartScan(IntPtr handle, int count);
[DllImport("hgscannersdk.dll", EntryPoint = "HG_SET_IMG_COMPRESSION", CallingConvention = CallingConvention.Cdecl)]
public static extern void HG_SET_IMG_COMPRESSION(int count);
[DllImport("hgscannersdk.dll", EntryPoint = "HG_StopScan", CallingConvention = CallingConvention.Cdecl)] [DllImport("hgscannersdk.dll", EntryPoint = "HG_StopScan", CallingConvention = CallingConvention.Cdecl)]
public static extern int HG_StopScan(IntPtr handle); public static extern int HG_StopScan(IntPtr handle);
[DllImport("hgscannersdk.dll", EntryPoint = "HG_Set_Scan_Params", CallingConvention = CallingConvention.Cdecl)] [DllImport("hgscannersdk.dll", EntryPoint = "HG_Set_Scan_Params", CallingConvention = CallingConvention.Cdecl)]
@ -313,7 +321,6 @@ namespace DNScanner.Scan
/// </summary> /// </summary>
public int TimelySetParams() public int TimelySetParams()
{ {
if (scannerHandle == IntPtr.Zero) if (scannerHandle == IntPtr.Zero)
{ {
HG_Set_OnDeviceEvent_callback(deviceCallback, IntPtr.Zero); HG_Set_OnDeviceEvent_callback(deviceCallback, IntPtr.Zero);
@ -324,9 +331,10 @@ namespace DNScanner.Scan
{ {
return -1; return -1;
} }
} }
//string imt_tye = ".jpg";
//HG_ImgSaveType(imt_tye);
HG_SET_IMG_COMPRESSION(20);
HG_SCANPARAMS scanParams = new HG_SCANPARAMS(); HG_SCANPARAMS scanParams = new HG_SCANPARAMS();
int retVal = HG_Get_Scan_Params(scannerHandle, ref scanParams); int retVal = HG_Get_Scan_Params(scannerHandle, ref scanParams);
if (retVal != 0) if (retVal != 0)
@ -338,30 +346,21 @@ namespace DNScanner.Scan
//设置当前使用的配置项 //设置当前使用的配置项
scanParams.PixelType = HG_COLORMODE.HG_RGB; scanParams.PixelType = HG_COLORMODE.HG_BlackWhite;
scanParams.MultiOutput = HG_MULTIOUTPUT.HG_Unused; scanParams.MultiOutput = HG_MULTIOUTPUT.HG_Unused;
scanParams.PaperSize = HG_PAPERTYPE.HG_None; scanParams.PaperSize = HG_PAPERTYPE.HG_None;
scanParams.PaperAlign = (HG_PAPERALIGN.HG_Rot0); scanParams.PaperAlign = (HG_PAPERALIGN.HG_Rot0);
scanParams.ImageProcess.AutoCrop = 1; scanParams.ImageProcess.AutoCrop = 1;
int resolution = 200; int resolution = 200;
scanParams.Resolution = resolution; scanParams.Resolution = resolution;
int duplex = 1; int duplex = 1;
scanParams.ScanSide.Duplex = duplex; scanParams.ScanSide.Duplex = duplex;
scanParams.ImageProcess.FillBlackRect = 1; scanParams.ImageProcess.FillBlackRect = 1;
scanParams.ImageProcess.AutoDescrew = 1; scanParams.ImageProcess.AutoDescrew = 1;
scanParams.HardwareParam.doubleFeedDetection = 1; scanParams.HardwareParam.doubleFeedDetection = 1;
scanParams.HardwareParam.bindingDetection = 1; scanParams.HardwareParam.bindingDetection = 1;
scanParams.ImageProcess.AutoCrop_threshold = 40; scanParams.ImageProcess.AutoCrop_threshold = 40;
scanParams.ImageProcess.Orentation = HG_ORENTATION.HG_AUTOTEXT_DETECT;
retVal = HG_Set_Scan_Params(scannerHandle, scanParams); retVal = HG_Set_Scan_Params(scannerHandle, scanParams);
if (retVal != 0) if (retVal != 0)
{ {
@ -371,6 +370,19 @@ namespace DNScanner.Scan
} }
static int imgindex = 0; static int imgindex = 0;
public static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
public static void ImageCallback(IntPtr img, IntPtr obj) public static void ImageCallback(IntPtr img, IntPtr obj)
{ {
// //
@ -403,32 +415,64 @@ namespace DNScanner.Scan
// //logger.Debug("Byte content is: " + data[i]); // //logger.Debug("Byte content is: " + data[i]);
//} //}
var ptr= Marshal.UnsafeAddrOfPinnedArrayElement(data, 0); var ptr= Marshal.UnsafeAddrOfPinnedArrayElement(data, 0);
// Bitmap bmp; Bitmap bmp;
//using (var stream = new MemoryStream(data)) long Qty = 20;
//{ using (var stream = new MemoryStream(data))
// bmp = new Bitmap(stream); {
/* System.Drawing.Imaging.Encoder myEncoder; bmp = new Bitmap(stream);
EncoderParameter myEncoderParameter; System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);
myEncoderParameters.Param[0] = myEncoderParameter;
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");
/* EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters; EncoderParameters myEncoderParameters;
ImageCodecInfo myImageCodecInfo = ImageCodecInfo myImageCodecInfo =
ImageCodecInfo.GetImageDecoders()[0]; ImageCodecInfo.GetImageDecoders()[0];
//设置图像颜色深度参数colordepth为8位并加入到编码器参数parameters中 //设置图像颜色深度参数colordepth为8位并加入到编码器参数parameters中
myEncoder = System.Drawing.Imaging.Encoder.Compression; myEncoder = System.Drawing.Imaging.Encoder.Compression;
myEncoderParameters = new EncoderParameters(1); myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 95); // myEncoderParameter = new EncoderParameter(myEncoder, Qty);
myEncoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 20L);
myEncoderParameters.Param[0] = myEncoderParameter;*/ myEncoderParameters.Param[0] = myEncoderParameter;*/
// bmp.Save((imgindex++).ToString() + ".jpg"); // bmp.Save((imgindex++).ToString() + ".jpg");
//bmp.Save((imgindex++).ToString() + ".jpg", ImageFormat.Bmp); // bmp.Save((imgindex++).ToString() + ".jpg", ImageFormat.Bmp);
//} // bmp.Save((imgindex++).ToString() + ".jpg", myImageCodecInfo, myEncoderParameters);
// 文件写入
FileStream fs = new FileStream((imgindex++).ToString() + ".jpg", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//开始写入
fs.Write(data, 0, image.bufferlength);
//清空缓冲区
fs.Flush();
//关闭流
sw.Close();
fs.Close();
// using (FileStream fsWrite = new FileStream((imgindex++).ToString() + ".jpg", FileMode.Append, FileAccess.Write))
{
//Console.WriteLine(stream); //提示用户输入字符串
// string str = Console.ReadLine(); //接收用户输入的字符串
// byte[] array = Encoding.UTF8.GetBytes(Encoding.ASCII.GetChars(data)); //将字符串转换为字节数组
// fsWrite.Write(data, 0, image.bufferlength); //将字节数组写入到文本文件
//Consoele.WriteLine("写入成功");
// Console.ReadKey();
// fsWrite.Close();
}
}
System.IO.MemoryStream ms = new System.IO.MemoryStream(data); System.IO.MemoryStream ms = new System.IO.MemoryStream(data);
System.Drawing.Image img1 = System.Drawing.Image.FromStream(ms); System.Drawing.Image img1 = System.Drawing.Image.FromStream(ms);
//保存到磁盘文件 //保存到磁盘文件
string imagePath = System.IO.Path.Combine(); string imagePath = System.IO.Path.Combine();
// if (!System.IO.Directory.Exists(imagePath)) // if (!System.IO.Directory.Exists(imagePath))
// System.IO.Directory.CreateDirectory(imagePath); // System.IO.Directory.CreateDirectory(imagePath);
img1.Save(System.IO.Path.Combine(imagePath, (imgindex++).ToString() + ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg); // img1.Save(System.IO.Path.Combine(imagePath, (imgindex++).ToString() + ".TIF"), System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Dispose(); ms.Dispose();
// MessageBox.Show("图片已保存至:" + m_ImagrRootDir);
// MessageBox.Show("图片已保存至:" + m_ImagrRootDir);
//bmp.Save(imgindex.ToString() + ".bmp", ImageFormat.Bmp); //bmp.Save(imgindex.ToString() + ".bmp", ImageFormat.Bmp);
//bmp.Save(destFileName, ImageFormat.Tiff); //bmp.Save(destFileName, ImageFormat.Tiff);