[AssistantTool]_7_添加生成测试图的功能

创建时间:20200615 17:30:00

功能

  • 生成测试图,并保存对应原始数据到文件中,用来给嵌入式设备测试输出原色是否正常的问题

支持的格式

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bpJ3aC6T-1629641365376)(image/2020-06-15-17-45-45.png)]

    • RGBA8888
    • RGB888
    • RGB565

支持的图像

  • 渐变色

  • 随机数

  • 单色渐变色

  • 黑白条

  • 棋盘格

  • 彩色条

  • 纯色

绘制图像核心函数


/** 函数名称 : clearFrameBuff* 函数介绍 : 使用指定颜色刷新FrameBuffer* 参数介绍 : data:FrameBuffer相关信息, x,y,w,h:清空的矩形, r,g,b:使用的颜色,*           bps:framebuffer的bps* 返回值   : -1:失败,  0:成功*/
int ColorTestForm::clearFrameBuff(char *indata, int x, int y, int w, int h, int r, int g, int b, int bps)
{unsigned int rgb = 0;int drawW = 0;int drawH = 0;int fbw = xres;int fbh = yres;if ( x + w > fbw ){drawW = fbw-x;}else{drawW = w;}if ( y + h > fbh ){drawH = fbh-y;}else{drawH = h;}switch( bps ){case 32:rgb = (b<<24) | (g<<16) | (r<<8);break;case 16:rgb = (((unsigned(r) << 8) & 0xF800) |((unsigned(g) << 3) & 0x7E0) |((unsigned(b) >> 3)));break;}for( int i = 0; i < drawH; i++ ){for( int j = 0; j < drawW; j++ ){switch( bps ){case 32:indata[fbw*4*(i+y)+(j+x)*4] = (rgb>>24)&0xFF;indata[fbw*4*(i+y)+(j+x)*4+1] = (rgb>>16)&0xFF;indata[fbw*4*(i+y)+(j+x)*4+2] = (rgb>>8)&0xFF;indata[fbw*4*(i+y)+(j+x)*4+3] = a;break;case 24:indata[fbw*3*(i+y)+(j+x)*3]   = b&0xFF;indata[fbw*3*(i+y)+(j+x)*3+1] = g&0xFF;indata[fbw*3*(i+y)+(j+x)*3+2] = r&0xFF;break;case 16:indata[fbw*2*(i+y)+(j+x)*2] = (rgb)&0xFF;indata[fbw*2*(i+y)+(j+x)*2+1] = (rgb>>8)&0xFF;break;}}}return 0;
}/** 函数名称 : testColor* 函数介绍 : 测试颜色FrameBuffer - 渐变色* 参数介绍 : data:FrameBuffer相关信息, x,y,w,h:清空的矩形,  br,bg,bb:使用的颜色,*           bps:framebuffer的bps* 返回值   : -1:失败,  0:成功*/
int ColorTestForm::testColor(char * indata, int x, int y, int w, int h, int br, int bg, int bb, int bps)
{unsigned int rgb = 0;int drawW = 0;int drawH = 0;int fbw = xres;int fbh = yres;int r = br, g = bg, b = bb;int rgFlag = 0;if ( x + w > fbw ){drawW = fbw-x;}else{drawW = w;}if ( y + h > fbh ){drawH = fbh-y;}else{drawH = h;}for( int i = 0; i < drawH; i++ ){for( int j = 0; j < drawW; j++ ){r = (unsigned int)(br + (float)i/drawH*255)%255;g = (unsigned int)(bg + (float)j/drawW*255)%255;b = bb % 255;switch( bps ){case 32:indata[fbw*4*(i+y)+(j+x)*4]   = b&0xFF;indata[fbw*4*(i+y)+(j+x)*4+1] = g&0xFF;indata[fbw*4*(i+y)+(j+x)*4+2] = r&0xFF;indata[fbw*4*(i+y)+(j+x)*4+3] = a;break;case 24:indata[fbw*3*(i+y)+(j+x)*3]   = b&0xFF;indata[fbw*3*(i+y)+(j+x)*3+1] = g&0xFF;indata[fbw*3*(i+y)+(j+x)*3+2] = r&0xFF;break;case 16:rgb = (((r << 8) & 0xF800) |((g << 3) & 0x7E0) |((b >> 3)));indata[fbw*2*(i+y)+(j+x)*2] = (rgb)&0xFF;indata[fbw*2*(i+y)+(j+x)*2+1] = (rgb>>8)&0xFF;break;}}}return 0;
}/** 函数名称 : testUrandom* 函数介绍 : 测试颜色FrameBuffer - 随机数* 参数介绍 : fbInfo:FrameBuffer相关信息, x,y,w,h:清空的矩形*           bps:framebuffer的bps* 返回值   : -1:失败,  0:成功*/
int ColorTestForm::testUrandom(char *indata, int x, int y, int w, int h, int bps)
{unsigned int rgb = 0;int drawW = 0;int drawH = 0;int fbw = xres;int fbh = yres;int rgFlag = 0;int r = 0;int g = 0;int b = 0;int a = 0;if ( x + w > fbw ){drawW = fbw-x;}else{drawW = w;}if ( y + h > fbh ){drawH = fbh-y;}else{drawH = h;}for( int i = 0; i < drawH; i++ ){for( int j = 0; j < drawW; j++ ){r = rand()/255;g = rand()/255;b = rand()/255;a = rand()/255;switch( bps ){case 32:indata[fbw*4*(i+y)+(j+x)*4]   = b&0xFF;indata[fbw*4*(i+y)+(j+x)*4+1] = g&0xFF;indata[fbw*4*(i+y)+(j+x)*4+2] = r&0xFF;indata[fbw*4*(i+y)+(j+x)*4+3] = a;break;case 16:rgb = (((r << 8) & 0xF800) |((g << 3) & 0x7E0) |((b >> 3)));indata[fbw*2*(i+y)+(j+x)*2] = (rgb)&0xFF;indata[fbw*2*(i+y)+(j+x)*2+1] = (rgb>>8)&0xFF;break;}}}return 0;
}/** 函数名称 : testSolidColor* 函数介绍 : 测试单颜色FrameBuffer - 单色渐变色* 参数介绍 : fbInfo:FrameBuffer相关信息, x,y,w,h:清空的矩形,  br,bg,bb:使用的颜色,*           bps:framebuffer的bps* 返回值   : -1:失败,  0:成功*/
int ColorTestForm::testSolidColor(char * indata, int x, int y, int w, int h, int br, int bg, int bb, int bps)
{unsigned int rgb = 0;int drawW = 0;int drawH = 0;int fbw = xres;int fbh = yres;int r = br, g = bg, b = bb;int rgFlag = 0;if ( x + w > fbw ){drawW = fbw-x;}else{drawW = w;}if ( y + h > fbh ){drawH = fbh-y;}else{drawH = h;}for( int i = 0; i < drawH; i++ ){r = br;g = bg;b = bb;for( int j = 0; j < drawW; j++ ){if ( i <= drawH/3 ){r = (unsigned int)(br + j*255/drawW)%255;}else if ( drawH/3 && i <= drawH*2/3 ){g = (unsigned int)(bg + j*255/drawW)%255;}else if ( drawH*2/3 < i ){b = (unsigned int)(bb + j*255/drawW)%255;}switch( bps ){case 32:indata[fbw*4*(i+y)+(j+x)*4]   = b&0xFF;indata[fbw*4*(i+y)+(j+x)*4+1] = g&0xFF;indata[fbw*4*(i+y)+(j+x)*4+2] = r&0xFF;indata[fbw*4*(i+y)+(j+x)*4+3] = a;break;case 16:rgb = (((r << 8) & 0xF800) |((g << 3) & 0x7E0) |((b >> 3)));indata[fbw*2*(i+y)+(j+x)*2] = (rgb)&0xFF;indata[fbw*2*(i+y)+(j+x)*2+1] = (rgb>>8)&0xFF;break;}}}return 0;
}/** 函数名称 : checkerBoard* 函数介绍 : 测试颜色FrameBuffer - 棋盘格* 参数介绍 : data:FrameBuffer相关信息, x,y,w,h:清空的矩形*           bps:framebuffer的bps* 返回值   : -1:失败,  0:成功*/
int ColorTestForm::checkerBoard(char *indata, int x, int y, int w, int h, int bps)
{unsigned int rgb = 0;int drawW = 0;int drawH = 0;int fbw = xres;int fbh = yres;int r, g, b;int rgFlag = 0;if ( x + w > fbw ){drawW = fbw-x;}else{drawW = w;}if ( y + h > fbh ){drawH = fbh-y;}else{drawH = h;}for( int i = 0; i < drawH; i++ ){for( int j = 0; j < drawW; j++ ){r = (i/(drawH/10))*70%255;g = (j/(drawW/10))*40%255;b = (r+g)%255;switch( bps ){case 32:indata[fbw*4*(i+y)+(j+x)*4]   = b&0xFF;indata[fbw*4*(i+y)+(j+x)*4+1] = g&0xFF;indata[fbw*4*(i+y)+(j+x)*4+2] = r&0xFF;indata[fbw*4*(i+y)+(j+x)*4+3] = a;break;case 24:indata[fbw*3*(i+y)+(j+x)*3]   = b&0xFF;indata[fbw*3*(i+y)+(j+x)*3+1] = g&0xFF;indata[fbw*3*(i+y)+(j+x)*3+2] = r&0xFF;break;case 16:rgb = (((r << 8) & 0xF800) |((g << 3) & 0x7E0) |((b >> 3)));indata[fbw*2*(i+y)+(j+x)*2] = (rgb)&0xFF;indata[fbw*2*(i+y)+(j+x)*2+1] = (rgb>>8)&0xFF;break;}}}return 0;}

