⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageproc.java

📁 介绍有关java的资料 课件 相当一本书籍 里面都是很基础的知识
💻 JAVA
字号:

/**
 * Title:        Java水中倒影演示程序
 * Description:  Java水中倒影演示程序,用于北京师范大学计算机系Java课程教学示范。
 * Copyright:    Copyright (c) 2001
 * Company:      北京师范大学计算机系
 * @author 孙一林
 * @version 1.0
 */

import java.applet.Applet;
import java.awt.*;

public class ImageProc extends Applet
    implements Runnable
{

    Image originalRipplePicture;
    Image originalLakePicture;
    Image ripplePicture;
    Image lakePicture;
    boolean doneProcessing;
    int whichEffect;
    int frames;
    int currentFrame;
    int imageWidth;
    int imageHeight;
    int lakeHeight;
    Thread m_ImageProc2;
    private String m_picture1;
    private String m_picture2;
    private final String PARAM_picture1 = "picture1";
    private final String PARAM_picture2 = "picture2";

    public ImageProc()
    {
        m_ImageProc2 = null;
        m_picture1 = "";
        m_picture2 = "";
        doneProcessing = false;
        whichEffect = 1;
        currentFrame = 0;
        frames = 12;
    }

    public void destroy()
    {
    }

    public void init()
    {
        String s = getParameter("picture1");
        if(s != null)
            m_picture1 = s;
        s = getParameter("picture2");
        if(s != null)
            m_picture2 = s;
        resize(260, 260);
        MediaTracker mediatracker = new MediaTracker(this);
        originalRipplePicture = getImage(getCodeBase(), m_picture1);
        mediatracker.addImage(originalRipplePicture, 0);
        try
        {
            mediatracker.waitForID(0);
        }
        catch(InterruptedException _ex) { }
        originalLakePicture = getImage(getCodeBase(), m_picture2);
        mediatracker.addImage(originalLakePicture, 1);
        try
        {
            mediatracker.waitForID(1);
        }
        catch(InterruptedException _ex) { }
        imageWidth = originalRipplePicture.getWidth(this);
        imageHeight = originalRipplePicture.getHeight(this);
        lakeHeight = originalLakePicture.getHeight(this);
        ripplePicture = createImage(imageWidth, imageHeight * frames);
        lakePicture = createImage((frames + 1) * imageWidth, imageHeight);
        processImages();
        showStatus("");
        doneProcessing = true;
    }

    public void makeWaves(Graphics g, int i, int j, int k, int l)
    {
        double d = (6.2831853071795862D * (double)i) / (double)j;
        for(int k1 = 0; k1 < l; k1++)
        {
            int j1 = (int)((8D * ((double)k1 + (double)l / 5D) * Math.sin((double)(10 * (l - k1)) / (double)(k1 + 1) + d)) / (double)l);
            int i1 = (j - i) * k;
            if(k1 < -j1)
                g.copyArea(j * k, k1, k, 1, -i1, 0);
            else
                g.copyArea(j * k, k1 + j1, k, 1, -i1, -j1);
        }

    }

    public boolean mouseDown(Event event, int i, int j)
    {
        whichEffect ^= 0x1;
        currentFrame = 0;
        return true;
    }

    public void paint(Graphics g)
    {
        if(doneProcessing)
        {
            g.setColor(Color.white);
            if(whichEffect == 0)
            {
                g.drawImage(ripplePicture, 0, -(currentFrame * imageHeight), this);
                g.drawImage(ripplePicture, 0, (frames - currentFrame) * imageHeight, this);
            } else
            {
                g.drawImage(lakePicture, -(currentFrame * imageWidth), lakeHeight, this);
                g.drawImage(lakePicture, (frames - currentFrame) * imageWidth, lakeHeight, this);
                g.drawImage(originalLakePicture, 0, 0, this);
            }
        }
    }

    public void processImages()
    {
        Image image = createImage(imageWidth, imageHeight);
        Graphics g = image.getGraphics();
        Graphics g1 = ripplePicture.getGraphics();
        for(int i = 0; i < frames; i++)
        {
            g.drawImage(originalRipplePicture, 0, 0, this);
            rotateImage(g, frames, i, 25, imageWidth, imageHeight);
            g1.drawImage(image, 0, imageHeight * i, this);
        }

        image = createImage(imageWidth, lakeHeight + 1);
        g = image.getGraphics();
        g1 = lakePicture.getGraphics();
        g.drawImage(originalLakePicture, 0, 0, this);
        for(int k = 0; k < lakeHeight >> 1; k++)
        {
            g.copyArea(0, k, imageWidth, 1, 0, lakeHeight - k);
            g.copyArea(0, lakeHeight - 1 - k, imageWidth, 1, 0, -lakeHeight + 1 + (k << 1));
            g.copyArea(0, lakeHeight, imageWidth, 1, 0, -1 - k);
        }

        g1.drawImage(image, frames * imageWidth, 0, this);
        for(int j = 0; j < frames; j++)
            makeWaves(g1, j, frames, imageWidth, lakeHeight);

    }

    public void rotateImage(Graphics g, int i, int j, int k, int l, int i1)
    {
        shearX(g, i, j, k, l, i1);
        shearY(g, i, j, k, l, i1);
    }

    public void run()
    {
        do
            try
            {
                currentFrame++;
                if(currentFrame > frames)
                    currentFrame = 0;
                Graphics g = getGraphics();
                paint(g);
                Thread.sleep(50L);
            }
            catch(InterruptedException _ex)
            {
                stop();
            }
        while(true);
    }

    public void shearX(Graphics g, int i, int j, int k, int l, int i1)
    {
        for(int j1 = 0; j1 < i1; j1++)
        {
            double d = (double)(k >> 1) * Math.sin((double)j1 / (double)k + (6.2831853071795862D * (double)j) / (double)i);
            g.copyArea(0, j1, l, 1, (int)d, 0);
        }

    }

    public void shearY(Graphics g, int i, int j, int k, int l, int i1)
    {
        for(int j1 = 0; j1 < l; j1++)
        {
            double d = (double)(k >> 1) * Math.sin((double)j1 / (double)k + (6.2831853071795862D * (double)j) / (double)i);
            g.copyArea(j1, 0, 1, i1, 0, (int)d);
        }

    }

    public void start()
    {
        if(m_ImageProc2 == null)
        {
            m_ImageProc2 = new Thread(this);
            m_ImageProc2.start();
        }
    }

    public void stop()
    {
        if(m_ImageProc2 != null)
        {
            m_ImageProc2.stop();
            m_ImageProc2 = null;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -