1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 桌面添加视疲劳缓解图

桌面添加视疲劳缓解图

时间:2024-03-29 19:01:44

相关推荐

桌面添加视疲劳缓解图

程序员的眼睛长时间盯着计算机屏幕,很容易导致眼睛疲劳,且在办公室看不了远处,于是想起了视疲劳缓解图,又叫远眺图。用程序员的方法,在自己喜欢的壁纸上绘制这个远眺图,把远眺图搬到桌面上。但是不能一直显示在桌面上,那样就看不到自己喜欢的壁纸了,将桌面壁纸设置为幻灯片放映,让远眺图每隔一段时间显示几分钟。因为工作时主要使用外接显示器,笔记本的显示屏经常是空闲的,当发现笔记本桌面出现了远眺图时,就可以抽空看一会儿。至于每隔多久显示多久,我的做法是将没有远眺图的壁纸复制几份,文件名使用数字顺序编号,至于复制几份,就结合幻灯片切换时间来定吧。

以下是该功能的Java代码:

import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;public class AddDistantView {static final int initLineWidth = 45; // 最外绿框线条宽度static final int reduceWidth = 1; // 线条每次减少宽度static final int reduceEveryFewLayers = 1; // 每几层减少一次线条宽度static final int taskbarWidth = 100; // 任务栏宽度,远眺图不绘制到任务栏区域static final Position taskbarPosition = Position.Down; // 任务栏位置// 打开壁纸,绘制远眺图,并另存public static void main(String[] args) throws IOException {// 弹出文件选择框,选择壁纸文件FileDialog fileDialog = new FileDialog(new Frame(), "选择壁纸", FileDialog.LOAD);fileDialog.setVisible(true);if (fileDialog.getFile() == null) {System.exit(0);}String fileName = fileDialog.getFile();String path = fileDialog.getDirectory() + fileName;BufferedImage image = ImageIO.read(new File(path));paint(image, false);String formatName = fileName.substring(fileName.lastIndexOf(".") + 1);// 弹出文件选择框,选择保存路径fileDialog = new FileDialog(new Frame(), "选择保存路径", FileDialog.SAVE);fileDialog.setFile(fileName);fileDialog.setVisible(true);if (fileDialog.getFile() == null) {System.exit(0);}path = fileDialog.getDirectory() + fileDialog.getFile();ImageIO.write(image, formatName, new File(path));System.exit(0);}/*** 绘制远眺图* @param image* @param full*/public static void paint(BufferedImage image, boolean full) {Color[] color = new Color[2];// 比Color.GREEN鲜艳的绿色color[0] = new Color(0, 176, 80);color[1] = Color.WHITE;int lineWidth = initLineWidth, x = 0, y = 0, w, h;if (full) {// 全图绘制w = image.getWidth();h = image.getHeight();} else {// 正方形区域绘制,且不绘制到任务栏区域int areaWidth = taskbarPosition.isVertical() ? image.getWidth() : image.getWidth() - taskbarWidth;int areaHeight = taskbarPosition.isVertical() ? image.getHeight() - taskbarWidth : image.getHeight();w = Math.min(areaWidth, areaHeight);h = w;x = (image.getWidth() - w) / 2;y = (image.getHeight() - h) / 2;if (taskbarPosition.isVertical()) {y += taskbarPosition.value * taskbarWidth / 2;} else {x += taskbarPosition.value * taskbarWidth / 2;}}// 绘制绿白间隔框,每层线条宽度逐渐减少Graphics2D g2D = image.createGraphics();int i = 0;while (lineWidth > 0 && w > 0 && h > 0) {g2D.setColor(color[i % 2]);g2D.fillRect(x, y, w, h);i++;if (i % reduceEveryFewLayers == 0) {lineWidth -= reduceWidth;}x += lineWidth;y += lineWidth;w -= 2 * lineWidth;h -= 2 * lineWidth;}g2D.dispose();}/*** 任务栏位置枚举*/public enum Position {Up(1), Down(-1), Left(1), Right(-1);private int value;Position(int value) {this.value = value;}/*** 是否在垂直方向* @return*/public boolean isVertical() {return this.equals(Up) || this.equals(Down);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。