栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

绘制图像的某些部分偏离角落?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

绘制图像的某些部分偏离角落?

public abstract boolean drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
ImageObserver observer)

Parameters:* img-要绘制的指定图像。如果
img为null,则此方法不执行任何操作。* dx1-目标
矩形第一个角的x坐标。* dy1-目标
矩形第一个角的y坐标。* dx2-目标
矩形第二个角的x坐标。* dy2-目标
矩形第二个角的y坐标。* sx1 -源矩形第一个角的x坐标。* sy1 -源矩形第一个角的y坐标。* sx2 -源矩形第二个角的x坐标。* sy2 -源矩形第二个角的y坐标。* observer-在缩放和
转换更多图像时要通知的对象。

在ds为目标,这意味着在您想要的图像上绘制你的表面。的ss为源图像的坐标。对于这两者,第
一个角是左上角,第二个角是右下角。

因此,您可以将源图像视为要绘制图像的焦点部分。您可以使用源坐标来确定要提取的矩形区域。

目标坐标布局实际绘制源区域的方式/位置。因此,如果您只想沿x轴移动绘制的图像,则只需移动dx1和即可dx2。您实际上可以
通过指定大于或小于源矩形的坐标矩形来使用坐标来调整绘制区域的大小

 Source Image          Destination panel sx1, sy1          +---------------+---------+        +-----------------------------+    |    |         |        |       |    | region to     |         |        | dx1, dy1         |    |        draw   |         |        |    +----------+  |        |    |         |        |    |          |  |    +---------------+         |        |    |          |  |     |sx2, sy2      |        |    +----------+  |         |   |        | dx2, dy2         |    |   |        |       |    +-------------------------+        +-----------------------------+

这是一个正在运行的示例。

免责声明:我的计算可能会有些偏差。不知道我是否要捕获
图像的每个部分。只是很快就把它搅动了。

import java.awt.Dimension;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import javax.imageio.ImageIO;import javax.swing.Jframe;import javax.swing.JPanel;import javax.swing.SwingUtilities;import javax.swing.Timer;public class NerdGirl extends JPanel {    private static final int SPRITE_ROWS = 5;    private static final int SPRITE_COLUMNS = 2;    private static final int DELAY = 150;    private int DIM_W;    private int DIM_H;    private int x1Src;    private int y1Src;    private int x2Src;    private int y2Src;    private BufferedImage img;    public NerdGirl() {        try { img = ImageIO.read(getClass().getResource("/resources/nerd-girl.jpg"));        } catch (IOException ex) { Logger.getLogger(NerdGirl.class.getName()).log(Level.SEVERE, null, ex);        }        DIM_W = img.getWidth() / SPRITE_ROWS;        DIM_H = img.getHeight() / SPRITE_COLUMNS;        x1Src = 0;        y1Src = 0;        x2Src = x1Src + DIM_W;        y2Src = y1Src + DIM_H;        Timer timer = new Timer(DELAY, new ActionListener() { public void actionPerformed(ActionEvent e) {     if (x1Src >= img.getWidth() - DIM_H - 5) {  // 5 to take care of precision loss         x1Src = 0;         x2Src = x1Src + DIM_W;         if (y1Src >= DIM_H - 5) { // 5 to take care of precision loss  y1Src = 0;  y2Src = y1Src + DIM_H;         } else {  y1Src += DIM_H;  y2Src = y1Src + DIM_H;         }     } else {         x1Src += DIM_W;         x2Src = x1Src + DIM_W;     }     repaint(); }        });        timer.start();    }    @Override    protected void paintComponent(Graphics g) {        super.paintComponent(g);        g.drawImage(img, 0, 0, getWidth(), getHeight(), x1Src, y1Src, x2Src, y2Src, this);    }    @Override    public Dimension getPreferredSize() {        return (img == null) ? new Dimension(300, 300) : new Dimension(DIM_W, DIM_H);    }    public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable() { public void run() {     Jframe frame = new Jframe();     frame.add(new NerdGirl());     frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);     frame.pack();     frame.setLocationRelativeTo(null);     frame.setVisible(true); }        });    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号