如何使用Java缩放和显示图像的特定部分
所以我开始学习Java。 每一次Elipse的崩溃都让我更加后悔。 幸运的是,我实际上已经成功地让我自己设计的项目中的这一块真正“起作用”,但很明显,我是自学成才的,我确信我在布局和设计上犯了很多错误
总的来说,程序将创建一个JFrame,然后在其中插入一个JPanel(包装)的JscrollPane中粘贴一个JscrollPane。然后,它循环执行一个过程,该过程生成一个TMTile对象数组,这些对象是包含从jpg图像源文件夹中绘制的tile图像的扩展jpanel。完成后,它使用包装Jpanel中的GridBagLayout将该数组作为网格放置,从而形成一个漂亮的小迷宫
这一切都很完美,但最让人失望的是,用于创建瓷砖的图像的大小决定了一切。我一辈子都搞不懂如何缩放图像,努力寻找合适的过程只能让我找到创建新图像文件的方法,或者在拉伸和平铺图像之间交替,以适应其包含的组件,或者我无法遵循的建议来拯救我的生命
幸运的是。图像处理是TMTile类文件的一部分!这意味着我可以向您展示整个相关的脚本
导入以下内容以用于此文件
来自java。awt:颜色、GridBagConstraints、GridBagLayout、插图
来自javax。swing:ImageIcon、JLabel、JPanel
public class TMTile extends JPanel
{
private static final long serialVersionUID = 1L;
private int paths; // values 0 to 15, uses bitwise & | to set or check open paths
private JLabel tileWrap; // to contain the ImageIcon
private ImageIcon tileImg; // the image to be used
GridBagConstraints bag;
public TMTile( int inDir ) // called by maze constructor
{
paths = inDir;
this.setBackground( Color.RED ); // so I can tell if the image didn't load right
this.setLayout( new GridBagLayout() ); // GridBagLayout is probably overkill but it what I am most familiar with now.
bag = new GridBagConstraints();
bag.insets = new Insets( 0, 0, 0, 0 );
tileImg = tileImage( paths );
tileWrap = new JLabel( "", tileImg, JLabel.CENTER );
this.add( tileWrap, bag );
}
public void open( int inDir ) // called by maze constructor when tile value changes resulting from the perfect maze backtrack method
{
paths = paths | inDir;
tileImg = tileImage( paths );
tileWrap.setIcon( tileImg );
}
private ImageIcon tileImage( int paths ) // created to cut down on duplicate code and make updating easier
{
String inEnd;
if(paths < 10)
{
inEnd = "0"+ paths;
}
else
{
inEnd = ""+ paths;
}
ImageIcon tileImg = new ImageIcon( "imgs/MAZE_"+ inEnd +".jpg" );
System.out.println( "imgs/MAZE_"+ inEnd +".jpg" );
Image newimg = tileImg.getImage().getScaledInstance( 40, 40, java.awt.Image.SCALE_DEFAULT );
tileImg = new ImageIcon( newimg );
return tileImg;
}
public int getOpen()
{
return paths;
}
}
多亏了nachokk和MadProgrammer,我现在又一次拥有了一个可以工作的迷宫程序,而且迷宫瓷砖是可伸缩的。这就剩下了最终的目标,即取消单个瓷砖。jpgs并切换到单个图像文件,所有16个图像文件都存储在中
我想要的是能够利用单个大图像文件,该文件分为16个部分,每个瓷砖值1个部分。我开始朝着这个目标努力,但很快就放弃了,因为我不知道如何只显示所需的图像部分,这也需要以上述方式进行缩放
由于我仍在学习Java,所以欢迎提供关于任何替代方案的建议,但理想情况下,我希望知道如何按计划完成这项工作
共 (0) 个答案