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

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

实现效果

实现代码

如果需要更改为其他字母组合,在下面代码的基础上简单修改就可以使用。

步骤:(1) 定义字母形状;(2) 给出字母组合顺序;(3) 重新运行程序;

Matlab源文件代码也已经上传,下载链接就在文章头部的位置。

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 < 1
    disp('Warning: n must be greater than or equal to 1.');
    return;
end

for k = 1:numLetters
    singleLetter = 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:rows
    y = i * blockSize;
    plot([0, totalCols * blockSize], [y, y], 'Color', lightGrayColor, 'LineWidth', 0.5); % 绘制横线
end
for j = 0:totalCols
    x = j * blockSize;
    plot([x, x], [0, rows * blockSize], 'Color', lightGrayColor, 'LineWidth', 0.5); % 绘制竖线
end

% 创建矩形句柄数组
hRect = zeros(rows, totalCols);

% 初始化矩形句柄和位置
for i = 1:rows
    for j = 1:totalCols
        if A(i, j) == 1
            x = (j - 1) * blockSize;
            y = (rows - i) * blockSize;
            hRect(i, j) = rectangle('Position', [x, y, blockSize, blockSize], ...
                                    'EdgeColor', 'w', 'LineWidth', 1);
        end
    end
end

% 动画循环
for frame = 1:numFrames
    for i = 1:rows
        for j = 1:totalCols
            if 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);
            end
        end
    end
    
    % 捕获当前帧的图像
    frameImage = getframe(gcf);
    im = frame2im(frameImage); % 将帧转换为图像
    
    % 将图像写入GIF文件
    % 使用64种颜色而不是256种,以减小文件大小
    [imind, cm] = rgb2ind(im, 64);
    if frame == 1
        imwrite(imind, cm, gifFilename, 'gif', 'Loopcount', inf, 'DelayTime', 1/fps);
    else
        imwrite(imind, cm, gifFilename, 'gif', 'WriteMode', 'append', 'DelayTime', 1/fps);
    end
    
    % pause(1/fps);  % 控制matlab中显示的帧率,和输出的gif图像一致
end

hold off;
相关推荐
Evand J9 小时前
集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码
matlab·平面·目标跟踪
我是博博啦14 小时前
matlab例题
人工智能·算法·matlab
2402_8713219515 小时前
MATLAB方程组
gpt·学习·线性代数·算法·matlab
Matlab程序猿小助手1 天前
【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·嵌入式硬件·算法·matlab·机器人·无人机
Matlab精灵2 天前
使用MATLAB进行字符串处理
开发语言·matlab
机器学习之心2 天前
POD-Transformer多变量回归预测(Matlab)
matlab·回归·transformer·pod-transformer
WangYan20222 天前
高光谱遥感是什么?高光谱遥感数据如何处理?(基于Matlab和Python多案例解析)从小白到精通
matlab·高光谱遥感数据处理·混合像元分解
Matlab精灵3 天前
利用Matlab函数实现深度学习算法
深度学习·算法·matlab
十七算法实验室3 天前
Matlab实现北方苍鹰优化算法优化随机森林算法模型 (NGO-RF)(附源码)
开发语言·深度学习·算法·决策树·随机森林·机器学习·matlab
mailangduoduo3 天前
基于matlab的语音信号去噪的App Designer 设计
matlab·gui设计·语音去噪·app设计