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

Matlab绘制像素风字母颜色及透明度随机变化动画

本文是使用 Matlab 绘制像素风字母颜色及透明度随机变化动画的教程

实现效果

请添加图片描述

实现代码

如果需要更改为其他字母组合,在下面代码的基础上简单修改就可以使用。
步骤:(1) 定义字母形状;(2) 给出字母组合顺序;(3) 重新运行程序;

Matlab源文件代码也已经上传,下载链接就在文章头部的位置。
在这里插入图片描述

% 定义字母的形状
D_single = [1 1 1 0 0;1 0 0 1 0;1 0 0 0 1;1 0 0 0 1;1 0 0 0 1;1 0 0 1 0;1 1 1 0 0
];G_single = [0 1 1 1 0;1 0 0 0 1;1 0 0 0 0;1 0 1 1 1;1 0 0 0 1;1 0 0 0 1;0 1 1 1 1
];O_single = [0 1 1 1 0;1 0 0 0 1;1 0 0 0 1;1 0 0 0 1;1 0 0 0 1;1 0 0 0 1;0 1 1 1 0
];% 存储需要显示的字母形状的单元格数组
letters = {G_single, O_single, O_single, D_single};% 设置参数
blockSize = 10; % 每个方格的大小
rows = 7;       % 字母'A'的行数
cols = 5;       % 字母'A'的列数
numLetters = length(letters); % 插入的字母数量
extraCols = 10; % 额外增加的背景栅格列数
numFrames = 50; % 动画总帧数
fps = 3;        % 动画帧率
scaleFactor = 5;  % 窗口大小缩放系数,可调整以更好地控制窗口大小
gifFilename = 'animated_letters.gif'; % 输出的GIF文件名% 定义两个字母之间的间隔
spaceCols = 1;  % 间隔1列% 计算总列数
totalCols = numLetters * cols + (numLetters-1) * spaceCols + extraCols;  % 增加背景栅格的列数% 计算左右两侧额外的空列数,以居中字母
leftPadding = floor(extraCols / 2);
rightPadding = extraCols - leftPadding;% 初始化整个矩阵
A = zeros(rows, totalCols); % 初始化全为0的矩阵% 在矩阵中插入numLetters个字母,,并居中
% 如果n小于1,退出程序,并打印警告信息
if numLetters < 1disp('Warning: n must be greater than or equal to 1.');return;
endfor k = 1:numLetterssingleLetter = letters{k};colStart = leftPadding + (k - 1) * (cols + spaceCols) + 1;colEnd = leftPadding + (k - 1) * (cols + spaceCols) + cols;A(:, colStart:colEnd) = singleLetter;
end% 初始化图形窗口,设置合适的窗口大小
windowWidth = blockSize * totalCols * scaleFactor + 20;  % 绘图窗口宽度
windowHeight = blockSize * rows * scaleFactor + 20;      % 绘图窗口高度
figure('Units', 'pixels', 'Position', [100 100 windowWidth windowHeight]);
axis equal;
hold on;
axis off; % 隐藏坐标轴% 设置紧凑布局,移除边缘空白
set(gca, 'Units', 'normalized', 'Position', [0 0 1 1]);% 设置浅灰色背景
set(gca, 'Color', [0.9 0.9 0.9]);  % 0.9是浅灰色% 绘制浅色栅格背景
lightGrayColor = [0.8, 0.8, 0.8];  % 浅灰色
for i = 0:rowsy = i * blockSize;plot([0, totalCols * blockSize], [y, y], 'Color', lightGrayColor, 'LineWidth', 0.5); % 绘制横线
end
for j = 0:totalColsx = j * blockSize;plot([x, x], [0, rows * blockSize], 'Color', lightGrayColor, 'LineWidth', 0.5); % 绘制竖线
end% 创建矩形句柄数组
hRect = zeros(rows, totalCols);% 初始化矩形句柄和位置
for i = 1:rowsfor j = 1:totalColsif A(i, j) == 1x = (j - 1) * blockSize;y = (rows - i) * blockSize;hRect(i, j) = rectangle('Position', [x, y, blockSize, blockSize], ...'EdgeColor', 'w', 'LineWidth', 1);endend
end% 动画循环
for frame = 1:numFramesfor i = 1:rowsfor j = 1:totalColsif A(i, j) == 1% 随机生成新的颜色和透明度randomColor = rand(1, 3);randomAlpha = 0.5+ (1-0.5)*rand(); % 透明度在(0.5-1)之间变化% 更新方块的颜色和透明度set(hRect(i, j), 'FaceColor', randomColor,'FaceAlpha', randomAlpha);endendend% 捕获当前帧的图像frameImage = getframe(gcf);im = frame2im(frameImage); % 将帧转换为图像% 将图像写入GIF文件% 使用64种颜色而不是256种,以减小文件大小[imind, cm] = rgb2ind(im, 64);if frame == 1imwrite(imind, cm, gifFilename, 'gif', 'Loopcount', inf, 'DelayTime', 1/fps);elseimwrite(imind, cm, gifFilename, 'gif', 'WriteMode', 'append', 'DelayTime', 1/fps);end% pause(1/fps);  % 控制matlab中显示的帧率,和输出的gif图像一致
endhold off;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Containerd 介绍
  • LINUX原始机安装JDK
  • Ubuntu 如何优雅关机
  • Kafka 单机和集群环境部署教程
  • 解决oracel锁表问题;SQL 错误 [54] [61000]: ORA-00054: 资源正忙
  • qt quick实现的水波纹特效:横向波纹、纵向波纹效果
  • 真题解析 | CCF CSP-J 2019 入门级 C++语言真题及答案
  • 安装开源软件ChatALL(齐叨)来聚合各大人工智能工具
  • Golang | Leetcode Golang题解之第332题重新安排行程
  • 使用 `@JsonTypeInfo` 和 `@JsonSubTypes` 注解实现多态序列化
  • django电商易购系统-计算机毕业设计源码61059
  • Element Plus的el-carousel走马灯平铺多张图片
  • 直播App遭受抓包后的DDoS与CC攻击防御策略
  • Haproxy的配置详解与使用
  • npm使用教程:从入门到精通
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • flutter的key在widget list的作用以及必要性
  • Odoo domain写法及运用
  • python学习笔记 - ThreadLocal
  • Vue 重置组件到初始状态
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 对象管理器(defineProperty)学习笔记
  • 反思总结然后整装待发
  • 基于组件的设计工作流与界面抽象
  • 简单基于spring的redis配置(单机和集群模式)
  • 将回调地狱按在地上摩擦的Promise
  • 聊聊flink的BlobWriter
  • 每天10道Java面试题,跟我走,offer有!
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 问题之ssh中Host key verification failed的解决
  • 学习Vue.js的五个小例子
  • 转载:[译] 内容加速黑科技趣谈
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • # Panda3d 碰撞检测系统介绍
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #php的pecl工具#
  • #控制台大学课堂点名问题_课堂随机点名
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (转) ns2/nam与nam实现相关的文件
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • ***原理与防范
  • .NET DataGridView数据绑定说明
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net mvc部分视图
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • ?.的用法
  • @JsonFormat与@DateTimeFormat注解的使用
  • [20160902]rm -rf的惨案.txt
  • [AIGC] Java List接口详解
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心