新增7010出图流程
This commit is contained in:
parent
36a260b756
commit
68343deb5d
|
@ -701,6 +701,17 @@ namespace setting_hardware
|
|||
//硬件协议定义 -OVER
|
||||
namespace setting3288dsp
|
||||
{
|
||||
struct HG_JpegCompressInfo
|
||||
{
|
||||
unsigned int data_type;
|
||||
unsigned int first_frame;
|
||||
unsigned int last_frame;
|
||||
unsigned int index_frame;
|
||||
unsigned int DataLength;
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned char* pJpegData;
|
||||
};
|
||||
//100-200 dsp 300-400 3288设备状态
|
||||
typedef enum tagUsbSupported
|
||||
{
|
||||
|
|
|
@ -77,7 +77,12 @@ namespace settingsdsp_300
|
|||
return code;
|
||||
}
|
||||
}
|
||||
hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) : hg_scanner(G100Serial, dev_name, io,pid),papersize(pid), is_devs_sleep_(false)
|
||||
hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) :
|
||||
hg_scanner(G100Serial, dev_name, io,pid)
|
||||
,papersize(pid)
|
||||
,is_devs_sleep_(false)
|
||||
,pdata(NULL)
|
||||
,index_ (0)
|
||||
{
|
||||
dsp_config.value = 0;
|
||||
dsp_config.params_3288.enableLed = 1; //默认值
|
||||
|
@ -533,6 +538,94 @@ int hg_scanner_300::get_img_data(std::shared_ptr<tiny_buffer> &imagedata)
|
|||
|
||||
return status_ = ret;
|
||||
}
|
||||
int hg_scanner_300::get_img_data_7010(std::shared_ptr<tiny_buffer>& imagedata)
|
||||
{
|
||||
int total = imagedata->size(),
|
||||
ret = SCANNER_ERR_OK,
|
||||
index = 0,
|
||||
block = total;
|
||||
|
||||
USBCB usb{ setting3288dsp::GET_IMAGE, 0, total };
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(io_lock_);
|
||||
ret = writeusb(usb);
|
||||
|
||||
|
||||
setting3288dsp::HG_JpegCompressInfo info;
|
||||
|
||||
int len = sizeof(int) * 7;
|
||||
ret = io_->read_bulk(&info, &len);
|
||||
|
||||
std::vector<unsigned char> jpgdata;
|
||||
|
||||
jpgdata.resize(info.DataLength);
|
||||
ret = io_->read_bulk(&jpgdata[0], (int*)&info.DataLength);
|
||||
|
||||
int width = info.width;
|
||||
int hegiht = info.height;
|
||||
int frame_total = info.index_frame;
|
||||
if (info.first_frame)
|
||||
{
|
||||
pdata = (char*)malloc(width * hegiht * frame_total);
|
||||
index_ = 0;
|
||||
}
|
||||
|
||||
cv::ImreadModes rmc = cv::IMREAD_GRAYSCALE;
|
||||
|
||||
cv::Mat mat(cv::imdecode(jpgdata, rmc));
|
||||
//cv::imwrite("C://Users//modehua//Desktop//image//opencv"+to_string(cnt)+".jpg", mat);
|
||||
//cnt++;
|
||||
if (!pdata)
|
||||
{
|
||||
return SCANNER_ERR_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
memcpy(pdata + index_, (void*)mat.data, mat.total() * mat.elemSize());
|
||||
index_ += mat.total() * mat.elemSize();
|
||||
|
||||
if (info.last_frame)
|
||||
{
|
||||
cv::Mat mat = cv::Mat(hegiht * frame_total, width, CV_8UC1, pdata, cv::Mat::AUTO_STEP);
|
||||
//cv::imwrite("C://Users//modehua//Desktop//image//2_opencv.jpg", mat);
|
||||
if (mat.empty())
|
||||
{
|
||||
return SCANNER_ERR_INSUFFICIENT_MEMORY;
|
||||
}
|
||||
|
||||
int width = mat.cols;
|
||||
int height = mat.rows;
|
||||
cv::Mat m_dst = mat;
|
||||
if (image_prc_param_.bits.color_mode == 2)
|
||||
{
|
||||
width = mat.cols / 3;
|
||||
height = mat.rows;
|
||||
m_dst = cv::Mat(height, width, CV_8UC3);
|
||||
std::vector<cv::Mat> m_items;
|
||||
|
||||
for (size_t i = 0; i < 3; i++)
|
||||
{
|
||||
cv::Mat t_item(mat(cv::Rect(width * i, 0, width, height)));
|
||||
m_items.push_back(t_item);
|
||||
}
|
||||
cv::merge(m_items, m_dst);
|
||||
}
|
||||
|
||||
cv::imwrite("C://Users//modehua//Desktop//image//1_opencv.jpg", m_dst);
|
||||
std::shared_ptr<tiny_buffer> image_data_(aquire_memory(width * hegiht * frame_total));
|
||||
|
||||
unsigned int size = width * hegiht * frame_total;// bmpdata.size();
|
||||
void* l = image_data_->data(0, &size);
|
||||
memcpy(l, m_dst.data, width * hegiht * frame_total);
|
||||
|
||||
//ret = save_usb_data(image_data_);
|
||||
index_ = 0;
|
||||
if (pdata)
|
||||
{
|
||||
free(pdata);
|
||||
}
|
||||
}
|
||||
return SCANNER_ERR_OK;
|
||||
}
|
||||
}
|
||||
int hg_scanner_300::writedown_device_configuration(bool type,setting_hardware::HGSCANCONF_3288 *d)
|
||||
{
|
||||
if (!type)
|
||||
|
|
|
@ -60,6 +60,7 @@ private:
|
|||
int pop_image(void);
|
||||
int get_scanner_status(USBCB &usb);
|
||||
int get_img_data(std::shared_ptr<tiny_buffer> &imagedata);
|
||||
int get_img_data_7010(std::shared_ptr<tiny_buffer>& imagedata);
|
||||
int writedown_device_configuration(bool type =false,setting_hardware::HGSCANCONF_3288 *d = NULL);
|
||||
void writedown_image_configuration(void);
|
||||
void printf_devconfig(setting_hardware::HGSCANCONF_3288 *d = NULL);
|
||||
|
@ -68,6 +69,8 @@ private:
|
|||
setting_hardware::HGSCANCONF_3288 dsp_config;
|
||||
Device::PaperSize papersize;
|
||||
bool is_devs_sleep_;
|
||||
int index_;
|
||||
char* pdata;
|
||||
public:
|
||||
//////////////固定的硬件信息设置或获取//////////////
|
||||
virtual std::string get_firmware_version(void)override;
|
||||
|
|
|
@ -487,7 +487,11 @@ namespace hg_imgproc
|
|||
{
|
||||
rmc = cv::IMREAD_COLOR;
|
||||
}
|
||||
cv::Mat mat(cv::imdecode(*buf, rmc));
|
||||
cv::Mat mat;
|
||||
if (true)
|
||||
mat(cv::imdecode(*buf, rmc));
|
||||
else
|
||||
mat = cv::Mat(512 * 5, 15552 / 3, CV_8UC1, buf->data(), cv::Mat::AUTO_STEP).clone();
|
||||
//cv::imwrite("C:\\Users\\modehua\\Desktop\\image\\imdecode.jpg",mat);
|
||||
|
||||
if (mat.empty())
|
||||
|
|
Loading…
Reference in New Issue