从屏幕抓取的原始数据是RGB565格式的——有的摄像头驱动支持直接抓取RGB888的格式,但我的不支持。如果想转换成JPEG,调用 JPEGLIB的话,先要转换成RGB888的格式。这个过程的转换,可以同时完成将图像倒置、和RGB位顺序变换。 RGB565 转换成RGB888,请参考前面的一贴。 下面是RGB24转换成JPG的过程 struct jpeg_compress_struct jcs; // 声明错误处理器,并赋值给jcs.err域 jpeg_create_compress(&jcs); //2、指定压缩后的图像所存放的目标文件,注意,目标文件应以二进制模式打开 jpgFile=fopen("bmp24spp.jpg","wb"); //3、设置压缩参数,主要参数有 jcs.image_width = width; // 为图的宽和高,单位为像素 jpeg_set_defaults(&jcs); //4、上面的工作准备完成后,就可以压缩了,压缩过程非常简单,首先调用 jpeg_start_compress, jpeg_start_compress(&jcs, 1); JSAMPROW row_pointer[1]; // 一行位图 row_stride = jcs.image_width*3; // 如果不是索引图,此处需要乘以3 // 对每一行进行压缩 jpeg_finish_compress(&jcs);//压缩完成后,记得要调用jpeg_finish_compress函数 //5、最后就是释放压缩工作过程中所申请的资源了,主要就是jpeg压缩对象,由于在本例中我是直接用的局部变量, jpeg_destroy_compress(&jcs);
编辑工具: 运行环境: |