Не загоняется он в QPixmap
pixmap = QPixmap.fromWinHBITMAP(handle) ошибок не выдаёт, но и никакой картинки в нём не появляется.
Plutoа это не подходит?
Python-sane намного понятнее. Но мне нужен Windows
import twain, sys # получаем список имеющихся источников для сканирования sm = twain.SourceManager(1) # некий менеджер в свойствах которого будет этот источник source_list = sm.source_list # получили список источников print(source_list) #sm.close() #exit(0) # создаём объект для работы с источником и указываем ему этот самый источник source = sm.open_source(source_list[0].encode()) # encode() обязателен. Без него не воспринимает. # установка параметра dpi dpi = 150 source.set_capability(twain.ICAP_XRESOLUTION, twain.TWTY_FIX32, dpi) source.set_capability(twain.ICAP_YRESOLUTION, twain.TWTY_FIX32, dpi) # установка цветности pixel_type_map = {'bw' :twain.TWPT_BW, 'gray' :twain.TWPT_GRAY, 'color':twain.TWPT_RGB} pixel_type = pixel_type_map['color'] source.set_capability(twain.ICAP_PIXELTYPE, twain.TWTY_UINT16, pixel_type) # старт сканирования source.RequestAcquire(0, 0) print('fxfp',source.image_info) result = source.XferImageNatively() handle, count = result raw_data = twain.DIBToBMFile(handle) # получаем файлв виде строки from PyQt4 import QtGui from PyQt4.QtGui import QPixmap from PyQt4.QtCore import QByteArray app = QtGui.QApplication(sys.argv) Mw = QtGui.QWidget() Mw.show() layout = QtGui.QVBoxLayout(Mw) Mw.setLayout(layout) lab = QtGui.QLabel('tabName', Mw) layout.addWidget(lab) pixmap = QPixmap() pixmap.loadFromData(QByteArray(raw_data)) # загоняем скартинку в пиксмап source.close() sm.close() print('ps', pixmap.size()) lab.setPixmap(pixmap) sys.exit(app.exec_())
Plutoсам автор советует для этого таки исапользовать acquire_natively. Но он (acquire_natively), я так понимаю, вызывает окошко драйвера сканера где можно сделать прескан, установить дпи, цветность, и прочие настройки, и потом, как нажимаеть “скан”, должен в функцию after возвращать зендл на отканированую картинку. Правда у меня почемкто не хочет сканироват, при нажатии кнопки “скан” ничего не происходит.
Может, если ещё осталось желание, подскажете, как его заставить выполнить ещё одно сканирование.
import twain, sys # получаем список имеющихся источников для сканирования sm = twain.SourceManager(1) # некий менеджер в свойствах которого будет этот источник source_list = sm.source_list # получили список источников print(source_list) #sm.close() #exit(0) from PyQt4 import QtGui from PyQt4.QtGui import QPixmap from PyQt4.QtCore import QByteArray app = QtGui.QApplication(sys.argv) size = 256 # будем уменьшать наши картинки чтобы влезли... Mw = QtGui.QWidget() Mw.show() layout = QtGui.QHBoxLayout(Mw) Mw.setLayout(layout) for i in range(3): # создаём объект для работы с источником и указываем ему этот самый источник source = sm.open_source(source_list[0].encode()) # encode() обязателен. Без него не воспринимает. # установка параметра dpi dpi = 150 source.set_capability(twain.ICAP_XRESOLUTION, twain.TWTY_FIX32, dpi) source.set_capability(twain.ICAP_YRESOLUTION, twain.TWTY_FIX32, dpi) # установка цветности pixel_type_map = {'bw' :twain.TWPT_BW, 'gray' :twain.TWPT_GRAY, 'color':twain.TWPT_RGB} pixel_type = pixel_type_map['color'] source.set_capability(twain.ICAP_PIXELTYPE, twain.TWTY_UINT16, pixel_type) # старт сканирования source.RequestAcquire(0, 0) result = source.XferImageNatively() handle, count = result print(result) raw_data = twain.DIBToBMFile(handle) # получаем файлв виде строки pixmap = QPixmap() pixmap.loadFromData(QByteArray(raw_data)) # загоняем скартинку в пиксмап pixmap = pixmap.scaledToHeight(size, 1) print('ps', pixmap.size()) source.close() lab = QtGui.QLabel('', Mw) layout.addWidget(lab) lab.setPixmap(pixmap) sm.close() sys.exit(app.exec_())