Перевернутое растровое изображение от Twain

В настоящее время я получаю отсканированные страницы через Twain и преобразовываю их в Bitmap, используя ссылку BitmapRenderer из проекта twaindotnet, как описано в этом опубликовать.

Мой сканер позволяет мне сканировать лицевую и оборотную сторону. Когда я сканирую страницы только лицевой стороны, это работает как шарм: сгенерированные растровые изображения идеальны. Но когда он сканирует лицевую и оборотную сторону, растровое изображение переворачивается. Иногда вертикально, иногда горизонтально.

Я не могу использовать метод Bitmap.RotateFlip(), потому что эффект не касается каждой картинки, а только когда лицевая-оборотная страницы.

Я пробовал Bitmap.FromHbitmap(), описанный здесь или конструктор по умолчанию, но он выдает ошибку, связанную с GDI+.

Я почти уверен, что проблема заключается в том, что растровое изображение преобразуется из указателя в классе BitmapRenderer. Вот код (я не включил методы Dispose() для ясности):

public class BitmapRenderer : IDisposable
{
    private readonly IntPtr _picturePointer;
    private readonly IntPtr _bitmapPointer;
    private readonly IntPtr _pixelInfoPointer;
    private Rectangle _rectangle;
    private readonly BitmapInfoHeader _bitmapInfo;

    /// <summary>
    /// Initializes a new instance of the <see cref="BitmapRenderer"/> class.
    /// </summary>
    /// <param name="picturePointer_">The picture pointer.</param>
    public BitmapRenderer(IntPtr picturePointer_)
    {
        _picturePointer = picturePointer_;
        _bitmapPointer = Kernel32Native.GlobalLock(picturePointer_);

        _bitmapInfo = new BitmapInfoHeader();
        Marshal.PtrToStructure(_bitmapPointer, _bitmapInfo);

        _rectangle = new Rectangle();
        _rectangle.X = _rectangle.Y = 0;
        _rectangle.Width = _bitmapInfo.Width;
        _rectangle.Height = _bitmapInfo.Height;

        if (_bitmapInfo.SizeImage == 0)
        {
            _bitmapInfo.SizeImage = ((((_bitmapInfo.Width*_bitmapInfo.BitCount) + 31) & ~31) >> 3)*
                                    _bitmapInfo.Height;
        }

        // The following code only works on x86
        Debug.Assert(Marshal.SizeOf(typeof (IntPtr)) == 4);

        int pixelInfoPointer = _bitmapInfo.ClrUsed;
        if ((pixelInfoPointer == 0) && (_bitmapInfo.BitCount <= 8))
            pixelInfoPointer = 1 << _bitmapInfo.BitCount;

        pixelInfoPointer = (pixelInfoPointer*4) + _bitmapInfo.Size + _bitmapPointer.ToInt32();

        _pixelInfoPointer = new IntPtr(pixelInfoPointer);
    }

    /// <summary>
    /// Renders to bitmap.
    /// </summary>
    /// <returns></returns>
    public Bitmap RenderToBitmap()
    {
        Bitmap bitmap = new Bitmap(_rectangle.Width, _rectangle.Height);

        using (Graphics graphics = Graphics.FromImage(bitmap))
        {
            IntPtr hdc = graphics.GetHdc();
            try
            {
                Gdi32Native.SetDIBitsToDevice(hdc, 0, 0, _rectangle.Width, _rectangle.Height,
                                              0, 0, 0, _rectangle.Height, _pixelInfoPointer, _bitmapPointer, 0);
            }
            finally
            {
                graphics.ReleaseHdc(hdc);
            }
        }
        bitmap.SetResolution(PpmToDpi(_bitmapInfo.XPelsPerMeter), PpmToDpi(_bitmapInfo.YPelsPerMeter));
        return bitmap;
    }

    private static float PpmToDpi(double pixelsPerMeter_)
    {
        double pixelsPerMillimeter = pixelsPerMeter_/1000.0;
        double dotsPerInch = pixelsPerMillimeter*25.4;
        return (float) Math.Round(dotsPerInch, 2);
    }

Я не понимаю, откуда это и как это решить.

РЕДАКТИРОВАТЬ

Похоже, эта ситуация не связана с twain преобразование в растровое изображение (вообще проблема не в проекте twaindotnet).

Это происходит только с рукописными страницами. Это проблема автоматического распознавания текста. Кто-нибудь знает, как отключить OCR для рукописного документа?


person Nate B.    schedule 18.12.2014    source источник
comment
Вы действительно не знаете, когда он перевернут вертикально или горизонтально?   -  person Thomas Ayoub    schedule 18.12.2014
comment
Нет, иначе было бы проще. Может есть способ, но я почти не вижу, как и где   -  person Nate B.    schedule 18.12.2014
comment
Я рекомендую этот вопрос: meta.stackoverflow.com/questions/280408/, но я не могу помочь вам с таким объемом информации:/   -  person Thomas Ayoub    schedule 18.12.2014
comment
Спасибо за ваш комментарий Томас. Я отредактировал свой пост, надеюсь, стало понятнее.   -  person Nate B.    schedule 18.12.2014
comment
Это происходит вообще в любом другом приложении? Это может быть проблема с драйвером сканера twain (в этом случае невозможно, чтобы библиотека twain могла ее устранить). Какой именно сканер?   -  person Jcl    schedule 18.12.2014
comment
Это Fujitsu fi-7160. Это происходит только с рукописными страницами, поэтому это проблема OCR. Я не знаю, как отключить эту проверку OCR. Есть идеи ?   -  person Nate B.    schedule 19.12.2014