当前位置 : IT培训网 > Java开发 > Java教程 > Java编程之图像缓冲技术

Java编程之图像缓冲技术

时间:2016-09-02 17:34:59  来源:Java培训网  作者:IT培训网  已有:名学员访问该课程
标签(Tag):   java(722)Java难学吗(1)
为了提高显示效果,许多应用程序都采用图像缓冲技术,即先把图像完整装入内存,在缓冲区中绘制图像或图形,然后将缓冲区中绘制好的图像或图形一次性输出在屏幕上。缓冲技术不仅可以解决

你觉得Java难学吗,不还是坚持学到这里了,下面就随着小编一起来看看Java编程之图像缓冲技术方面的知识吧,相信学了这个你的技术就会更上一层楼了,也许下一个Java大牛就是你了。

正文开始:

当图像信息量较大,采用以上直接显示的方法,可能前面一部分显示后,显示后面一部分时,由于后面一部分还未从文件读出,使显示呈斑驳现象。为了提高显示效果,许多应用程序都采用图像缓冲技术,即先把图像完整装入内存,在缓冲区中绘制图像或图形,然后将缓冲区中绘制好的图像或图形一次性输出在屏幕上。缓冲技术不仅可以解决闪烁问题,并且由于在计算机内存中创建图像,程序可以对图像进行像素级处理,完成复杂的图像变换后再显示。

【例 12-6】小应用程序程序演示图像缓冲显示技术。程序运行时,当鼠标在图像区域内按下时,图像会出现边框,托动鼠标时,图像也随之移动。抬起鼠标后,边框消失。程序将两种状态的图像先放入两个缓冲区,当鼠标拖动时,不断地在新的位置重绘鼠标按下样式的图像鼠标抬起时,重绘鼠标抬起样式的图像。

import java.applet.*;

import java.awt.*;

imprt java.awt.image. * ;

import javax.swing.*;

import java.event.*;

public class Example7_6 extends Applet{

    Image myPicture;

    /*init()方法中,先定义一个Image对象,并赋予createImage()方法的返回值,接着创建Graphics对象并赋予其图形环境。最后,让Graphics对象调用drawImage()方法显示图像。

由于这里的Graphics对象offScreenGc是非屏幕对象是,小程序窗口不会有图像显示*/

    public void init(){

        myPicture = getImage(getCodeBase(), "myPic.JPG");

        Image offScreenImage = createImage(size().width, size().height);

        Graphics offScreenGc = offScreenImage.getGraphics();

        new BufferedDemo(myPicture);

    }

    /*drawImage()方法的第四个参数是实现ImageObserver接口,在init()方法中,调用drawImage()方法的参数是this,所以小程序要定义imageUpdate()方法*/

    public boolean imageUpdate(Image img, int infoFlg, int x, int y, int w, int h){

        if (infoFlg = ALLBITS){  // 表示图像已全部装入内存

            repaint();

            return false;// 防止线程再次调用imageUpdate()方法

        }

        else

            return true;

    }

}

/*程序的执行过程是,当小程序调用drawImage()方法时,drawImage()方法将创建一个调用 imageUpdate()方法的线程,在imageUpdate()方法中,测定图像是否已在部分调入内存。创建的线程不断调用imageUpdate()方法,直到该方法返回false为止。参数infoFlg使小程序能知道图像装入内存的情况。当infoFlg等于ALLBITS时,表示图像已全部装入内存。当该方法发现图像已全部装入内存后,置imageLoaded为真,并调用repaint()方法重画小程序窗口。方法返回false防止线程再次调用imageUpdate()方法。*/

class BufferedDemo extends JFrame{

    public BufferedDemo(Image img){

        this.getContentPane().add(new PicPanel(img));

        setTile("双缓技术演示");

        setSize(300, 300);

        setVisible(true);

    }

}

class PicPane extends JPanel implements MouseListener, MouseMotionListener{

    int x = 0, y = 0, dx = 0, cy = 0;

    BufferedImage bimg1, bimg2;

    boolean upstate = true;

    public picPanel(Image img){

        this.setBackground(Color.white);

        this.addMouseListener(this);

        this.addMouseMotionListener(this);

        bimg1 = new BufferedImage(img.getWidth(this), img.getHeight(this),

        BufferedImage.TYPE_INT_ARGB);

        bimg2 = new BufferedImage(img.getWidth(this), img.getHeight(this),

        BufferedImage.TYPE_INT_ARGB);

        Graphics2D g2D1 = bimg1.createGraphics();

        Graphics2D g2D2 = bimg2.createGraphics();

        g2D1.drawImage(img, 0, 0, this);

        g2D2.drawImage(img, 0, 0, this);

        g2D2.drawRect(1, 1, img.getWidth(this) - 3, img.getHeight(this) - 3);

    }

    public void paintComponent(Graphics g){

        super.painComponent(g);

        Graphics2D g2D = (Graphics2D)g;

        if (upState)

            g2D.drawImage(bimg1, x, y, this);

        else

            g2D.drawImage(bimg2.x, y, this);

    }

    public void mousePress(MouseEvent e){

        if (e.getX() >= x && e.getX() < x + bimg1.getWidth(this) && e.getY() >= y&& e.getY() < y + bimg1.getHeight(this)){

            upstate = false;

            setCursor(Cursor.getPredefinedCursor(Coursor.HAND_CURSOR));

            dx = e.getX() - x;

            dy = e.getY() - y;

            repain();

        }

    }

