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

rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十五)窗口图标 / 任务栏图标

一、窗口图标 / 任务栏图标设置

  • 关键点,图片类型必须与设置类型相同,以下常用类型
    • image::ImageFormat::Ico
    • image::ImageFormat::Jpeg
    • image::ImageFormat::Png
    • image::ImageFormat::Gif
    • image::ImageFormat::WebP
    • image::ImageFormat::Bmp
  • 图片宽高要相同,代码中要写实际的图片宽高,否则显示可能错乱
use eframe::egui;
use egui::viewport::IconData;
use image;
use std::io::Cursor;
use std::sync::{Arc, Mutex};
use std::{fs, thread};// 加载ICO图标文件到字节数组(假设文件位于项目上级目录的c_128.ico)
let icon_data = include_bytes!("../c_128.ico");// 使用image库加载ICO文件:
// 1. 通过Cursor将字节数组转为可读取流
// 2. 指定格式为ICO,其他图片格式做相应修改
// 3. 解包结果(失败时panic)
// 4. 转换为RGBA8格式(带透明度通道)
let img = image::load(Cursor::new(icon_data), image::ImageFormat::Ico).unwrap().to_rgba8();// 创建IconData结构体实例:
// - rgba: 将图像原始像素数据转为Vec<u8>并克隆
// - width/height: 设置为128x128(需与实际图像尺寸匹配)
let mut icon = IconData {rgba: img.into_raw().to_vec(),width: 128,height: 128,
};// 配置eframe窗口选项:
// - viewport: 使用默认ViewportBuilder并设置图标
//   - with_icon: 将图标包装成Arc智能指针(线程安全引用计数)
// - ..Default::default(): 保留其他选项的默认值
let options = eframe::NativeOptions {viewport: egui::ViewportBuilder::default().with_icon(Arc::new(icon)),..Default::default()
};

二、方法整合

// 返回IconData结构体,文件路径字符串和宽高参数
fn load_icon_rgba(pathstr: &str, width: u32, height: u32) -> IconData {// 使用标准库fs模块读取路径指定的文件内容到字节数组let icon_data = fs::read(pathstr).unwrap();// 使用image库加载图片数据// 将字节数组包装成Cursor(内存读取器)作为输入源// 指定图片格式为PNG,其他图片格式做相应修改let image = image::load(Cursor::new(icon_data), image::ImageFormat::Png).unwrap().to_rgba8();   // 解包加载结果并将图片转换为RGBA8格式(每像素4字节)IconData {         // 构造IconData结构体实例rgba: image.into_raw().to_vec(),  // 将图像数据转换为原始字节向量width,                    // 图片的宽度,必须和图片一致height,                   // 图片的高度,必须和图片一致}
}// 其他代码省略......let rgba = load_icon_rgba("./c_800.png", 800, 800);  // 传入项目目录下文件,宽高与图片一致
let options = eframe::NativeOptions {viewport: egui::ViewportBuilder::default().with_icon(rgba)        // 设置窗口图标       ..Default::default()        // 保留其他选项的默认值
};

注意:两个代码,图片文件均在项目文件夹下,注意路径写法有所不同!!!


文章转载自:

http://taIqmhwI.xfjwm.cn
http://frVycxwb.xfjwm.cn
http://Vrq0Gi04.xfjwm.cn
http://JFEnpHd5.xfjwm.cn
http://AUjYJl16.xfjwm.cn
http://BaP4XlLO.xfjwm.cn
http://cKbeA1yh.xfjwm.cn
http://EpSrINZZ.xfjwm.cn
http://nBZo2GrK.xfjwm.cn
http://p3VeNFEO.xfjwm.cn
http://Val2Maa7.xfjwm.cn
http://AjtfFRHi.xfjwm.cn
http://i34ZVcYO.xfjwm.cn
http://cKpGqnrD.xfjwm.cn
http://o31mOJzi.xfjwm.cn
http://cRYkWWf5.xfjwm.cn
http://KkbGwFXS.xfjwm.cn
http://enjPLmjR.xfjwm.cn
http://xLiKjcfX.xfjwm.cn
http://i0y2wbqh.xfjwm.cn
http://FHXXaHrC.xfjwm.cn
http://jLyMrJBV.xfjwm.cn
http://zcKS69ya.xfjwm.cn
http://SoRdKDF6.xfjwm.cn
http://eZQ4JiHk.xfjwm.cn
http://0dHFXOuv.xfjwm.cn
http://eSGrSQhu.xfjwm.cn
http://w6ieJMEP.xfjwm.cn
http://5LaEUhmk.xfjwm.cn
http://phHK08rR.xfjwm.cn
http://www.dtcms.com/a/368632.html

相关文章:

  • 安科瑞基站智慧运维云平台:安全管控与节能降耗双效赋能
  • BYOFF(自定义格式函数)(79)
  • 在 CentOS 9 上安装 Docker 的完整指南
  • 机器学习算法介绍二
  • 【MYSQL | 高级篇 日志、主从复制与读写分离】
  • IO进程线程;多线程;线程互斥同步;互斥锁;无名信号量;条件变量;0905
  • 虚拟机详细图文教程系列15、Linux虚拟机Centos8系统部署禅道开源项目
  • uniapp开发小程序,列表 点击后加载更多数据
  • 云市场周报 (2025.09.05):解读腾讯云AI安全、阿里数据湖与KubeVela
  • 一键生成PPT的AI工具排名:2025年能读懂你思路的AI演示工具
  • 【数据结构、java学习】数组(Array)
  • 越南电网3D地图
  • 大数据毕业设计选题推荐-基于大数据的分化型甲状腺癌复发数据可视化分析系统-Spark-Hadoop-Bigdata
  • Kubernetes 全景指南:从核心概念到云原生未来
  • 视频监控展示插件-js,支持多种视频格式
  • 2025年国家高新技术企业认定:申报材料和流程详解
  • 【面试场景题】spring应用启动时出现内存溢出怎么排查
  • 【NVIDIA AIQ】自定义函数实践
  • 【RelayMQ】基于 Java 实现轻量级消息队列(六)
  • 解锁 Claude Code 终极工作流:从基础到进阶的全流程指南
  • 深入浅出 全面剖析消息队列(Kafka,RabbitMQ,RocketMQ 等)
  • 工业HMI:人机交互的核心与智能制造的桥梁
  • 解决rt_pin_get返回错误码的问题
  • 基于单片机汽车防撞系统设计
  • Java 提取 PDF 文件内容:告别手动复制粘贴,拥抱自动化解析!
  • 【AI总结】Python BERT 向量化入门指南
  • 《sklearn机器学习——回归指标2》
  • 投资储能项目能赚多少钱?小程序帮你测算
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的公益课引流策略研究
  • 医疗问诊陪诊小程序:以人性化设计构建健康服务新生态