绘制不同图像

    if ( uc == 0 ){testColor(data, 0, 0, xres, yres, r, g, b, toBps(ui->comboBox_Format->currentText()));}else if(uc == 1){float len = xres/8;clearFrameBuff(data, 0*len, 0, xres/8, yres,  0xff, 0xff, 0xff, toBps(ui->comboBox_Format->currentText()));clearFrameBuff(data, 1*len, 0, xres/8, yres,  0xb8, 0xc6, 0x00, toBps(ui->comboBox_Format->currentText()));clearFrameBuff(data, 2*len, 0, xres/8, yres,  0x00, 0xc2, 0xca, toBps(ui->comboBox_Format->currentText()));clearFrameBuff(data, 3*len, 0, xres/8, yres,  0x00, 0xc6, 0x00, toBps(ui->comboBox_Format->currentText()));clearFrameBuff(data, 4*len, 0, xres/8, yres,  0xc7, 0x00, 0xb9, toBps(ui->comboBox_Format->currentText()));clearFrameBuff(data, 5*len, 0, xres/8, yres,  0xc4, 0x00, 0x00, toBps(ui->comboBox_Format->currentText()));clearFrameBuff(data, 6*len, 0, xres/8, yres,  0x00, 0x00, 0xcb, toBps(ui->comboBox_Format->currentText()));clearFrameBuff(data, 7*len, 0, xres/8, yres,  0x00, 0x00, 0x00, toBps(ui->comboBox_Format->currentText()));}else if(uc == 2){clearFrameBuff(data, 0, 0, xres, yres, ui->lineEdit_Red->text().toInt(), \ui->lineEdit_Green->text().toInt(), ui->lineEdit_Blue->text().toInt(), \toBps(ui->comboBox_Format->currentText()));}else if(uc == 3){checkerBoard(data, 0, 0, xres, yres, toBps(ui->comboBox_Format->currentText()));}else if(uc == 4){float len = xres/l_num;for( int i = 0; i < l_num; i++ ){if( i%2 == 0 ){clearFrameBuff(data, i*len, 0, xres/l_num, yres,  0xff, 0xff, 0xff, toBps(ui->comboBox_Format->currentText()));}else{clearFrameBuff(data, i*len, 0, xres/l_num, yres,  0x00, 0x00, 0x00, toBps(ui->comboBox_Format->currentText()));}}}else if(uc == 5){testUrandom(data, 0, 0, xres, yres, toBps(ui->comboBox_Format->currentText()));}else if ( uc == 6 ){testSolidColor(data, 0, 0, xres, yres, r, g, b, toBps(ui->comboBox_Format->currentText()));}

