C # и ошибка tessaract: «Одновременно может быть обработано только одно изображение. Пожалуйста, убедитесь, что вы удалили страницу, как только закончили с ней». - PullRequest
0 голосов
/ 31 октября 2019

Я сканирую страницы сканером через saraff.twain, а затем проверяю, есть ли текст на странице с тессарактом. Мой код:

    private bool IsBlank(Bitmap image)
    {
        return String.IsNullOrEmpty(tEngine.Process(image, PageSegMode.Auto).GetText()); 
    }

    public void DrawToPDF(int index)
    {
        try
        {
            // if get image, put in pdf via stream
            using (var image = twain.GetImage(index))
            using (var stream = new MemoryStream())
            {
                LOGGER.Debug("checking if blank...");
                using (Bitmap bitMapImage =  new Bitmap(image))
                {
                    if (!IsBlank(bitMapImage))
                    {
                        LOGGER.Debug("page is not blank, adding...");
                        PdfPage page = pdf.AddPage();
                        XGraphics gfx = XGraphics.FromPdfPage(page);
                        image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                        // draw page
                        using (var xImage = XImage.FromStream(stream))
                        {
                            gfx.DrawImage(xImage, 0, 0, page.Width, page.Height);
                        }
                        LOGGER.Debug("page added.");
                    }
                    else
                    {
                        LOGGER.Debug("page is blank, skip.");
                    }
                }
            }
        }
        catch (Exception ex)
        {
            LOGGER.Warn(ex, $"error: {ex.Message}");
        }
    }

Он работает нормально, пока я не позвоню DrawToPDF во второй раз и получу "Только одно изображение может быть обработано за один раз. Пожалуйста, убедитесь, что вы удалили страницу, как только закончили с ней."Чтобы понять, что не так, я использовал отладчик Visual Studio и делал снимок перед каждым вызовом DrawToPDF ().

1

Единственный новый объект, добавляемый в память перед каждым новым DrawToPDF() вызов был растровым ...

2

Я в замешательстве ... Как я должен сделать это правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...