当前位置: 首页 > news >正文

编程代码大全资阳优化团队资讯

编程代码大全,资阳优化团队资讯,手机在线制作照片p图,广告设计昵图网本实理论上支持24位图和32位图#xff0c;实际上只测试了24位。原理很简单#xff0c;就是RGB中的蓝色字节和红色字节交换。 测试代码1#xff1a; #include stdio.h #include unistd.h #include sys/stat.h #include stdlib.h #include 实际上只测试了24位。原理很简单就是RGB中的蓝色字节和红色字节交换。 测试代码1 #include stdio.h #include unistd.h #include sys/stat.h #include stdlib.h #include sys/types.h #include fcntl.h #include errno.h #include sys/ioctl.h #include linux/videodev2.h #include sys/mman.h #include string.h #include stdint.h #include jpeglib.h#define _DEBUG_INFO #ifdef _DEBUG_INFO #define DEBUG_INFO(format, ...) printf(%s:%d -- format\n \ ,__func__,__LINE__ \ , ##__VA_ARGS__) #else #define DEBUG_INFO(format, ...) #endif//Gray 0.30 * R 0.59 * G 0.11 * B uint8_t rgb888_to_gray(uint8_t r,uint8_t g,uint8_t b){return (uint8_t)(0.3 *(float)r 0.59 * (float)g 0.11 * (float)b); }typedef uint16_t WORD; typedef uint32_t DWORD; #pragma pack(1) typedef struct tagBITMAPFILEHEADER{WORD bfType;//2DWORD bfSize;//4WORD bfReserved1;//2WORD bfReserved2;//2DWORD bfOffBits;//4 } BITMAPFILEHEADER; #pragma pack() typedef int32_t LONG; #pragma pack(1) typedef struct tagBITMAPINFOHEADER{DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; } BITMAPINFOHEADER; int main(int argc, char **argv) {char *filename RGB.bmp;int fd open(filename , O_RDONLY);if(fd 0){perror(open:);return -1;}struct tagBITMAPFILEHEADER * bit_map_file_header malloc(sizeof(struct tagBITMAPFILEHEADER));struct tagBITMAPINFOHEADER * bit_map_info_header malloc(sizeof(struct tagBITMAPINFOHEADER));DEBUG_INFO(%d %d,sizeof(struct tagBITMAPFILEHEADER),sizeof(struct tagBITMAPINFOHEADER));if(bit_map_file_header NULL || bit_map_info_header NULL){perror(malloc:);return -1;}//读取bmp的头信息read(fd , bit_map_file_header , 14);if(bit_map_file_header-bfType ! 0x4D42){DEBUG_INFO(这不是BMP图片);return -1;}DEBUG_INFO(bfOffBits %d,bit_map_file_header-bfOffBits);read(fd , bit_map_info_header , 40);DEBUG_INFO(width %d,height %d,biBitCount %d\n , bit_map_info_header-biWidth , bit_map_info_header-biHeight,bit_map_info_header-biBitCount);if(bit_map_info_header-biBitCount 24){DEBUG_INFO(仅支持24位和32位的BMP图片);return -1;}if(bit_map_info_header-biWidth 0){bit_map_info_header-biWidth abs(bit_map_info_header-biWidth);}if(bit_map_info_header-biHeight 0){bit_map_info_header-biHeight abs(bit_map_info_header-biHeight);}DEBUG_INFO(width %d,%d,biBitCount %d\n , bit_map_info_header-biWidth , bit_map_info_header-biHeight,bit_map_info_header-biBitCount);// return 0;int bmp_data_len bit_map_info_header-biWidth * bit_map_info_header-biHeight * bit_map_info_header-biBitCount;DEBUG_INFO(bmp_data_len %d,bmp_data_len);unsigned char *bmp_buf malloc(bmp_data_len);if(bmp_buf NULL){DEBUG_INFO(malloc error);return -1;}int ret read(fd,bmp_buf,bmp_data_len);if(ret 0){DEBUG_INFO(read error);return -1;}//把RGB转换成BGR就是调用R和G的位置int index 0;unsigned char tmp;while(bmp_data_len index){tmp bmp_buf[index 0];bmp_buf[index 0] bmp_buf[index 2];bmp_buf[index 2] tmp;index (bit_map_info_header-biBitCount 3);}int bgr_bmp_fd open(BGR.bmp,O_WRONLY | O_TRUNC | O_CREAT,0660);if(fd 0){perror(open:);return -1;}write(bgr_bmp_fd,bit_map_file_header,sizeof(struct tagBITMAPFILEHEADER));write(bgr_bmp_fd,bit_map_info_header,sizeof(struct tagBITMAPINFOHEADER));write(bgr_bmp_fd,bmp_buf,bmp_data_len);close(bgr_bmp_fd);close(fd);free(bmp_buf);return 0; } 调试信息 测试结果 左边是转换之前右边是转换之后。 由调试信息可知选取的图片是720X336也就是行4字节对齐的。换成721X336的图片,测试结果如下果然出错了。  测试代码2 修改后的颜色转换部分如下所示这里主要解决了行4字节对齐的问题。 #include stdio.h #include unistd.h #include sys/stat.h #include stdlib.h #include sys/types.h #include fcntl.h #include errno.h #include sys/ioctl.h #include linux/videodev2.h #include sys/mman.h #include string.h #include stdint.h #include jpeglib.h#define _DEBUG_INFO #ifdef _DEBUG_INFO #define DEBUG_INFO(format, ...) printf(%s:%d -- format\n \ ,__func__,__LINE__ \ , ##__VA_ARGS__) #else #define DEBUG_INFO(format, ...) #endif//Gray 0.30 * R 0.59 * G 0.11 * B uint8_t rgb888_to_gray(uint8_t r,uint8_t g,uint8_t b){return (uint8_t)(0.3 *(float)r 0.59 * (float)g 0.11 * (float)b); }typedef uint16_t WORD; typedef uint32_t DWORD; #pragma pack(1) typedef struct tagBITMAPFILEHEADER{WORD bfType;//2DWORD bfSize;//4WORD bfReserved1;//2WORD bfReserved2;//2DWORD bfOffBits;//4 } BITMAPFILEHEADER; #pragma pack() typedef int32_t LONG; #pragma pack(1) typedef struct tagBITMAPINFOHEADER{DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; } BITMAPINFOHEADER; char *src_file_name RGB2.bmp; char *dst_file_name BGR2.bmp;int main(int argc, char **argv) {int fd open(src_file_name , O_RDONLY);if(fd 0){perror(open:);return -1;}struct tagBITMAPFILEHEADER * bit_map_file_header malloc(sizeof(struct tagBITMAPFILEHEADER));struct tagBITMAPINFOHEADER * bit_map_info_header malloc(sizeof(struct tagBITMAPINFOHEADER));DEBUG_INFO(%d %d,sizeof(struct tagBITMAPFILEHEADER),sizeof(struct tagBITMAPINFOHEADER));if(bit_map_file_header NULL || bit_map_info_header NULL){perror(malloc:);return -1;}//读取bmp的头信息read(fd , bit_map_file_header , 14);if(bit_map_file_header-bfType ! 0x4D42){DEBUG_INFO(这不是BMP图片);return -1;}DEBUG_INFO(biSizebfOffBits %d,bfSize %d,bit_map_file_header-bfOffBits,bit_map_file_header-bfSize);read(fd , bit_map_info_header , 40);DEBUG_INFO(biSize %d,width %d,height %d,biBitCount %d,biPlanes %d,\n\biCompression %d,biSizeImage %d,\n\biXPelsPerMeter %d,biYPelsPerMeter %d,\n\biClrUsed %d,biClrImportant %d\n , bit_map_info_header-biSize,bit_map_info_header-biWidth , bit_map_info_header-biHeight,bit_map_info_header-biBitCount,bit_map_info_header-biPlanes,bit_map_info_header-biCompression,bit_map_info_header-biSizeImage,bit_map_info_header-biXPelsPerMeter,bit_map_info_header-biYPelsPerMeter,bit_map_info_header-biClrUsed,bit_map_info_header-biClrImportant);if(bit_map_info_header-biBitCount 24){DEBUG_INFO(仅支持24位和32位的BMP图片);return -1;}if(bit_map_info_header-biWidth 0){bit_map_info_header-biWidth abs(bit_map_info_header-biWidth);}if(bit_map_info_header-biHeight 0){bit_map_info_header-biHeight abs(bit_map_info_header-biHeight);}DEBUG_INFO(width %d,%d,biBitCount %d\n , bit_map_info_header-biWidth , bit_map_info_header-biHeight,bit_map_info_header-biBitCount);// return 0;unsigned char *bmp_buf malloc(bit_map_file_header-bfSize);unsigned char *dst_bmp_buf malloc(bit_map_file_header-bfSize);if(bmp_buf NULL){DEBUG_INFO(malloc error);return -1;}int ret read(fd,bmp_buf,bit_map_file_header-bfSize - 54);if(ret 0){DEBUG_INFO(read error);return -1;}int w bit_map_info_header-biWidth;int h bit_map_info_header-biHeight;int biBitCount bit_map_info_header-biBitCount;int color_byte biBitCount/8;int offset_step;if((w * color_byte)%4){offset_step ((w*color_byte)/41)*4;}else{offset_step w*color_byte;}DEBUG_INFO(offset_step %d,offset_step);//把RGB转换成BGR就是调用R和G的位置int index 0;unsigned char tmp;int offset 0;DEBUG_INFO(color_byte %d,color_byte);int line0;for(int i 0 ; i h; i){for(int j 0 ; j w ; j){int index offset j * color_byte;tmp bmp_buf[index 0 ];bmp_buf[index 0 ] bmp_buf[index 2 ];bmp_buf[index 2 ] tmp; }offset offset_step;}int bgr_bmp_fd open(dst_file_name,O_WRONLY | O_TRUNC | O_CREAT,0660);if(fd 0){perror(open:);return -1;}write(bgr_bmp_fd,bit_map_file_header,sizeof(struct tagBITMAPFILEHEADER));write(bgr_bmp_fd,bit_map_info_header,sizeof(struct tagBITMAPINFOHEADER));write(bgr_bmp_fd,bmp_buf,bit_map_file_header-bfSize - 54);close(bgr_bmp_fd);close(fd);free(bmp_buf);return 0; } 测试721x336,OK 在测一个571X673的效果还是不错的。 调试信息宽571高673行宽2284字节。 小结
http://www.hkea.cn/news/14445688/

