nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

А жизнь-то начинает удаваться!

С каждым новым сканированием это становится всё более удобно. На этот раз добавил вкладку "Ориентация" - можно только что отсканированную страницу повернуть, а можно ещё поставить галочку "поворачивать каждую следующую на 180" - так обычно нужно, когда сканируешь книжку, страницу за страницей.

CaesarScan29_04_2017.png

В кои-то веки "просмотр" действительно становится похож на просмотр - видишь страницу в нужной ориентации и довольно качественной - никакого муара в принципе, потому как нет и децимации - сначала примерно до размеров экрана картинка масштабируется в моей библиотеке, с учетом гаммы (если её не учитывать, то картинка имеет свойство темнеть при масштабировании), а "последние метры" проходятся с помощью классического StretchBLT, но с предварительно установленным режимом STRETCH_HALFTONE - он заметно медленнее работает (вместо выкидывания лишних пикселов и строк - честное усреднение), зато качественно. Нужно, чтобы уже в момент окончания сканирования страницы можно было понять - вся ли она отсканировалась, нет ли там какого мусора (пыли, волос), смаза и пр. А заодно и "техника скорочтения" - как ни странно, если я сканирую книжку, которую до этого не читал, то от такого беглого просмотра я уже чего-то усваиваю, хотя бы знаю, что вообще в этой книге можно интересного найти и в каком примерно месте.

Но работы ещё вагон и маленькая тележка, причем её количество лишь возрастает - не потому что ничего не получается, а потому что количество хотелок непрерывно прибавляется. Да еще и сканера у меня стало 4, все разные, попробуй заставь эту программу со всеми заработать как следует!


Картинка preview выводится здесь без управления цветом, не сделал ещё построение и добавление цветового профиля "на месте". Нужно и интерфейс придумать не совсем вырвиглазный, и научиться наконец-то создавать DIB section с цветовым профилем.

Также можно увидеть вкладку Stripe Removal - не реализована пока. Подумалось, что качественно вычесть из текущего скана супрематическую крышку сканера можно только при наличии цветового профиля, чтобы уметь переходить в линейную область, а он ещё здесь не реализован до конца. К тому же есть два варианта вычитания полос: либо мы в самом начале делаем скан пустой области и вычитаем его, либо свободную область стекла заклеиваем черной бумагой и используем прямо её - тогда если в процессе работы лампа и сенсор нагреваются и характеристики "едут" - ничего страшного, будут все дружно ехать и взаимно вычитаться. Однако далеко не всегда на стекле будет оставаться свободная область, да и возни больше, и времени на ход каретки и передачу всех данных.

А есть ещё вариант убивать вертикальные полосы без какого-либо эталона, "на глаз".

TWAIN скотина работает у меня только в 32-разрядном приложении, в x64 он пытается найти специальную 64-битную DLL-ку, которой нет нифига, а если бы и была, скорее всего 99.5% сканеров все равно в таком режиме грязно выругались и работать отказались бы... Хоть делай обращение к сканеру отдельным процессом. В 32-битном приложении я умудрился налететь на Out of memory после сканирования около 150 страниц 30х30 см в цвете с разрешением 600 dpi и с параноидальной степенью сжатия. Когда все 4 ядра загрузились, пытаясь зажать 4 таких картинки, out of memory и приключился. Не удивлюсь, если это вообще был результат фрагментации виртуальной памяти - утечек памяти у меня нет, я проверял, а вот фрагментация может и случиться - вроде бы свободной памяти много, однако выделить её одним куском для картинки 8000х8000х24 бита система уже не может, причем я не зря виртуальную память упомянул - тут ни файл подкачки, ни физическая не помогут, их может быть сколько угодно, однако адреса уже все заняты, тупо нет такой зоны свободных адресов. Переход на x64 решил бы проблему на корню - там адресного пространства на 18 экзабайт... (на самом деле меньше, вплоть до 8 ГБ на Windows 7 home basic, но всяко прогресс)

Plustek Opticbook криво отзывается на команду DG_IMAGE / DAT_IMAGELAYOUT / MSG_SET - я пытаюсь задать ему, что именно сканировать на стекле, он возращает CheckStatus, что значит - он согласился поменять область сканирования, но не смог сделать ровно ту, что я просил. Смотрю, что же он предложил взамен - оказалось, область 1/2 на 1/2 дюйма (там используются числа с фиксированной точкой, у каждого целая часть ноль, а дробная 32768) - малюсенький квадратик в углу.

Т.е мой интерфейс он использовать не может в итоге, только свой собственный. Хорошо хоть, он все настройки запоминает, можно один раз выставить и потом уже просто жать кнопку.

Mustek A3 1200s врал с самого начала про поддержку 16-битных значений (16 бит в градациях серого или 48 бит в цвете). Такие значения появляются у него в списке допустимых. При попытке задать ему их он говорит, всё OK, а потом когда приходит время забирать готовую картинку, он говорит, что там обычные 24 бита RGB. Блин, из-за этого козла я так долго возился, изучал Memory transfer mode, не привязанный к Windows Bitmap (который эти 48 бит не поддерживает в принципе). Последняя надежда на Epson Color Perfection - может хоть на нём я эту опцию потестирую.

Кроме того, Mustek некорректно реагирует на ICAP_BITDEPTH / MSG_GET - список выдаёт корректный, 1 бит / 8 бит / 16 бит, а вот значение по умолчанию должно являться индексом этого списка, он же туда суёт значение 8, и у меня при попытке обращения к 8-му элементу случался кирдык, ввёл проверку на предмет долбанутых сканеров.

Ещё этот паршивец требует фактически "выключения/включения", чтобы после сканирования страницы поменять её параметры. По спецификации, при окончании сканирования достаточно вывести его в состояние 4 (capability negotiation), т.е сделать disable source. На деле этого недостаточно, приходится делать Unload source, т.е спускаться к состоянию 3, после чего повторно загружать данный конкретный сканер.
TwainStates.png

Конечно же, GetCurrent не работает, только Get, т.е меня интересует, какое разрешение стоит В ДАННЫЙ МОМЕНТ, он говорит - "понятия не имею". Хорошо - КАКИЕ РАЗРЕШЕНИЯ ТЫ ПОДДЕРЖИВАЕШЬ? Он выделяет память для массива и отвечает - 50, 100, 150, 300, 600, 1200, 2400, 4800 dpi, а в данный момент 600, по умолчанию 300. Ага, а мне тоже пришлось отдельный указатель держать на этот массив а потом ещё утилизировать это дело, не нужное никому. Вот в такие моменты и начинаешь подумывать об ISIS*...

Acer S2W 3200 старый как не знаю кто, с интерфейсом USB1.1 не может под Win XP работать с родными TWAIN драйверами (те что со слоником),


но как ни странно работает через WIA (Windows Image Acquire). Однако "эмуляция" WIA под TWAIN совершенно чудовищная - ни один параметр нельзя изменить программно, можно лишь вызвать диалог сканирования


главная засада, что он ВСЁ забывает после скана одной страницы - RGB или градации серого, область сканирования, разрешение - всё обнуляется. Попробую ещё в WIA поковыряться, там COM Automation, вроде довольно простая штука в освоении.

Блин, всего-то 4 сканера заставить работать - неужели это так сложно!?

* Image and Scanner Interface Specification.
Tags: Книги, программки
Subscribe

  • Нахождение двух самых отдалённых точек

    Пока компьютер долго и упорно мучал симуляцию, я пытался написать на ассемблере алгоритм захвата на ближней дистанции. А сейчас на этом коде можно…

  • Слишком общительный счётчик

    Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы…

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 9 comments