#include "imageencode.h" #include "memoryex.h" #include "opencv2/opencv.hpp" #include "FreeImagePlus.h" #include "StopWatch.h" BmpImageEncode::~BmpImageEncode() { } MemoryPtr BmpImageEncode::encode(cv::Mat &image) { fipImage fimage(FIT_BITMAP, image.cols, image.rows, image.type() == CV_8UC3 ? 24 : 8); int byteWidth = image.elemSize() * image.cols; for (int i = 0; i < fimage.getHeight(); i++) memcpy(fimage.getScanLine(i), image.ptr(i), byteWidth); FipMemoryPtr mem(new FipMemory()); auto &mio = mem->io(); fimage.saveToMemory(FIF_PNG, mio); return mem; } JpegImageEncode::JpegImageEncode(bool bwimg) { // if (!bwimg) // { // compression_params.push_back(cv::IMWRITE_JPEG_QUALITY); // compression_params.push_back(100); // } // else{ // compression_params.push_back(/*CV_IMWRITE_PNG_STRATEGY*/17); // compression_params.push_back(cv::IMWRITE_PNG_STRATEGY_FIXED); // } // m_bwimg = bwimg; } JpegImageEncode::~JpegImageEncode() { } MemoryPtr JpegImageEncode::encode(cv::Mat &image) { VectorMemroyPtr mem = VectorMemroyPtr(new VectorMemroy()); StopWatch sw; printf("encode image(%d * %d): %p - %p\n", image.cols, image.rows, image.data, image.dataend); // cv::imwrite("beforcompress.jpg",image); // cv::imencode(m_bwimg ? ".png" : ".jpg", image, mem->buf(), compression_params); cv::imencode(".png", image, mem->buf(), compression_params); //printf("encode time = %0.2f \n", sw.elapsed_ms()); return mem; } MemoryPtr buff2mem(void *data, int size) { auto mem = std::shared_ptr(new VectorMemroy()); mem->buf().resize(size); // memcpy(mem->buf().data(), data, size); return mem; }