您可以通过多种方式实现此目标,但基本前提是,您需要某种滚动偏移来确定基本图像的开始.

然后,您需要在它之前和之后填充区域(如果图像小于可用高度),直到空间被填满.

以下示例使用javax.swing.Timer以给定量更新偏移量.然后,paintComponent方法渲染其前后的所有空间,包括当前图像位置.

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.Timer;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

public class ScrollingBackground {

public static void main(String[] args) {

new ScrollingBackground();

}

public ScrollingBackground() {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {

}

JFrame frame = new JFrame("Testing");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setLayout(new BorderLayout());

frame.add(new BackgroundPane());

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

});

}

public class BackgroundPane extends JPanel {

private BufferedImage bg;

private int yOffset = 0;

private int yDelta = 4;

public BackgroundPane() {

try {

bg = ImageIO.read(new File("Background.png"));

} catch (IOException ex) {

ex.printStackTrace();

}

Timer timer = new Timer(40, new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

yOffset += yDelta;

if (yOffset > getHeight()) {

yOffset = 0;

}

repaint();;

}

});

timer.start();

}

@Override

public Dimension getPreferredSize() {

return bg == null ? new Dimension(200, 200) : new Dimension(bg.getWidth(), bg.getHeight());

}

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

if (bg != null) {

Graphics2D g2d = (Graphics2D) g.create();

int xPos = (getWidth() - bg.getWidth()) / 2;

int yPos = yOffset;

while (yPos > 0) {

yPos -= bg.getHeight();

g2d.drawImage(bg, xPos, yPos, this);

}

yPos = yOffset;

while (yPos < getHeight()) {

g2d.drawImage(bg, xPos, yPos, this);

yPos += bg.getHeight();

}

g2d.dispose();

}

}

}

}

你可以通过使用后备缓冲区和/或subImage来乐观这一点,但是你明白了……

java图片循环_java – 如何实现无限图像循环?相关推荐

  1. java图片降噪_Java基于opencv实现图像数字识别(四)—图像降噪

    Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...

  2. java 图片水印_JAVA实现图片水印

    一.JAVA图片水印实现原理 1.1.JAVA图片水印实现思路 1.创建缓存图片对象. 2.创建Java绘图工具对象. 3.使用绘图工具对象将原图绘制到缓存图片对象. 4.使用绘图工具将水印(文字/图 ...

  3. java 图片 缩略图_java 图片缩略图的两种方法

    最近网上看到两种不同的java图片缩略图的绘制方案 第一种,使用Graphics().drawImage按照一定的比例重新绘制图像. package com.image.suoluetu; impor ...

  4. java图片拷贝_java图片拷贝

    请选择上传的图片或文件: 可以看到,我们将...之后,我们就来编写这个 servlet--UpLoad.java 复制代码 代码如下: package load; import java.io.Fil ...

  5. java图片马赛克_java实现图片缩放、旋转和马赛克化

    本文是作者结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化. 不多说,上代码: package deal; import java.awt.Color; import jav ...

  6. java 图片旋转_Java实现图片旋转、指定图像大小和水平翻转|chu

    本文实例为大家分享了Java实现图片旋转.指定图像大小.水平翻转,供大家参考,具体内容如下 package com.zeph.j2se.image; import java.awt.Graphics2 ...

  7. java 图片 黑白_java – 将图像转换为黑白(不是灰色标尺)

    你好我将图像从彩色转换为纯黑色和白色,结果是一个黑暗的图像.我没理由.以下是我的代码,它受到SO上其他代码的启发. 任何指导都会有所帮助. BufferedImage coloredImage = I ...

  8. java 图片有损压缩_java - 用有损jpeg压缩多页tiff图像 - 堆栈内存溢出

    将图像从16位减少到8位. 假设您有一个byte []变量plane16,在其中您有图像的所有像素. 注意 :我的byte [] plane16从16位图像获取数据,但是byte为8bit = 1by ...

  9. java图片色差_java – JPEG图像的颜色错误

    我现在找到一个解决方案,这是工作,至少如果我的结果图像也是一个JPEG: 首先我读取图像(从字节数组imageData),最重要的是,我还读取元数据. InputStream is = new Buf ...

  10. java 图片合并_Java如何实现图片的叠加与拼接操作

    关于Java实现图片的叠加与拼接的文章网络上确实很多,碰巧小编开发工作中也遇到这些问题,就做了简要的梳理,作为笔记以备不时之需. Java对图片的处理主要使用的是BufferedImage类. Buf ...

最新文章

  1. ASP.NET Core 上传多文件 超简单教程
  2. python编程入门到实践 百度云-python网络爬虫从入门到实践pdf
  3. CSS3 @font-face 规则
  4. Spring boot的Spring MVC扩展功能
  5. Segment Model.
  6. Android ActionBarSherlock使用教程
  7. 人类社会发明的第一台计算机是什么,第二周第一课概述计算机
  8. Linux的cron和crontab
  9. 将windows c盘安装在linux,将WindowsC盘hda1安装在Linux文件系统的/winsys目录下,命令是()。...
  10. php curl登录,php curl保存登录信息 模拟登录
  11. iOS:关于UIView切角的两种实现方式
  12. 【推荐】数据科学中的非数学特征提取方法
  13. 计算机无法安装应用,电脑没法安装软件?教您解决电脑没法安装软件
  14. 【“您未被授权查看该页”的原因和解决办法】
  15. 确认OHS版本的方法
  16. cloudera-repos 地址
  17. AutoCAD Civil3D 2023安装图文教程及下载
  18. S3C2440 I2C实现
  19. 机房环境监控系统的作用,环境与设备监控系统的作用
  20. 小程序碰上浏览器搜索入口!

热门文章

  1. 关于HP C7K的firmware management中的power policy理解
  2. RedHat 5.6_x86_64 + ASM + RAW+ Oracle 10g RAC (二)
  3. ping命令两种返回信息的区别
  4. 【狂神说Redis】总集篇
  5. crossentropyloss 输入_Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解
  6. 去掉a标签下划线_编辑器、HTML基础、编码、基础标签
  7. ARM开发7.3.1 基础实训( 1 ) 单个按键的输入系统设计( 1 )--LPC21XX
  8. mybatis源码分析详解
  9. springcloud feign负载均衡_SpringCloud学习笔记(2)——Ribbon
  10. 数据中心淘汰服务器,浅谈数据中心危机严重的程度