using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Saraff.Twain;
using HXX.Scanner.Common;
namespace HXX.Scanner.Biz
{
///
/// 老类,设置基础信息到扫描仪
///
public class biz_property_scanner_to_engine
{
public static void Set(Twain32 engine, Device_Scanner scanner)
{
set_gray(engine);
set_bitDepth(engine);
set_file_mode(engine);
set_file_type(engine);
if (!scanner.deviceName.ToUpper().Contains("KODAK"))
{
set_removeBorder(engine);
}
//来自 界面设置 或 网端传参
set_paper(engine, scanner);
set_AB(engine);
try { engine.Capabilities.Brightness.Set(scanner.ld); } catch (Exception ee) { }
try { engine.Capabilities.Contrast.Set(scanner.dbd); } catch (Exception ee) { }
engine.Capabilities.XResolution.Set(scanner.resolution);
engine.Capabilities.YResolution.Set(scanner.resolution);
//engine.Capabilities.XResolution.Set(200);
//engine.Capabilities.YResolution.Set(200);
engine.ShowUI = config_environment.use_source_ui;
/////////////////test
//this._twain32.CloseDataSource();
//this._twain32.SourceIndex = index;
//this._twain32.OpenDataSource();
//this._twain32.Capabilities.XResolution.Set(200);
//this._twain32.Capabilities.YResolution.Set(200);
//this._twain32.Capabilities.PixelType.Set(TwPixelType.Gray);
//this._twain32.Capabilities.XferMech.Set(TwSX.File);
//this._twain32.Capabilities.ImageFileFormat.Set(TwFF.Tiff);
//this._twain32.Capabilities.SupportedSizes.Reset();
//this._twain32.Capabilities.SupportedSizes.Set(TwSS.A4);
//this._twain32.Capabilities.XferCount.Set(2);
//this._twain32.Capabilities.DuplexEnabled.Set(true);
//this._twain32.Capabilities.Brightness.Set(0);
//this._twain32.Capabilities.Contrast.Set(0);
}
///
/// 设置纸张格式
///
///
///
private static void set_paper(Twain32 engine, Device_Scanner scanner)
{
try
{
try
{
//佳能必须要先Reset,再Set才有效
engine.Capabilities.SupportedSizes.Reset();
}
catch (Exception e)
{
LogManager.WriteLog(e);
}
var autoSizeCab = engine.Capabilities.AutoSize.ToString().ToLower();
if (autoSizeCab.Contains("not"))
{
//var supported = engine.Capabilities.SupportedSizes.Get();
if (config_environment.paper_size == PaperSize.A3) { engine.Capabilities.SupportedSizes.Set(TwSS.A3); }
if (config_environment.paper_size == PaperSize.A4) { engine.Capabilities.SupportedSizes.Set(TwSS.A4); }
if (config_environment.paper_size == PaperSize.K8) { engine.Capabilities.SupportedSizes.Set(TwSS.A3); }
if (config_environment.paper_size == PaperSize.K16) { engine.Capabilities.SupportedSizes.Set(TwSS.A4); }
}
else
{
engine.SetCap(TwCap.AutoSize, true);
}
}
catch (Exception ex)
{
//Console.WriteLine("SupportedSizes got exception");
if (!ex.Message.Contains("Data parameter out of range"))
{
LogManager.WriteLog(ex);
}
}
}
///
/// 设置单双面
///
///
private static void set_AB(Twain32 engine)
{
engine.Capabilities.FeederEnabled.Set(true);
if (config_environment.scan_type == ScanType.Formal)
{
engine.Capabilities.XferCount.Set(-1);
if (config_environment.scan_ab)
{
engine.Capabilities.DuplexEnabled.Set(true);
}
else
{
engine.Capabilities.DuplexEnabled.Set(false);
}
}
else
{
if (config_environment.scan_ab)
{
engine.Capabilities.XferCount.Set(2);
engine.Capabilities.DuplexEnabled.Set(true);
}
else
{
engine.Capabilities.XferCount.Set(1);
engine.Capabilities.DuplexEnabled.Set(false);
}
}
}
/////
///// 设置灰度
/////
/////
//private static void set_gray(Twain32 engine)
//{
// Boolean hasBw = false;
// Boolean hasGray = false;
// Twain32.Enumeration _pixelTypes = engine.Capabilities.PixelType.Get();
// for (int i = 0; i < _pixelTypes.Count; i++)
// {
// if (_pixelTypes[i].ToString().Equals("BW"))
// {
// hasBw = true;
// }
// if (_pixelTypes[i].ToString().Equals("Gray"))
// {
// hasGray = true;
// }
// }
// //一般都支持这个模式
// // test gray
// if (false)
// {
// if (hasBw)
// {
// try
// {
// engine.Capabilities.PixelType.Set(TwPixelType.BW);
// }
// catch (Exception ee)
// {
// Console.WriteLine("Error set PixelType BW " + ee.Message);
// }
// }
// else
// {
// Console.WriteLine("Error " + DateTime.Now.ToString() + " PixelType BW not supported");
// }
// }
// //测试灰度
// if (hasGray)
// {
// try
// {
// engine.Capabilities.PixelType.Set(TwPixelType.Gray);
// }
// catch (Exception ee)
// {
// Console.WriteLine("Error set PixelType Gray " + ee.Message);
// }
// }
// else
// {
// Console.WriteLine("Error " + DateTime.Now.ToString() + " PixelType Gray not supported");
// }
//}
///
/// 设置灰度
///
///
private static void set_gray(Twain32 engine)
{
Boolean hasBw = false;
Boolean hasGray = false;
Boolean hasColor = false;
Twain32.Enumeration _pixelTypes = engine.Capabilities.PixelType.Get();
for (int i = 0; i < _pixelTypes.Count; i++)
{
if (_pixelTypes[i].ToString().Equals("BW"))
{
hasBw = true;
}
if (_pixelTypes[i].ToString().Equals("Gray"))
{
hasGray = true;
}
if (_pixelTypes[i].ToString().Equals("RGB"))
{
hasColor = true;
}
}
if (config_environment.web_parameter.isColor == 0)
{
if (hasGray)
{
try
{
engine.Capabilities.PixelType.Set(TwPixelType.Gray);
}
catch (Exception ee)
{
LogManager.WriteLog("Error set PixelType GRAY " + ee.Message);
}
}
}
//else if (config_environment.web_parameter.paperColor.ToLower() == "black")
//{
// if (hasBw)
// {
// try
// {
// engine.Capabilities.PixelType.Set(TwPixelType.BW);
// }
// catch (Exception ee)
// {
// LogManager.WriteLog("Error set PixelType BW " + ee.Message);
// }
// }
//}
else if (config_environment.web_parameter.isColor == 1)
{
if (hasColor)
{
try
{
engine.Capabilities.PixelType.Set(TwPixelType.RGB);
}
catch (Exception ee)
{
LogManager.WriteLog("Error set PixelType RGB " + ee.Message);
}
}
}
}
///
/// 设置色深
///
///
private static void set_bitDepth(Twain32 engine)
{
if (false)
{
try
{
engine.Capabilities.BitDepth.Set(1);
}
catch (Exception ee)
{
Console.WriteLine(DateTime.Now.ToString() + " Error set BitDepth 1" + ee.Message);
}
}
}
///
/// 设置保存格式
///
///
private static void set_file_mode(Twain32 engine)
{
try
{
engine.Capabilities.XferMech.Set(TwSX.File);
}
catch (Exception ee)
{
Console.WriteLine("Error set XferMech TwSX.File " + ee.Message);
}
}
///
/// 设置文件格式
///
///
private static void set_file_type(Twain32 engine)
{
//try
//{
// Twain32.Enumeration imageFileFormats = engine.Capabilities.ImageFileFormat.Get();
// Boolean hasTiff = false;
// for (int i = 0; i < imageFileFormats.Count; i++)
// {
// if (imageFileFormats[i].ToString().ToLower().Equals("tiff"))
// {
// hasTiff = true;
// break;
// }
// }
// if (hasTiff)
// {
// engine.Capabilities.ImageFileFormat.Set(TwFF.Tiff);
// }
//}
//catch (Exception ee)
//{
//}
//try
//{
// engine.Capabilities.ImageFileFormat.Set(TwFF.Jfif);
// //engine.Capabilities.JpegPixelType.Set(TwPixelType.Gray);
// //engine.Capabilities.JpegQuality.Set(TwJQ.High);
// engine.Capabilities.Compression.Set(TwCompression.Jpeg2000);
//}
//catch (Exception ee)
//{
//}
try
{
engine.Capabilities.ImageFileFormat.Set(TwFF.Bmp);
}
catch (Exception ee)
{
}
}
///
/// 不明设置
///
///
private static void set_removeBorder(Twain32 engine)
{
try
{
Twain32.Enumeration bRemoveBorderCap = (Twain32.Enumeration)engine.GetCap((TwCap)TwCapExt.bRemoveBorder);
bool hasRemoveBorder = false;
for (int i = 0; i < bRemoveBorderCap.Count; i++)
{
if (bRemoveBorderCap[i].ToString().Equals("1"))
{
hasRemoveBorder = true;
break;
}
}
if (hasRemoveBorder)
{
engine.SetCap((TwCap)TwCapExt.bRemoveBorder, 1);
}
}
catch (Exception ee)
{
Console.WriteLine(DateTime.Now.ToString() + " error set bRemoveBorder " + ee.Message);
}
}
}
}