diff --git a/src/NTwain/Data/TWAINH.cs b/src/NTwain/Data/TWAINH.cs index aec2969..2c79128 100644 --- a/src/NTwain/Data/TWAINH.cs +++ b/src/NTwain/Data/TWAINH.cs @@ -2507,7 +2507,7 @@ namespace NTwain.Data /// Provides the application information about the Source’s requirements and preferences regarding allocation of transfer buffer(s). /// [StructLayout(LayoutKind.Sequential, Pack = 2)] - public struct TW_SETUPMEMXFER + public partial struct TW_SETUPMEMXFER { public uint MinBufSize; public uint MaxBufSize; diff --git a/src/NTwain/Data/TWAINH_EXTRAS.cs b/src/NTwain/Data/TWAINH_EXTRAS.cs index 715b7ea..db5d492 100644 --- a/src/NTwain/Data/TWAINH_EXTRAS.cs +++ b/src/NTwain/Data/TWAINH_EXTRAS.cs @@ -762,6 +762,23 @@ namespace NTwain.Data } } + partial struct TW_SETUPMEMXFER + { + /// + /// Determines the best buffer size from values + /// specified by source + /// + /// + public uint DetermineBufferSize() + { + if (Preferred != TwainConst.TWON_DONTCARE32) return Preferred; + if (MaxBufSize != TwainConst.TWON_DONTCARE32) return MaxBufSize; + if (MinBufSize != TwainConst.TWON_DONTCARE32) return MinBufSize; + // default to 16 kb if source doesn't really want to say what it needs + return 1024 * 16; + } + } + //partial struct TW_DEVICEEVENT //{ // public TWDE Event { get { return (TWDE)_event; } } diff --git a/src/NTwain/TwainAppSession.Xfers.cs b/src/NTwain/TwainAppSession.Xfers.cs index 3909d95..f2cfb33 100644 --- a/src/NTwain/TwainAppSession.Xfers.cs +++ b/src/NTwain/TwainAppSession.Xfers.cs @@ -275,7 +275,7 @@ namespace NTwain rc = DGControl.SetupMemXfer.Get(ref _appIdentity, ref _currentDS, out TW_SETUPMEMXFER memSetup); if (rc == TWRC.SUCCESS) { - uint buffSize = DetermineBufferSize(memSetup); + uint buffSize = memSetup.DetermineBufferSize(); var memPtr = Alloc(buffSize); TW_IMAGEMEMXFER memXfer = new() @@ -357,20 +357,6 @@ namespace NTwain return WrapInSTS(rc); } - private static uint DetermineBufferSize(TW_SETUPMEMXFER memSetup) - { - // default to 16 kb if source doesn't really want to say what it needs - var buffSize = memSetup.Preferred; - if (buffSize != TwainConst.TWON_DONTCARE32) return buffSize; - - buffSize = memSetup.MaxBufSize; - if (buffSize != TwainConst.TWON_DONTCARE32) return buffSize; - - buffSize = memSetup.MinBufSize; - if (buffSize != TwainConst.TWON_DONTCARE32) return buffSize; - - return 1024 * 16; - } private STS TransferFileImage(ref TW_PENDINGXFERS pending) {