2022-06-15 03:04:40 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
#include "s2t_api.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class refer : public IRef
|
|
|
|
|
{
|
|
|
|
|
volatile long ref_;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
refer();
|
|
|
|
|
virtual ~refer();
|
|
|
|
|
|
|
|
|
|
// IRef
|
|
|
|
|
public:
|
|
|
|
|
COM_API_OVERRIDE(long, add_ref(void));
|
|
|
|
|
COM_API_OVERRIDE(long, release(void));
|
|
|
|
|
};
|
|
|
|
|
|
2022-06-16 08:04:58 +00:00
|
|
|
|
class mapping_buf
|
|
|
|
|
{
|
|
|
|
|
unsigned long long bytes_;
|
|
|
|
|
unsigned long long offset_;
|
|
|
|
|
unsigned int page_size_;
|
|
|
|
|
unsigned int map_unit_;
|
|
|
|
|
unsigned int mapped_bytes_;
|
|
|
|
|
HANDLE map_;
|
|
|
|
|
bool is_mem_;
|
|
|
|
|
unsigned char* buf_;
|
|
|
|
|
std::string file_;
|
|
|
|
|
bool rmv_file_;
|
|
|
|
|
|
|
|
|
|
void init_map(const char* file, unsigned long long size);
|
|
|
|
|
void close(void);
|
|
|
|
|
void map(void);
|
|
|
|
|
void set_buffer(unsigned char*& buf, unsigned long long off, unsigned int* bytes);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
mapping_buf();
|
|
|
|
|
~mapping_buf();
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
unsigned char* allocate(const wchar_t* file, unsigned long long size = 0);
|
|
|
|
|
unsigned char* buffer(unsigned long long off, unsigned int* bytes);
|
|
|
|
|
bool save(const void* data, size_t* bytes, unsigned long long off);
|
2022-06-17 03:50:18 +00:00
|
|
|
|
int read(void* buf, size_t* bytes, unsigned long long off);
|
2022-06-16 08:04:58 +00:00
|
|
|
|
void unmap();
|
|
|
|
|
void set_remove_file_when_destroyed(bool rmv);
|
|
|
|
|
const char* file(void);
|
|
|
|
|
unsigned long long bytes(void);
|
|
|
|
|
unsigned long long offset(void);
|
|
|
|
|
unsigned int mapped_bytes(void);
|
|
|
|
|
};
|
2022-06-15 03:04:40 +00:00
|
|
|
|
class scanned_img : public IScanImg, virtual public refer
|
|
|
|
|
{
|
|
|
|
|
SANE_Parameters head_;
|
2022-06-16 08:04:58 +00:00
|
|
|
|
mapping_buf* data_;
|
|
|
|
|
int dpi_;
|
2022-06-17 03:50:18 +00:00
|
|
|
|
unsigned int header_size_;
|
|
|
|
|
SANE_FinalImgFormat fmt_;
|
2022-06-15 03:04:40 +00:00
|
|
|
|
|
2022-06-16 09:28:46 +00:00
|
|
|
|
std::string file_header(SANE_ImageType type, float resolution, twain_xfer xfer);
|
2022-06-15 03:04:40 +00:00
|
|
|
|
|
|
|
|
|
public:
|
2022-06-16 09:28:46 +00:00
|
|
|
|
scanned_img(SANE_Parameters head, SANE_Handle dev, int dpi, const wchar_t* tmp_file
|
2022-06-17 03:50:18 +00:00
|
|
|
|
, twain_xfer xfer = TWAIN_XFER_Native, SANE_FinalImgFormat *fmt = NULL);
|
2022-06-15 03:04:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
~scanned_img();
|
|
|
|
|
|
|
|
|
|
// IRef
|
|
|
|
|
public:
|
|
|
|
|
COM_API_OVERRIDE(long, add_ref(void));
|
|
|
|
|
COM_API_OVERRIDE(long, release(void));
|
|
|
|
|
|
|
|
|
|
// IScanImg
|
|
|
|
|
public:
|
|
|
|
|
COM_API_OVERRIDE(int, width(void));
|
|
|
|
|
COM_API_OVERRIDE(int, line_bytes(void));
|
|
|
|
|
COM_API_OVERRIDE(int, height(void));
|
|
|
|
|
COM_API_OVERRIDE(int, depth(void));
|
|
|
|
|
COM_API_OVERRIDE(int, channel(void));
|
|
|
|
|
COM_API_OVERRIDE(SANE_Frame, type(void));
|
|
|
|
|
COM_API_OVERRIDE(unsigned int, bytes(void));
|
2022-06-17 03:50:18 +00:00
|
|
|
|
COM_API_OVERRIDE(unsigned int, header_size(void));
|
2022-06-16 08:04:58 +00:00
|
|
|
|
COM_API_OVERRIDE(unsigned char*, data(unsigned long long off, unsigned int* bytes));
|
2022-06-17 03:50:18 +00:00
|
|
|
|
COM_API_OVERRIDE(int, read(void* buf, size_t* bytes, unsigned long long off = 0));
|
2022-06-16 08:04:58 +00:00
|
|
|
|
COM_API_OVERRIDE(const char*, file(void));
|
|
|
|
|
COM_API_OVERRIDE(void, keep_file(bool keep));
|
2022-06-15 03:04:40 +00:00
|
|
|
|
COM_API_OVERRIDE(void, copy_header(SANE_Parameters* head));
|
|
|
|
|
};
|
|
|
|
|
|
2022-06-16 08:04:58 +00:00
|
|
|
|
namespace local_trans
|
|
|
|
|
{
|
|
|
|
|
std::string u2a(const wchar_t* unic, UINT cp = CP_ACP);
|
|
|
|
|
std::wstring a2u(const char* asc, UINT cp = CP_ACP);
|
|
|
|
|
}
|