TWAIN接口补充图片状态信息
This commit is contained in:
parent
4e6f71bd53
commit
779d2552db
|
@ -143,6 +143,7 @@ struct __declspec(novtable) IScanImg : public IRef
|
||||||
COM_API_DECLARE(const char*, file(void));
|
COM_API_DECLARE(const char*, file(void));
|
||||||
COM_API_DECLARE(void, keep_file(bool keep));
|
COM_API_DECLARE(void, keep_file(bool keep));
|
||||||
COM_API_DECLARE(void, copy_header(SANE_Parameters* head));
|
COM_API_DECLARE(void, copy_header(SANE_Parameters* head));
|
||||||
|
COM_API_DECLARE(int, image_status(void));
|
||||||
};
|
};
|
||||||
struct __declspec(novtable) ISaneInvoker : public IRef
|
struct __declspec(novtable) ISaneInvoker : public IRef
|
||||||
{
|
{
|
||||||
|
|
|
@ -368,7 +368,7 @@ unsigned int mapping_buf::mapped_bytes(void)
|
||||||
scanned_img::scanned_img(SANE_Handle dev, SANE_Parameters head, int dpi
|
scanned_img::scanned_img(SANE_Handle dev, SANE_Parameters head, int dpi
|
||||||
, const wchar_t* tmp_file, twain_xfer xfer
|
, const wchar_t* tmp_file, twain_xfer xfer
|
||||||
, SANE_FinalImgFormat *fmt) : head_(head), dpi_(dpi), header_size_(0), file_(tmp_file ? tmp_file : L"")
|
, SANE_FinalImgFormat *fmt) : head_(head), dpi_(dpi), header_size_(0), file_(tmp_file ? tmp_file : L"")
|
||||||
, dev_(dev)
|
, dev_(dev), status_(SANE_Image_Statu_OK)
|
||||||
{
|
{
|
||||||
if (fmt)
|
if (fmt)
|
||||||
fmt_ = *fmt;
|
fmt_ = *fmt;
|
||||||
|
@ -434,7 +434,7 @@ scanned_img::scanned_img(SANE_Handle dev, SANE_Parameters head, int dpi
|
||||||
}
|
}
|
||||||
scanned_img::scanned_img(SANE_Handle dev, SANE_Parameters head, void* data, unsigned int len, int dpi, const wchar_t* tmp_file
|
scanned_img::scanned_img(SANE_Handle dev, SANE_Parameters head, void* data, unsigned int len, int dpi, const wchar_t* tmp_file
|
||||||
, twain_xfer xfer, SANE_FinalImgFormat* fmt) : head_(head), dpi_(dpi), header_size_(0)
|
, twain_xfer xfer, SANE_FinalImgFormat* fmt) : head_(head), dpi_(dpi), header_size_(0)
|
||||||
, file_(tmp_file ? tmp_file : L""), dev_(dev)
|
, file_(tmp_file ? tmp_file : L""), dev_(dev), status_(SANE_Image_Statu_OK)
|
||||||
{
|
{
|
||||||
if (fmt)
|
if (fmt)
|
||||||
fmt_ = *fmt;
|
fmt_ = *fmt;
|
||||||
|
@ -480,6 +480,11 @@ scanned_img::~scanned_img()
|
||||||
delete data_;
|
delete data_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scanned_img::set_image_status(SANE_Image_Statu status)
|
||||||
|
{
|
||||||
|
status_ = status;
|
||||||
|
}
|
||||||
|
|
||||||
std::string scanned_img::file_header(SANE_ImageType type, float resolution, twain_xfer xfer)
|
std::string scanned_img::file_header(SANE_ImageType type, float resolution, twain_xfer xfer)
|
||||||
{
|
{
|
||||||
std::string h("");
|
std::string h("");
|
||||||
|
@ -711,6 +716,10 @@ COM_API_IMPLEMENT(scanned_img, void, copy_header(SANE_Parameters* head))
|
||||||
{
|
{
|
||||||
*head = head_;
|
*head = head_;
|
||||||
}
|
}
|
||||||
|
COM_API_IMPLEMENT(scanned_img, int, image_status(void))
|
||||||
|
{
|
||||||
|
return status_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,8 @@ class scanned_img : public IScanImg, virtual public refer
|
||||||
unsigned int header_size_;
|
unsigned int header_size_;
|
||||||
SANE_FinalImgFormat fmt_;
|
SANE_FinalImgFormat fmt_;
|
||||||
|
|
||||||
|
SANE_Image_Statu status_;
|
||||||
|
|
||||||
std::string file_header(SANE_ImageType type, float resolution, twain_xfer xfer);
|
std::string file_header(SANE_ImageType type, float resolution, twain_xfer xfer);
|
||||||
void do_result(bool ok, twain_xfer xfer);
|
void do_result(bool ok, twain_xfer xfer);
|
||||||
void swap_rgb(void);
|
void swap_rgb(void);
|
||||||
|
@ -72,6 +74,7 @@ public:
|
||||||
scanned_img(SANE_Handle dev, SANE_Parameters head, void* data, unsigned int len, int dpi, const wchar_t* tmp_file
|
scanned_img(SANE_Handle dev, SANE_Parameters head, void* data, unsigned int len, int dpi, const wchar_t* tmp_file
|
||||||
, twain_xfer xfer = TWAIN_XFER_Native, SANE_FinalImgFormat *fmt = NULL);
|
, twain_xfer xfer = TWAIN_XFER_Native, SANE_FinalImgFormat *fmt = NULL);
|
||||||
|
|
||||||
|
void set_image_status(SANE_Image_Statu status);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
~scanned_img();
|
~scanned_img();
|
||||||
|
@ -96,6 +99,7 @@ public:
|
||||||
COM_API_OVERRIDE(const char*, file(void));
|
COM_API_OVERRIDE(const char*, file(void));
|
||||||
COM_API_OVERRIDE(void, keep_file(bool keep));
|
COM_API_OVERRIDE(void, keep_file(bool keep));
|
||||||
COM_API_OVERRIDE(void, copy_header(SANE_Parameters* head));
|
COM_API_OVERRIDE(void, copy_header(SANE_Parameters* head));
|
||||||
|
COM_API_OVERRIDE(int, image_status(void));
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
|
@ -2193,6 +2193,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
|
||||||
img = new scanned_img(handle_, simg->header, simg->data, simg->bytes, dpi_, (tmp_path_ + name).c_str(), xfer_, &img_fmt_);
|
img = new scanned_img(handle_, simg->header, simg->data, simg->bytes, dpi_, (tmp_path_ + name).c_str(), xfer_, &img_fmt_);
|
||||||
if (img->bytes() /*>= simg->bytes*/)
|
if (img->bytes() /*>= simg->bytes*/)
|
||||||
{
|
{
|
||||||
|
img->set_image_status((SANE_Image_Statu)simg->flag.statu);
|
||||||
images_.save(img);
|
images_.save(img);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -723,14 +723,24 @@ Result huagao_ds::capabilitySet(const Identity& origin, Capability& data)
|
||||||
}
|
}
|
||||||
Result huagao_ds::eventProcess(const Identity&, Event& event)
|
Result huagao_ds::eventProcess(const Identity&, Event& event)
|
||||||
{
|
{
|
||||||
|
static int count_0 = 0;
|
||||||
const MSG* msg = (const MSG*)event.event();
|
const MSG* msg = (const MSG*)event.event();
|
||||||
// event.setMessage(Msg::Null);
|
// event.setMessage(Msg::Null);
|
||||||
if (scanner_.get())
|
if (scanner_.get())
|
||||||
{
|
{
|
||||||
int ev = scanner_->get_event();
|
int ev = scanner_->get_event();
|
||||||
wchar_t msg[128] = { 0 };
|
if (ev == 0)
|
||||||
swprintf_s(msg, _countof(msg) - 1, L"ds::eventProcess(0x%x)\r\n", ev);
|
count_0++;
|
||||||
load_sane_util::log_info(msg, 0);
|
else
|
||||||
|
{
|
||||||
|
wchar_t msg[128] = { 0 };
|
||||||
|
if(count_0)
|
||||||
|
swprintf_s(msg, _countof(msg) - 1, L"ds::eventProcess(0x0 +%d)\r\nds::eventProcess(0x%x)\r\n", count_0, ev);
|
||||||
|
else
|
||||||
|
swprintf_s(msg, _countof(msg) - 1, L"ds::eventProcess(0x%x)\r\n", ev);
|
||||||
|
load_sane_util::log_info(msg, 0);
|
||||||
|
count_0 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
switch (ev)
|
switch (ev)
|
||||||
{
|
{
|
||||||
|
@ -1138,7 +1148,8 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin)
|
||||||
if (img)
|
if (img)
|
||||||
{
|
{
|
||||||
std::string file(img->file());
|
std::string file(img->file());
|
||||||
int cv_e = 0;
|
int cv_e = 0,
|
||||||
|
status = img->image_status();
|
||||||
if (file.empty())
|
if (file.empty())
|
||||||
{
|
{
|
||||||
dst = fopen(m_fileXfer.filePath().string().c_str(), "wb");
|
dst = fopen(m_fileXfer.filePath().string().c_str(), "wb");
|
||||||
|
@ -1222,6 +1233,21 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if (ret.status() == ConditionCode::Success)
|
||||||
|
//{
|
||||||
|
// switch (status)
|
||||||
|
// {
|
||||||
|
// case SANE_Image_Statu_Blank:
|
||||||
|
// break;
|
||||||
|
// case SANE_Image_Statu_Double:
|
||||||
|
// ret.setStatus(ConditionCode::PaperDoubleFeed);
|
||||||
|
// break;
|
||||||
|
// case SANE_Image_Statu_Jammed:
|
||||||
|
// ret.setStatus(ConditionCode::PaperJam);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::wstring info(load_sane_util::ansi2unic(m_fileXfer.filePath().string().c_str()));
|
std::wstring info(load_sane_util::ansi2unic(m_fileXfer.filePath().string().c_str()));
|
||||||
wchar_t r[80] = { 0 };
|
wchar_t r[80] = { 0 };
|
||||||
|
@ -1378,6 +1404,7 @@ void huagao_ds::init_support_caps(void)
|
||||||
if (Msg::Set == msg) {
|
if (Msg::Set == msg) {
|
||||||
auto show = data.currentItem<CapType::Indicators>();
|
auto show = data.currentItem<CapType::Indicators>();
|
||||||
m_bIndicator = show;
|
m_bIndicator = show;
|
||||||
|
load_sane_util::log_info(m_bIndicator ? L"Set show indicator: true\r\n" : L"Set show indicator: false\r\n", 0);
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
return CapSupGetAllReset<bool, Bool, CapType::Indicators>(msg, data, { FALSE,TRUE }, m_bIndicator, TRUE, m_bIndicator ? 1 : 0, 1);
|
return CapSupGetAllReset<bool, Bool, CapType::Indicators>(msg, data, { FALSE,TRUE }, m_bIndicator, TRUE, m_bIndicator ? 1 : 0, 1);
|
||||||
|
@ -1411,6 +1438,11 @@ void huagao_ds::init_support_caps(void)
|
||||||
if (Compression::None == mech || mech == Compression::Group4) {
|
if (Compression::None == mech || mech == Compression::Group4) {
|
||||||
m_compression = mech;
|
m_compression = mech;
|
||||||
scanner_->twain_set_compression((SANE_CompressionType)m_compression);
|
scanner_->twain_set_compression((SANE_CompressionType)m_compression);
|
||||||
|
{
|
||||||
|
wchar_t info[128] = { 0 };
|
||||||
|
swprintf_s(info, _countof(info) - 1, L"set CapType::ICompression = %s\r\n", Compression::None == mech ? L"None" : L"Group4");
|
||||||
|
load_sane_util::log_info(info, 0);
|
||||||
|
}
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1625,6 +1657,11 @@ void huagao_ds::init_support_caps(void)
|
||||||
if (mech == XferMech::Native || mech == XferMech::Memory || mech == XferMech::File) {
|
if (mech == XferMech::Native || mech == XferMech::Memory || mech == XferMech::File) {
|
||||||
m_capXferMech = mech;
|
m_capXferMech = mech;
|
||||||
scanner_->twain_set_transfer((twain_xfer)m_capXferMech);
|
scanner_->twain_set_transfer((twain_xfer)m_capXferMech);
|
||||||
|
{
|
||||||
|
wchar_t info[128] = { 0 }, * des[] = {L"Native", L"File", L"Memory"};
|
||||||
|
swprintf_s(info, _countof(info) - 1, L"set CapType::IXferMech = %s\r\n", des[(int)m_capXferMech]);
|
||||||
|
load_sane_util::log_info(info, 0);
|
||||||
|
}
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1834,6 +1871,14 @@ void huagao_ds::init_support_caps(void)
|
||||||
fmt != Twpp::ImageFileFormat::Tiff)
|
fmt != Twpp::ImageFileFormat::Tiff)
|
||||||
return badValue();
|
return badValue();
|
||||||
m_fileXfer.setFormat((Twpp::ImageFileFormat)data.currentItem<ImageFileFormat>());
|
m_fileXfer.setFormat((Twpp::ImageFileFormat)data.currentItem<ImageFileFormat>());
|
||||||
|
{
|
||||||
|
if (fmt == Twpp::ImageFileFormat::Bmp)
|
||||||
|
load_sane_util::log_info(L"set CapType::IImageFileFormat = Bmp\r\n", 0);
|
||||||
|
else if (fmt == Twpp::ImageFileFormat::Jfif)
|
||||||
|
load_sane_util::log_info(L"set CapType::IImageFileFormat = Jfif\r\n", 0);
|
||||||
|
else if (fmt == Twpp::ImageFileFormat::Tiff)
|
||||||
|
load_sane_util::log_info(L"set CapType::IImageFileFormat = Tiff\r\n", 0);
|
||||||
|
}
|
||||||
return success();
|
return success();
|
||||||
//if(Msg::Set == msg)
|
//if(Msg::Set == msg)
|
||||||
// init.img_format = (SANE_ImageType)(int)data.currentItem<ImageFileFormat>();
|
// init.img_format = (SANE_ImageType)(int)data.currentItem<ImageFileFormat>();
|
||||||
|
|
Loading…
Reference in New Issue