C# 设置TWAIN扫描的分辨率

C# 设置TWAIN扫描的分辨率,c#,winforms,resolution,scanning,twain,C#,Winforms,Resolution,Scanning,Twain,我在WinForms中创建了一个应用程序,可以列出所有twain和wia扫描仪,并使用该列表中选择的设备进行扫描 每当我在不使用TWAIN用户界面的情况下使用TWAIN进行扫描时,我得到的图像质量很差 我的代码基于这里找到的包装器:以及 我试图在新闻部设定决议,但没有任何区别。设置上限后,rc始终表示失败: TwFix32 f32 = new TwFix32(); f32.FromFloat(300);//value of DPI // Set X resolution. TwCapabil

我在WinForms中创建了一个应用程序,可以列出所有twain和wia扫描仪,并使用该列表中选择的设备进行扫描

每当我在不使用TWAIN用户界面的情况下使用TWAIN进行扫描时,我得到的图像质量很差

我的代码基于这里找到的包装器:以及

我试图在新闻部设定决议,但没有任何区别。设置上限后,rc始终表示失败:

TwFix32 f32 = new TwFix32();
f32.FromFloat(300);//value of DPI 

// Set X resolution.
TwCapability capX = new TwCapability(TwCap.XResolution, f32.Whole);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capX);

// Set Y resolution.
TwCapability capY = new TwCapability(TwCap.YResolution, f32.Whole);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capY);

它通过创建一个新的构造函数来工作:

public TwCapability(TwCap cap, short sval, TwType twtype)
{
    Cap = (short)cap;
    ConType = (short)TwOn.One;
    Handle = Twain.GlobalAlloc(0x42, 6);
    IntPtr pv = Twain.GlobalLock(Handle);
    Marshal.WriteInt16(pv, 0, (short)TwType.Int16);
    Marshal.WriteInt32(pv, 2, (int)sval);
    Marshal.WriteInt16(pv, 0, (short)twtype);
    Twain.GlobalUnlock(Handle);
}


TwCapability capResx = new TwCapability(TwCap.ICAP_XRESOLUTION, 300, TwType.Fix32);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capResx);


TwCapability capResy = new TwCapability(TwCap.ICAP_YRESOLUTION, 300, TwType.Fix32);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capResy);