mirror of
https://github.com/soukoku/ntwain.git
synced 2025-04-29 08:29:07 +08:00
Moved image structs to own file and added STS extension.
This commit is contained in:
parent
8d003b03c8
commit
c5e7789555
29
src/NTwain/ExtensionMethods.cs
Normal file
29
src/NTwain/ExtensionMethods.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TWAINWorkingGroup;
|
||||
|
||||
namespace NTwain
|
||||
{
|
||||
/// <summary>
|
||||
/// Some utility extension methods.
|
||||
/// </summary>
|
||||
public static class ExtensionMethods
|
||||
{
|
||||
/// <summary>
|
||||
/// Checks if the returned <see cref="STS"/> contains a particular
|
||||
/// <see cref="STS"/> value since normal TWAIN
|
||||
/// return code is merged with condition code into <see cref="STS"/>.
|
||||
/// This is only useful for non-success values.
|
||||
/// </summary>
|
||||
/// <param name="status"></param>
|
||||
/// <param name="checkFor">Non-success code to check for.</param>
|
||||
/// <returns></returns>
|
||||
public static bool Is(this STS status, STS checkFor)
|
||||
{
|
||||
return (status & checkFor) == checkFor;
|
||||
}
|
||||
}
|
||||
}
|
424
src/NTwain/TWAINWorkingGroup/ImageTypes.cs
Normal file
424
src/NTwain/TWAINWorkingGroup/ImageTypes.cs
Normal file
@ -0,0 +1,424 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TwainWorkingGroup.TWAIN
|
||||
//
|
||||
// This is a wrapper class for basic TWAIN functionality. It establishes
|
||||
// behavior that every application should adhere to. It also hides OS
|
||||
// specific details, so that toolkits or applications can use one unified
|
||||
// interface to TWAIN.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
// Author Date TWAIN Comment
|
||||
// M.McLaughlin 13-Mar-2019 2.4.0.3 Add language code page support for strings
|
||||
// M.McLaughlin 13-Nov-2015 2.4.0.0 Updated to latest spec
|
||||
// M.McLaughlin 13-Sep-2015 2.3.1.2 DsmMem bug fixes
|
||||
// M.McLaughlin 26-Aug-2015 2.3.1.1 Log fix and sync with TWAIN Direct
|
||||
// M.McLaughlin 13-Mar-2015 2.3.1.0 Numerous fixes
|
||||
// M.McLaughlin 13-Oct-2014 2.3.0.4 Added logging
|
||||
// M.McLaughlin 24-Jun-2014 2.3.0.3 Stability fixes
|
||||
// M.McLaughlin 21-May-2014 2.3.0.2 64-Bit Linux
|
||||
// M.McLaughlin 27-Feb-2014 2.3.0.1 AnyCPU support
|
||||
// M.McLaughlin 21-Oct-2013 2.3.0.0 Initial Release
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2013-2020 Kodak Alaris Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the "Software"),
|
||||
// to deal in the Software without restriction, including without limitation
|
||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
// and/or sell copies of the Software, and to permit persons to whom the
|
||||
// Software is furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TWAINWorkingGroup
|
||||
{
|
||||
/// <summary>
|
||||
/// The header for a Bitmap file.
|
||||
/// Needed for supporting DAT.IMAGENATIVEXFER...
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
struct BITMAPFILEHEADER
|
||||
{
|
||||
public ushort bfType;
|
||||
public uint bfSize;
|
||||
public ushort bfReserved1;
|
||||
public ushort bfReserved2;
|
||||
public uint bfOffBits;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The header for a Device Independent Bitmap (DIB).
|
||||
/// Needed for supporting DAT.IMAGENATIVEXFER...
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
struct BITMAPINFOHEADER
|
||||
{
|
||||
public uint biSize;
|
||||
public int biWidth;
|
||||
public int biHeight;
|
||||
public ushort biPlanes;
|
||||
public ushort biBitCount;
|
||||
public uint biCompression;
|
||||
public uint biSizeImage;
|
||||
public int biXPelsPerMeter;
|
||||
public int biYPelsPerMeter;
|
||||
public uint biClrUsed;
|
||||
public uint biClrImportant;
|
||||
|
||||
public void Init()
|
||||
{
|
||||
biSize = (uint)Marshal.SizeOf(this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The TIFF file header.
|
||||
/// Needed for supporting DAT.IMAGENATIVEXFER...
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
struct TIFFHEADER
|
||||
{
|
||||
public ushort u8ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
public ushort u16u16IFD;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An individual TIFF Tag.
|
||||
/// Needed for supporting DAT.IMAGENATIVEXFER...
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
struct TIFFTAG
|
||||
{
|
||||
public ushort u16Tag;
|
||||
public ushort u16Type;
|
||||
public uint u32Count;
|
||||
public uint u32Value;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Private Definitions (TIFF): this stuff should have been here all along to
|
||||
// make it easier to share. It's only needed when writing out files from
|
||||
// DAT_IMAGEMEMXFER data.
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// A TIFF header is composed of tags...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffTag
|
||||
{
|
||||
public TiffTag(ushort a_u16Tag, ushort a_u16Type, uint a_u32Count, uint a_u32Value)
|
||||
{
|
||||
u16Tag = a_u16Tag;
|
||||
u16Type = a_u16Type;
|
||||
u32Count = a_u32Count;
|
||||
u32Value = a_u32Value;
|
||||
}
|
||||
|
||||
public ushort u16Tag;
|
||||
public ushort u16Type;
|
||||
public uint u32Count;
|
||||
public uint u32Value;
|
||||
}
|
||||
|
||||
// TIFF header for Uncompressed BITONAL images...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffBitonalUncompressed
|
||||
{
|
||||
// Constructor...
|
||||
public TiffBitonalUncompressed(uint a_u32Width, uint a_u32Height, uint a_u32Resolution, uint a_u32Size)
|
||||
{
|
||||
// Header...
|
||||
u16ByteOrder = 0x4949;
|
||||
u16Version = 42;
|
||||
u32OffsetFirstIFD = 8;
|
||||
|
||||
// First IFD...
|
||||
u16IFD = 16;
|
||||
|
||||
// Tags...
|
||||
tifftagNewSubFileType = new TiffTag(254, 4, 1, 0);
|
||||
tifftagSubFileType = new TiffTag(255, 3, 1, 1);
|
||||
tifftagImageWidth = new TiffTag(256, 4, 1, a_u32Width);
|
||||
tifftagImageLength = new TiffTag(257, 4, 1, a_u32Height);
|
||||
tifftagBitsPerSample = new TiffTag(258, 3, 1, 1);
|
||||
tifftagCompression = new TiffTag(259, 3, 1, 1);
|
||||
tifftagPhotometricInterpretation = new TiffTag(262, 3, 1, 1);
|
||||
tifftagFillOrder = new TiffTag(266, 3, 1, 1);
|
||||
tifftagStripOffsets = new TiffTag(273, 4, 1, 222);
|
||||
tifftagSamplesPerPixel = new TiffTag(277, 3, 1, 1);
|
||||
tifftagRowsPerStrip = new TiffTag(278, 4, 1, a_u32Height);
|
||||
tifftagStripByteCounts = new TiffTag(279, 4, 1, a_u32Size);
|
||||
tifftagXResolution = new TiffTag(282, 5, 1, 206);
|
||||
tifftagYResolution = new TiffTag(283, 5, 1, 214);
|
||||
tifftagT4T6Options = new TiffTag(292, 4, 1, 0);
|
||||
tifftagResolutionUnit = new TiffTag(296, 3, 1, 2);
|
||||
|
||||
// Footer...
|
||||
u32NextIFD = 0;
|
||||
u64XResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
u64YResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
}
|
||||
|
||||
// Header...
|
||||
public ushort u16ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
|
||||
// First IFD...
|
||||
public ushort u16IFD;
|
||||
|
||||
// Tags...
|
||||
public TiffTag tifftagNewSubFileType;
|
||||
public TiffTag tifftagSubFileType;
|
||||
public TiffTag tifftagImageWidth;
|
||||
public TiffTag tifftagImageLength;
|
||||
public TiffTag tifftagBitsPerSample;
|
||||
public TiffTag tifftagCompression;
|
||||
public TiffTag tifftagPhotometricInterpretation;
|
||||
public TiffTag tifftagFillOrder;
|
||||
public TiffTag tifftagStripOffsets;
|
||||
public TiffTag tifftagSamplesPerPixel;
|
||||
public TiffTag tifftagRowsPerStrip;
|
||||
public TiffTag tifftagStripByteCounts;
|
||||
public TiffTag tifftagXResolution;
|
||||
public TiffTag tifftagYResolution;
|
||||
public TiffTag tifftagT4T6Options;
|
||||
public TiffTag tifftagResolutionUnit;
|
||||
|
||||
// Footer...
|
||||
public uint u32NextIFD;
|
||||
public ulong u64XResolution;
|
||||
public ulong u64YResolution;
|
||||
}
|
||||
|
||||
// TIFF header for Group4 BITONAL images...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffBitonalG4
|
||||
{
|
||||
// Constructor...
|
||||
public TiffBitonalG4(uint a_u32Width, uint a_u32Height, uint a_u32Resolution, uint a_u32Size)
|
||||
{
|
||||
// Header...
|
||||
u16ByteOrder = 0x4949;
|
||||
u16Version = 42;
|
||||
u32OffsetFirstIFD = 8;
|
||||
|
||||
// First IFD...
|
||||
u16IFD = 16;
|
||||
|
||||
// Tags...
|
||||
tifftagNewSubFileType = new TiffTag(254, 4, 1, 0);
|
||||
tifftagSubFileType = new TiffTag(255, 3, 1, 1);
|
||||
tifftagImageWidth = new TiffTag(256, 4, 1, a_u32Width);
|
||||
tifftagImageLength = new TiffTag(257, 4, 1, a_u32Height);
|
||||
tifftagBitsPerSample = new TiffTag(258, 3, 1, 1);
|
||||
tifftagCompression = new TiffTag(259, 3, 1, 4);
|
||||
tifftagPhotometricInterpretation = new TiffTag(262, 3, 1, 0);
|
||||
tifftagFillOrder = new TiffTag(266, 3, 1, 1);
|
||||
tifftagStripOffsets = new TiffTag(273, 4, 1, 222);
|
||||
tifftagSamplesPerPixel = new TiffTag(277, 3, 1, 1);
|
||||
tifftagRowsPerStrip = new TiffTag(278, 4, 1, a_u32Height);
|
||||
tifftagStripByteCounts = new TiffTag(279, 4, 1, a_u32Size);
|
||||
tifftagXResolution = new TiffTag(282, 5, 1, 206);
|
||||
tifftagYResolution = new TiffTag(283, 5, 1, 214);
|
||||
tifftagT4T6Options = new TiffTag(293, 4, 1, 0);
|
||||
tifftagResolutionUnit = new TiffTag(296, 3, 1, 2);
|
||||
|
||||
// Footer...
|
||||
u32NextIFD = 0;
|
||||
u64XResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
u64YResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
}
|
||||
|
||||
// Header...
|
||||
public ushort u16ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
|
||||
// First IFD...
|
||||
public ushort u16IFD;
|
||||
|
||||
// Tags...
|
||||
public TiffTag tifftagNewSubFileType;
|
||||
public TiffTag tifftagSubFileType;
|
||||
public TiffTag tifftagImageWidth;
|
||||
public TiffTag tifftagImageLength;
|
||||
public TiffTag tifftagBitsPerSample;
|
||||
public TiffTag tifftagCompression;
|
||||
public TiffTag tifftagPhotometricInterpretation;
|
||||
public TiffTag tifftagFillOrder;
|
||||
public TiffTag tifftagStripOffsets;
|
||||
public TiffTag tifftagSamplesPerPixel;
|
||||
public TiffTag tifftagRowsPerStrip;
|
||||
public TiffTag tifftagStripByteCounts;
|
||||
public TiffTag tifftagXResolution;
|
||||
public TiffTag tifftagYResolution;
|
||||
public TiffTag tifftagT4T6Options;
|
||||
public TiffTag tifftagResolutionUnit;
|
||||
|
||||
// Footer...
|
||||
public uint u32NextIFD;
|
||||
public ulong u64XResolution;
|
||||
public ulong u64YResolution;
|
||||
}
|
||||
|
||||
// TIFF header for Uncompressed GRAYSCALE images...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffGrayscaleUncompressed
|
||||
{
|
||||
// Constructor...
|
||||
public TiffGrayscaleUncompressed(uint a_u32Width, uint a_u32Height, uint a_u32Resolution, uint a_u32Size)
|
||||
{
|
||||
// Header...
|
||||
u16ByteOrder = 0x4949;
|
||||
u16Version = 42;
|
||||
u32OffsetFirstIFD = 8;
|
||||
|
||||
// First IFD...
|
||||
u16IFD = 14;
|
||||
|
||||
// Tags...
|
||||
tifftagNewSubFileType = new TiffTag(254, 4, 1, 0);
|
||||
tifftagSubFileType = new TiffTag(255, 3, 1, 1);
|
||||
tifftagImageWidth = new TiffTag(256, 4, 1, a_u32Width);
|
||||
tifftagImageLength = new TiffTag(257, 4, 1, a_u32Height);
|
||||
tifftagBitsPerSample = new TiffTag(258, 3, 1, 8);
|
||||
tifftagCompression = new TiffTag(259, 3, 1, 1);
|
||||
tifftagPhotometricInterpretation = new TiffTag(262, 3, 1, 1);
|
||||
tifftagStripOffsets = new TiffTag(273, 4, 1, 198);
|
||||
tifftagSamplesPerPixel = new TiffTag(277, 3, 1, 1);
|
||||
tifftagRowsPerStrip = new TiffTag(278, 4, 1, a_u32Height);
|
||||
tifftagStripByteCounts = new TiffTag(279, 4, 1, a_u32Size);
|
||||
tifftagXResolution = new TiffTag(282, 5, 1, 182);
|
||||
tifftagYResolution = new TiffTag(283, 5, 1, 190);
|
||||
tifftagResolutionUnit = new TiffTag(296, 3, 1, 2);
|
||||
|
||||
// Footer...
|
||||
u32NextIFD = 0;
|
||||
u64XResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
u64YResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
}
|
||||
|
||||
// Header...
|
||||
public ushort u16ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
|
||||
// First IFD...
|
||||
public ushort u16IFD;
|
||||
|
||||
// Tags...
|
||||
public TiffTag tifftagNewSubFileType;
|
||||
public TiffTag tifftagSubFileType;
|
||||
public TiffTag tifftagImageWidth;
|
||||
public TiffTag tifftagImageLength;
|
||||
public TiffTag tifftagBitsPerSample;
|
||||
public TiffTag tifftagCompression;
|
||||
public TiffTag tifftagPhotometricInterpretation;
|
||||
public TiffTag tifftagStripOffsets;
|
||||
public TiffTag tifftagSamplesPerPixel;
|
||||
public TiffTag tifftagRowsPerStrip;
|
||||
public TiffTag tifftagStripByteCounts;
|
||||
public TiffTag tifftagXResolution;
|
||||
public TiffTag tifftagYResolution;
|
||||
public TiffTag tifftagResolutionUnit;
|
||||
|
||||
// Footer...
|
||||
public uint u32NextIFD;
|
||||
public ulong u64XResolution;
|
||||
public ulong u64YResolution;
|
||||
}
|
||||
|
||||
// TIFF header for Uncompressed COLOR images...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffColorUncompressed
|
||||
{
|
||||
// Constructor...
|
||||
public TiffColorUncompressed(uint a_u32Width, uint a_u32Height, uint a_u32Resolution, uint a_u32Size)
|
||||
{
|
||||
// Header...
|
||||
u16ByteOrder = 0x4949;
|
||||
u16Version = 42;
|
||||
u32OffsetFirstIFD = 8;
|
||||
|
||||
// First IFD...
|
||||
u16IFD = 14;
|
||||
|
||||
// Tags...
|
||||
tifftagNewSubFileType = new TiffTag(254, 4, 1, 0);
|
||||
tifftagSubFileType = new TiffTag(255, 3, 1, 1);
|
||||
tifftagImageWidth = new TiffTag(256, 4, 1, a_u32Width);
|
||||
tifftagImageLength = new TiffTag(257, 4, 1, a_u32Height);
|
||||
tifftagBitsPerSample = new TiffTag(258, 3, 3, 182);
|
||||
tifftagCompression = new TiffTag(259, 3, 1, 1);
|
||||
tifftagPhotometricInterpretation = new TiffTag(262, 3, 1, 2);
|
||||
tifftagStripOffsets = new TiffTag(273, 4, 1, 204);
|
||||
tifftagSamplesPerPixel = new TiffTag(277, 3, 1, 3);
|
||||
tifftagRowsPerStrip = new TiffTag(278, 4, 1, a_u32Height);
|
||||
tifftagStripByteCounts = new TiffTag(279, 4, 1, a_u32Size);
|
||||
tifftagXResolution = new TiffTag(282, 5, 1, 188);
|
||||
tifftagYResolution = new TiffTag(283, 5, 1, 196);
|
||||
tifftagResolutionUnit = new TiffTag(296, 3, 1, 2);
|
||||
|
||||
// Footer...
|
||||
u32NextIFD = 0;
|
||||
u16XBitsPerSample1 = 8;
|
||||
u16XBitsPerSample2 = 8;
|
||||
u16XBitsPerSample3 = 8;
|
||||
u64XResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
u64YResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
}
|
||||
|
||||
// Header...
|
||||
public ushort u16ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
|
||||
// First IFD...
|
||||
public ushort u16IFD;
|
||||
|
||||
// Tags...
|
||||
public TiffTag tifftagNewSubFileType;
|
||||
public TiffTag tifftagSubFileType;
|
||||
public TiffTag tifftagImageWidth;
|
||||
public TiffTag tifftagImageLength;
|
||||
public TiffTag tifftagBitsPerSample;
|
||||
public TiffTag tifftagCompression;
|
||||
public TiffTag tifftagPhotometricInterpretation;
|
||||
public TiffTag tifftagStripOffsets;
|
||||
public TiffTag tifftagSamplesPerPixel;
|
||||
public TiffTag tifftagRowsPerStrip;
|
||||
public TiffTag tifftagStripByteCounts;
|
||||
public TiffTag tifftagXResolution;
|
||||
public TiffTag tifftagYResolution;
|
||||
public TiffTag tifftagResolutionUnit;
|
||||
|
||||
// Footer...
|
||||
public uint u32NextIFD;
|
||||
public ushort u16XBitsPerSample1;
|
||||
public ushort u16XBitsPerSample2;
|
||||
public ushort u16XBitsPerSample3;
|
||||
public ulong u64XResolution;
|
||||
public ulong u64YResolution;
|
||||
}
|
||||
|
||||
}
|
@ -10054,314 +10054,6 @@ namespace TWAINWorkingGroup
|
||||
#endregion
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Private Definitions (TIFF): this stuff should have been here all along to
|
||||
// make it easier to share. It's only needed when writing out files from
|
||||
// DAT_IMAGEMEMXFER data.
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#region Private Definitions (TIFF)...
|
||||
|
||||
// A TIFF header is composed of tags...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffTag
|
||||
{
|
||||
public TiffTag(ushort a_u16Tag, ushort a_u16Type, uint a_u32Count, uint a_u32Value)
|
||||
{
|
||||
u16Tag = a_u16Tag;
|
||||
u16Type = a_u16Type;
|
||||
u32Count = a_u32Count;
|
||||
u32Value = a_u32Value;
|
||||
}
|
||||
|
||||
public ushort u16Tag;
|
||||
public ushort u16Type;
|
||||
public uint u32Count;
|
||||
public uint u32Value;
|
||||
}
|
||||
|
||||
// TIFF header for Uncompressed BITONAL images...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffBitonalUncompressed
|
||||
{
|
||||
// Constructor...
|
||||
public TiffBitonalUncompressed(uint a_u32Width, uint a_u32Height, uint a_u32Resolution, uint a_u32Size)
|
||||
{
|
||||
// Header...
|
||||
u16ByteOrder = 0x4949;
|
||||
u16Version = 42;
|
||||
u32OffsetFirstIFD = 8;
|
||||
|
||||
// First IFD...
|
||||
u16IFD = 16;
|
||||
|
||||
// Tags...
|
||||
tifftagNewSubFileType = new TiffTag(254, 4, 1, 0);
|
||||
tifftagSubFileType = new TiffTag(255, 3, 1, 1);
|
||||
tifftagImageWidth = new TiffTag(256, 4, 1, a_u32Width);
|
||||
tifftagImageLength = new TiffTag(257, 4, 1, a_u32Height);
|
||||
tifftagBitsPerSample = new TiffTag(258, 3, 1, 1);
|
||||
tifftagCompression = new TiffTag(259, 3, 1, 1);
|
||||
tifftagPhotometricInterpretation = new TiffTag(262, 3, 1, 1);
|
||||
tifftagFillOrder = new TiffTag(266, 3, 1, 1);
|
||||
tifftagStripOffsets = new TiffTag(273, 4, 1, 222);
|
||||
tifftagSamplesPerPixel = new TiffTag(277, 3, 1, 1);
|
||||
tifftagRowsPerStrip = new TiffTag(278, 4, 1, a_u32Height);
|
||||
tifftagStripByteCounts = new TiffTag(279, 4, 1, a_u32Size);
|
||||
tifftagXResolution = new TiffTag(282, 5, 1, 206);
|
||||
tifftagYResolution = new TiffTag(283, 5, 1, 214);
|
||||
tifftagT4T6Options = new TiffTag(292, 4, 1, 0);
|
||||
tifftagResolutionUnit = new TiffTag(296, 3, 1, 2);
|
||||
|
||||
// Footer...
|
||||
u32NextIFD = 0;
|
||||
u64XResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
u64YResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
}
|
||||
|
||||
// Header...
|
||||
public ushort u16ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
|
||||
// First IFD...
|
||||
public ushort u16IFD;
|
||||
|
||||
// Tags...
|
||||
public TiffTag tifftagNewSubFileType;
|
||||
public TiffTag tifftagSubFileType;
|
||||
public TiffTag tifftagImageWidth;
|
||||
public TiffTag tifftagImageLength;
|
||||
public TiffTag tifftagBitsPerSample;
|
||||
public TiffTag tifftagCompression;
|
||||
public TiffTag tifftagPhotometricInterpretation;
|
||||
public TiffTag tifftagFillOrder;
|
||||
public TiffTag tifftagStripOffsets;
|
||||
public TiffTag tifftagSamplesPerPixel;
|
||||
public TiffTag tifftagRowsPerStrip;
|
||||
public TiffTag tifftagStripByteCounts;
|
||||
public TiffTag tifftagXResolution;
|
||||
public TiffTag tifftagYResolution;
|
||||
public TiffTag tifftagT4T6Options;
|
||||
public TiffTag tifftagResolutionUnit;
|
||||
|
||||
// Footer...
|
||||
public uint u32NextIFD;
|
||||
public ulong u64XResolution;
|
||||
public ulong u64YResolution;
|
||||
}
|
||||
|
||||
// TIFF header for Group4 BITONAL images...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffBitonalG4
|
||||
{
|
||||
// Constructor...
|
||||
public TiffBitonalG4(uint a_u32Width, uint a_u32Height, uint a_u32Resolution, uint a_u32Size)
|
||||
{
|
||||
// Header...
|
||||
u16ByteOrder = 0x4949;
|
||||
u16Version = 42;
|
||||
u32OffsetFirstIFD = 8;
|
||||
|
||||
// First IFD...
|
||||
u16IFD = 16;
|
||||
|
||||
// Tags...
|
||||
tifftagNewSubFileType = new TiffTag(254, 4, 1, 0);
|
||||
tifftagSubFileType = new TiffTag(255, 3, 1, 1);
|
||||
tifftagImageWidth = new TiffTag(256, 4, 1, a_u32Width);
|
||||
tifftagImageLength = new TiffTag(257, 4, 1, a_u32Height);
|
||||
tifftagBitsPerSample = new TiffTag(258, 3, 1, 1);
|
||||
tifftagCompression = new TiffTag(259, 3, 1, 4);
|
||||
tifftagPhotometricInterpretation = new TiffTag(262, 3, 1, 0);
|
||||
tifftagFillOrder = new TiffTag(266, 3, 1, 1);
|
||||
tifftagStripOffsets = new TiffTag(273, 4, 1, 222);
|
||||
tifftagSamplesPerPixel = new TiffTag(277, 3, 1, 1);
|
||||
tifftagRowsPerStrip = new TiffTag(278, 4, 1, a_u32Height);
|
||||
tifftagStripByteCounts = new TiffTag(279, 4, 1, a_u32Size);
|
||||
tifftagXResolution = new TiffTag(282, 5, 1, 206);
|
||||
tifftagYResolution = new TiffTag(283, 5, 1, 214);
|
||||
tifftagT4T6Options = new TiffTag(293, 4, 1, 0);
|
||||
tifftagResolutionUnit = new TiffTag(296, 3, 1, 2);
|
||||
|
||||
// Footer...
|
||||
u32NextIFD = 0;
|
||||
u64XResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
u64YResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
}
|
||||
|
||||
// Header...
|
||||
public ushort u16ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
|
||||
// First IFD...
|
||||
public ushort u16IFD;
|
||||
|
||||
// Tags...
|
||||
public TiffTag tifftagNewSubFileType;
|
||||
public TiffTag tifftagSubFileType;
|
||||
public TiffTag tifftagImageWidth;
|
||||
public TiffTag tifftagImageLength;
|
||||
public TiffTag tifftagBitsPerSample;
|
||||
public TiffTag tifftagCompression;
|
||||
public TiffTag tifftagPhotometricInterpretation;
|
||||
public TiffTag tifftagFillOrder;
|
||||
public TiffTag tifftagStripOffsets;
|
||||
public TiffTag tifftagSamplesPerPixel;
|
||||
public TiffTag tifftagRowsPerStrip;
|
||||
public TiffTag tifftagStripByteCounts;
|
||||
public TiffTag tifftagXResolution;
|
||||
public TiffTag tifftagYResolution;
|
||||
public TiffTag tifftagT4T6Options;
|
||||
public TiffTag tifftagResolutionUnit;
|
||||
|
||||
// Footer...
|
||||
public uint u32NextIFD;
|
||||
public ulong u64XResolution;
|
||||
public ulong u64YResolution;
|
||||
}
|
||||
|
||||
// TIFF header for Uncompressed GRAYSCALE images...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffGrayscaleUncompressed
|
||||
{
|
||||
// Constructor...
|
||||
public TiffGrayscaleUncompressed(uint a_u32Width, uint a_u32Height, uint a_u32Resolution, uint a_u32Size)
|
||||
{
|
||||
// Header...
|
||||
u16ByteOrder = 0x4949;
|
||||
u16Version = 42;
|
||||
u32OffsetFirstIFD = 8;
|
||||
|
||||
// First IFD...
|
||||
u16IFD = 14;
|
||||
|
||||
// Tags...
|
||||
tifftagNewSubFileType = new TiffTag(254, 4, 1, 0);
|
||||
tifftagSubFileType = new TiffTag(255, 3, 1, 1);
|
||||
tifftagImageWidth = new TiffTag(256, 4, 1, a_u32Width);
|
||||
tifftagImageLength = new TiffTag(257, 4, 1, a_u32Height);
|
||||
tifftagBitsPerSample = new TiffTag(258, 3, 1, 8);
|
||||
tifftagCompression = new TiffTag(259, 3, 1, 1);
|
||||
tifftagPhotometricInterpretation = new TiffTag(262, 3, 1, 1);
|
||||
tifftagStripOffsets = new TiffTag(273, 4, 1, 198);
|
||||
tifftagSamplesPerPixel = new TiffTag(277, 3, 1, 1);
|
||||
tifftagRowsPerStrip = new TiffTag(278, 4, 1, a_u32Height);
|
||||
tifftagStripByteCounts = new TiffTag(279, 4, 1, a_u32Size);
|
||||
tifftagXResolution = new TiffTag(282, 5, 1, 182);
|
||||
tifftagYResolution = new TiffTag(283, 5, 1, 190);
|
||||
tifftagResolutionUnit = new TiffTag(296, 3, 1, 2);
|
||||
|
||||
// Footer...
|
||||
u32NextIFD = 0;
|
||||
u64XResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
u64YResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
}
|
||||
|
||||
// Header...
|
||||
public ushort u16ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
|
||||
// First IFD...
|
||||
public ushort u16IFD;
|
||||
|
||||
// Tags...
|
||||
public TiffTag tifftagNewSubFileType;
|
||||
public TiffTag tifftagSubFileType;
|
||||
public TiffTag tifftagImageWidth;
|
||||
public TiffTag tifftagImageLength;
|
||||
public TiffTag tifftagBitsPerSample;
|
||||
public TiffTag tifftagCompression;
|
||||
public TiffTag tifftagPhotometricInterpretation;
|
||||
public TiffTag tifftagStripOffsets;
|
||||
public TiffTag tifftagSamplesPerPixel;
|
||||
public TiffTag tifftagRowsPerStrip;
|
||||
public TiffTag tifftagStripByteCounts;
|
||||
public TiffTag tifftagXResolution;
|
||||
public TiffTag tifftagYResolution;
|
||||
public TiffTag tifftagResolutionUnit;
|
||||
|
||||
// Footer...
|
||||
public uint u32NextIFD;
|
||||
public ulong u64XResolution;
|
||||
public ulong u64YResolution;
|
||||
}
|
||||
|
||||
// TIFF header for Uncompressed COLOR images...
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 2)]
|
||||
public struct TiffColorUncompressed
|
||||
{
|
||||
// Constructor...
|
||||
public TiffColorUncompressed(uint a_u32Width, uint a_u32Height, uint a_u32Resolution, uint a_u32Size)
|
||||
{
|
||||
// Header...
|
||||
u16ByteOrder = 0x4949;
|
||||
u16Version = 42;
|
||||
u32OffsetFirstIFD = 8;
|
||||
|
||||
// First IFD...
|
||||
u16IFD = 14;
|
||||
|
||||
// Tags...
|
||||
tifftagNewSubFileType = new TiffTag(254, 4, 1, 0);
|
||||
tifftagSubFileType = new TiffTag(255, 3, 1, 1);
|
||||
tifftagImageWidth = new TiffTag(256, 4, 1, a_u32Width);
|
||||
tifftagImageLength = new TiffTag(257, 4, 1, a_u32Height);
|
||||
tifftagBitsPerSample = new TiffTag(258, 3, 3, 182);
|
||||
tifftagCompression = new TiffTag(259, 3, 1, 1);
|
||||
tifftagPhotometricInterpretation = new TiffTag(262, 3, 1, 2);
|
||||
tifftagStripOffsets = new TiffTag(273, 4, 1, 204);
|
||||
tifftagSamplesPerPixel = new TiffTag(277, 3, 1, 3);
|
||||
tifftagRowsPerStrip = new TiffTag(278, 4, 1, a_u32Height);
|
||||
tifftagStripByteCounts = new TiffTag(279, 4, 1, a_u32Size);
|
||||
tifftagXResolution = new TiffTag(282, 5, 1, 188);
|
||||
tifftagYResolution = new TiffTag(283, 5, 1, 196);
|
||||
tifftagResolutionUnit = new TiffTag(296, 3, 1, 2);
|
||||
|
||||
// Footer...
|
||||
u32NextIFD = 0;
|
||||
u16XBitsPerSample1 = 8;
|
||||
u16XBitsPerSample2 = 8;
|
||||
u16XBitsPerSample3 = 8;
|
||||
u64XResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
u64YResolution = (ulong)0x100000000 + (ulong)a_u32Resolution;
|
||||
}
|
||||
|
||||
// Header...
|
||||
public ushort u16ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
|
||||
// First IFD...
|
||||
public ushort u16IFD;
|
||||
|
||||
// Tags...
|
||||
public TiffTag tifftagNewSubFileType;
|
||||
public TiffTag tifftagSubFileType;
|
||||
public TiffTag tifftagImageWidth;
|
||||
public TiffTag tifftagImageLength;
|
||||
public TiffTag tifftagBitsPerSample;
|
||||
public TiffTag tifftagCompression;
|
||||
public TiffTag tifftagPhotometricInterpretation;
|
||||
public TiffTag tifftagStripOffsets;
|
||||
public TiffTag tifftagSamplesPerPixel;
|
||||
public TiffTag tifftagRowsPerStrip;
|
||||
public TiffTag tifftagStripByteCounts;
|
||||
public TiffTag tifftagXResolution;
|
||||
public TiffTag tifftagYResolution;
|
||||
public TiffTag tifftagResolutionUnit;
|
||||
|
||||
// Footer...
|
||||
public uint u32NextIFD;
|
||||
public ushort u16XBitsPerSample1;
|
||||
public ushort u16XBitsPerSample2;
|
||||
public ushort u16XBitsPerSample3;
|
||||
public ulong u64XResolution;
|
||||
public ulong u64YResolution;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -12299,71 +11991,6 @@ namespace TWAINWorkingGroup
|
||||
public POINT pt;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The header for a Bitmap file.
|
||||
/// Needed for supporting DAT.IMAGENATIVEXFER...
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
private struct BITMAPFILEHEADER
|
||||
{
|
||||
public ushort bfType;
|
||||
public uint bfSize;
|
||||
public ushort bfReserved1;
|
||||
public ushort bfReserved2;
|
||||
public uint bfOffBits;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The header for a Device Independent Bitmap (DIB).
|
||||
/// Needed for supporting DAT.IMAGENATIVEXFER...
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
private struct BITMAPINFOHEADER
|
||||
{
|
||||
public uint biSize;
|
||||
public int biWidth;
|
||||
public int biHeight;
|
||||
public ushort biPlanes;
|
||||
public ushort biBitCount;
|
||||
public uint biCompression;
|
||||
public uint biSizeImage;
|
||||
public int biXPelsPerMeter;
|
||||
public int biYPelsPerMeter;
|
||||
public uint biClrUsed;
|
||||
public uint biClrImportant;
|
||||
|
||||
public void Init()
|
||||
{
|
||||
biSize = (uint)Marshal.SizeOf(this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The TIFF file header.
|
||||
/// Needed for supporting DAT.IMAGENATIVEXFER...
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
private struct TIFFHEADER
|
||||
{
|
||||
public ushort u8ByteOrder;
|
||||
public ushort u16Version;
|
||||
public uint u32OffsetFirstIFD;
|
||||
public ushort u16u16IFD;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An individual TIFF Tag.
|
||||
/// Needed for supporting DAT.IMAGENATIVEXFER...
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
private struct TIFFTAG
|
||||
{
|
||||
public ushort u16Tag;
|
||||
public ushort u16Type;
|
||||
public uint u32Count;
|
||||
public uint u32Value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@ -12382,7 +12009,7 @@ namespace TWAINWorkingGroup
|
||||
/// <summary>
|
||||
/// Our Data Source identity...
|
||||
/// </summary>
|
||||
private TW_IDENTITY m_twidentityDs;
|
||||
internal TW_IDENTITY m_twidentityDs;
|
||||
private TW_IDENTITY_LEGACY m_twidentitylegacyDs;
|
||||
private TW_IDENTITY_MACOSX m_twidentitymacosxDs;
|
||||
|
||||
|
@ -217,11 +217,7 @@ namespace NTwain
|
||||
{
|
||||
if (State > STATE.S3)
|
||||
{
|
||||
TW_IDENTITY twidentity = default;
|
||||
if (CsvSerializer.CsvToIdentity(ref twidentity, _twain.GetDsIdentity()))
|
||||
{
|
||||
return twidentity;
|
||||
}
|
||||
return _twain.m_twidentityDs;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -276,9 +272,7 @@ namespace NTwain
|
||||
if ((_twain.GetState() == STATE.S4) && (state < STATE.S4))
|
||||
{
|
||||
_caps = null;
|
||||
TW_IDENTITY twidentity = default;
|
||||
CsvSerializer.CsvToIdentity(ref twidentity, _twain.GetDsIdentity());
|
||||
_twain.DatIdentity(DG.CONTROL, MSG.CLOSEDS, ref twidentity);
|
||||
_twain.DatIdentity(DG.CONTROL, MSG.CLOSEDS, ref _twain.m_twidentityDs);
|
||||
}
|
||||
|
||||
// 3 --> 2
|
||||
|
Loading…
Reference in New Issue
Block a user