[AssistantTool]_7_添加生成测试图的功能相关推荐

  1. Android StaticLayout实现主流便签内容生成长图功能

    便签记事本是用户常用的一类手机软件,目前各大主流手机均自带此类的工具,并且功能逐渐完善,其中有一项功能--一键生成图片分享比较吸引眼球,尤其是有些社交app在分享动态时有字数限制,如果将要发的内容生成 ...

  2. MySQL可以生成E-R图嘛_使用Navicat for mysql生成E-R图,添加外键约束

    1. E-R图生成 用 mysql的Navicat Premium图形界面工具 . 可以生成E-R图. 把你的数据库选中后右键 , 选择"逆向表到模型" 就可以了 2.添加外键约束 ...

  3. php imagick加GD实现gif图换脸动画生成表情包制作功能

    gif人脸表情包制作 需求讲解 摸索过程问题汇总 用到的技术 实现思路 体验一下效果 需求讲解 最近公司需要开发一款gif图生成人脸表情包功能,人脸PNG图跟gif图合成新的gif,保持原来频率运动, ...

  4. python多张图片生成ppt_用Python实现ppt转化图片(附带长图合并功能)

    前言 笔者前一阵在学习数据相关的东西,从初学开始,一直在参加社区中的图表小挑战,此项活动是社区出题人给出一定官方数据,参加小挑战的人员可以对数据进行可视化,从而挖掘出有趣的信息. 而这个可视化的过程中 ...

  5. 如何让图片在html中自动填充颜色,如何使用传图水印功能在图片上传时自动添加文字或图片水印?...

    下面我们来了解一下小蚂蚁编辑器的功能"传图水印"!开启传图水印功能后,所有上传的图片会自动添加文字或图片水印,并且支持自定义设置水印的展现形式. 一.开启传图水印 ① 鼠标移动到首 ...

  6. php生成vcf,[宜配屋]听图阁 - PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】 原创...

    本文实例讲述了PHP实现生成vcf vcard文件功能类定义与使用方法.分享给大家供大家参考,具体如下: 前面介绍了php读取vcf文件的方法,这里再来研究一下vcf文件的生成方法. VCF格式是Wi ...

  7. 写【Python折线图】的一百个技巧(一、生成折线图网页)

    写[Python折线图]的一百个技巧(一.生成折线图网页) 目录 写[Python折线图]的一百个技巧(一.生成折线图网页) 前言 学习环境 Python库环境 探究目标 绘制过程 引入库 初始化数据 ...

  8. auCDtect Task Manager——这不只是个无损检测工具,还能批量生成频谱图,强烈推荐

    By 咣輝のま裔http://blog.sina.com.cn/s/blog_637d7cd80101pzx4.html 转载请注明作者信息,谢谢. 今天要向大家推荐一个无损检测工具,它是auCDte ...

  9. html2canvas手机黑屏,html2canvas 生成海报图 开发中遇到的问题

    ios里,生成的图片不显示 canvas.toDataURL('image/jpeg', 1.0) 使用image/jpeg格式,在指定图片格式为 image/jpeg 或 image/webp的情况 ...