相关文章:

  • 为什么网站之有首页被收录网上商城网站建设规划
  • 优化网站seo方案网络营销推广合同
  • 赣州品牌网站建设石家庄业之峰装饰公司怎么样
  • 网站规划与建设实验心得体会网站界面设计案例分析
  • 杭州城市建设网站wordpress图片文字
  • 美发企业网站模板电商o2o是什么意思
  • 昆明工程建设信息网站网络工程师工作好找吗
  • 瑜伽网站设计公司网站建设带来的好处
  • 廊坊网站制作公司排名WordPress编辑
  • 怎么自己在百度上做网站网站开发需要的准备
  • 重庆seo的薪酬水平手机网站优化技巧
  • 网站建设所用软件湖北seo推广
  • 做饮食网站怎么样手机网站公司哪家好
  • 怎么做logo网站做网站的创业计划书
  • 网站建设截图用什么做flash游戏下载网站
  • 申请网站空间怎么做小程序制作软件
  • 沈阳网站建设模块维护阿里云服务器怎么发布网站
  • 河南移动官网网站建设自己怎么做返利网站吗
  • 做设计应该看哪些网站重庆建筑信息网官网
  • 赣州网站建设信息论文网站建设目标
  • 手机怎么自己建网站建设的网站服务器
  • 教学设计代做去什么网站小游戏网页版入口
  • 做网站用的什么软件北京网络安全公司有哪些
  • 网站优化方案和实施wap网站前景
  • app编程软件有哪些网站推广优化外包
  • 多语言网站建设 技术wordpress检测手机端
  • 用自己电脑做主机做网站服务主机网络服务
  • 徐州网站制作需要多少钱网站百度关键词排名软件
  • 贵州建设工程招投标网站wordpress导航插件
  • 河南郑州app建设网站软件下载网站开发