    public void mouseExited(MouseEvent e){}

    public void mouseClicked(MouseEvent e){}

    public void mouseEntered(MouseEvent e){}

    public void MouseReleased(MouseEvent e){

        this.setCursor(Cursor.getpredefinedCursor(Cursor.DEFAULT_CURSOR));

        upState = true;

        repaint();

    }

    public void mouseMoved(MouseEvent e){}

    public void mouseDragged(MouseEvent e){

        if (!upState){

            x = e.getX() - dx;

            y = e.getY() - dy;

            repaint();

        }

    }

}

程序要创建缓冲区图像,需要引入java.awt.image包中的BufferedImage类。要创建一个缓冲区图,可以调用createImage()方法,该方法返回一个Image对象,然后再将它转换成一个BufferedImage对象。例如,代码:

BufferedImage bimage = (BufferedImage)this.createImage(this.getWidth(),this.getHeight());

也可利用以下构造方法来建立。

BufferedImage(int width,int heigh, int imageType);

其中参数 imageType是图像类型。

使用缓冲区显示图像,需先在缓冲区中准备好图像,再将缓冲区中的图像显示在界面上。显示图像需要图形对象Graphics,可以通过以下方法建立:

Graphics2D g2d = bimge.createGraphics();

好了,关于Java编程图像缓冲技术就介绍到这里了,如果想要学习更多的Java知识,请关乎IT培训网

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
Java教程
1、Java 概述
1.1 Java语言概述
1.2 Java虚拟机以及跨平台原理
1.3 Java的主要就业方向
1.4 Java的不同版本
1.5 Java开发环境搭建
1.6 第一个Java程序示例
1.7 Java类和对象的概念
1.8 Java类库及其组织结构
1.9 Java import
2、Java 语法基础
2.1 Java数据类型以及变量的定义
2.2 Java数据类型转换
2.3 Java运算符
2.4 Java流程控制
2.5 Java数组的定义和使用
2.6 Java字符串(String)
2.7 Java StringBuffer与StringBuider
2.8 强调一下编程风格
3、Java 类与对象
3.1 Java类的定义及其实例化
3.2 Java访问修饰符
3.3 Java变量的作用域
3.4 Java this关键字详解
3.5 Java方法重载
3.6 Java类的基本运行顺序
3.7 Java包装类、拆箱和装箱详解
3.8 再谈Java包
3.9 源文件的声明规则
4、Java 继承和多态
4.1 继承的概念与实现
4.2 Java super关键字
4.3 继承中的方法的覆盖和重载
4.4 多态和动态绑定
4.5 instanceof 运算符
4.6 多态对象的类型转换
4.7 Java static关键字
4.8 Java final关键字
4.9 Java Object类
5、面向对象高级特性
5.1 Java内部类及其实例化
5.2 内部类的分类
5.3 抽象类的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象类的区别
5.6 Java 泛型
5.7 泛型通配符和类型参数的范围
6、异常处理
6.1 异常处理基础
6.2 异常类型Java语言中常见的异常类型有哪些
6.3 未被捕获的异常
6.4 try和catch的使用
6.5 多重catch语句的使用
6.6 try语句的嵌套
6.7 throw:异常的抛出
6.8 throws子句
6.9 finally块
6.10 Java的内置异常
6.11 创建自己的异常子类
6.12 断言
7、线程编程
7.1 线程的概念
7.2 Java线程模型
7.3 主线程
7.4 创建线程
7.5 创建多线程
7.6 isAlive()和join()的使用
7.7 线程优先级
7.8 线程同步
7.9 线程间通信
7.10 线程死锁
7.11 线程的挂起、恢复和终止
8、输入输出(IO)操作
8.1 输入输出基本概念
8.2 面向字符的输入流
8.3 面向字符的输出流
8.4 面向字节的输入输出流
8.5 面向字节流的应用
8.6 文件与目录管理
8.7 文件的随机读写
8.8 文件的压缩处理
9、常用类库、向量与哈希
9.1 Java基础类库
9.2 Object类
9.3 Java语言包(java.lang)简介
9.4 日期和时间类
9.5 向量及其应用
9.6 哈希表及其应用
10、图形界面(GUI)设计
10.1 图形界面设计基础
10.2 框架窗口
10.3 标签、按钮和按钮事件
10.4 面板
10.5 布局设计
10.6 文本框和文本区
10.7 文本框和文本区的输入输出
10.8 选择框和单选按钮
10.9 列表和组合框
10.10 菜单
10.11 对话框
10.12 滚动条
10.13 鼠标事件
10.14 键盘事件
11、图形、图像与多媒体
11.1 绘图基础
11.2 设置字型和颜色
11.3 绘图模式
11.4 Graphics类的绘图方法
11.5 Graphics2D类的绘图方法
11.6 图像处理基础
11.7 图像缓冲技术
11.8 多媒体基础
12、网络与数据库编程
12.1 IP地址和InetAddress类
12.2 统一资源定位符
12.3 套接字(Socket)
12.4 数据库连接
12.5 几个重要的类和接口
12.6 数据库查询
12.7 数据库更新
12.8 插入记录
12.9 修改记录
12.10 删除记录