最新文章

  1. zabbix监控利用Python脚本发邮件
  2. 【计算机视觉】背景建模之PBAS
  3. 如何在RHEV平台中新建ISO存储域
  4. 图解Dev C++ 创建Win32 项目模板
  5. 删除文件后,磁盘空间没有释放的处理记录
  6. mysql 开发复制协议_MySQL组复制MGR(一)– 技术概述
  7. 【微软黑科技一周概览】
  8. suse mysql 库文件_suse 10 下mysql安装
  9. 1、matplotlib绘制一个简单的图形
  10. 打印九九乘法表算法-java
  11. FBI也没辙?超强加密软件TrueCrypt全教程
  12. 3DMAX卸载与安装教程和常见问题 适用于3DMAX2013-2020
  13. 我的大学十年 (转)
  14. 台式计算机可以发射无线网络,台式电脑wifi发射教程
  15. 超信Linux版(超信 for Linux下载) v1.3.0官方版
  16. Sobel算子的边缘检测实现
  17. 手把手搭建一个完整的ssm登录注册项目(适合新手)
  18. 西农大 C plus
  19. 2021年西式面点师(初级)报名考试及西式面点师(初级)新版试题
  20. 网卡工作在OSI的第几层?[转]

热门文章

  1. Unity3d自学之路(一)
  2. CSDN超级实习生计划学习打卡—— Ipv6
  3. Transform 转换
  4. 【学术相关】女教师的两难困境:当生育遇上考核
  5. OpenHarmony驱动子系统开发
  6. 第9个HttpClient 例子,HttpClient+jsoup 扩展获取网站信息
  7. oracle10g 概述,Oracle 10g数据库概述
  8. android 齿轮动画,Android(Animation): 一直转个不停的齿轮
  9. 如何用Robotics Toolbox 建模多自由度的机械手臂
  10. linux安装firefox