gpt4 book ai didi

java - 在 IntelliJ 中使用图像

转载 作者:行者123 更新时间:2023-12-02 10:50:24 24 4
gpt4 key购买 nike

我一直在为业余项目开发扑克游戏,以介绍自己如何使用 IntelliJ 和 java 进行图像和 GUI 开发。我现在正处于一个阶段,我想将桌面上的卡片图像集合中的图像分配给单个卡片。

是否有任何具体资源可以将我的图像文件夹添加到项目本身内的某种其他文件夹中,以便我可以直接从项目而不是从桌面加载这些文件夹。另外,如何分配这些图像?

目前我有一个卡类,它由 2 个存储 SUIT 的枚举类和另一个存储 RANK(值)的枚举类构建。

Card card = new Card(EnumSuitsuit,EnumRankrank,“需要在这部分应用图像)

如果我的解释不好,请道歉并感谢您的帮助!

编辑:我尝试过使用 BufferedImage 和 ImageIO,但每次都必须从桌面加载,这让我很难接受。

最佳答案

您必须编写一些代码来缓存这些;每次创建卡片对象时读取整个 PNG 或 JPG 会使速度明显变慢。我将假设 EnumSuit 和 EnumRank (旁注:不好的名称;正确的名称是 CardSuit 和 CardRank,甚至只是 Suit 和 Rank;您的编辑器可以告诉您它们是枚举,您不必那样命名。您也没有将其命名为 ClassCard :P)

示例代码:

import java.awt.image.BufferedImage;
import javax.image.ImageIO;
import java.util.HashMap;
import java.util.Map;

public class Card {
private static final Map<String, BufferedImage> imageCache = new HashMap<>();

public static BufferedImage getImage(CardRank rank, CardSuit suit) {
String k = rank.toString() + suit.toString();
return imageCache.computeIfAbsent(k, k -> loadImage(k));
}

private static BufferedImage loadImage(String key) {
try {
return ImageIO.read(Card.class.getResource("cardImages/" + key + ".png"));
} catch (IOException e) {
System.err.println("Missing card image: " + key + ".png");
System.err.println(e.getClass().getName() + ": " + e.getMessage());
// Return a blank image instead.
return new BufferedImage(100, 200, BufferedImage.TYPE_INT_RGB);
}
}
}

上面的代码会缓存您的图像(getImage 使用缓存,loadImage 始终从磁盘加载,这就是它被标记为 private 的原因)。请注意,它使用 MyClassName.class.getResource 机制,该机制在 VM 查找文件 MyClassName.class 的同一位置查找提供的文件。

所以,如果你有这个:

C:\MyProjects\card_exercise\src\Card.java

你的 IDE、maven、gradle、ant 或任何你用来编译它的东西最终都会使类文件位于此处:

C:\MyProjects\card_exercise\bin\Card.class

然后上面的代码片段将在以下位置查找“4A.png”:

C:\MyProjects\card_exercise\bin\cardImages\4A.png

因为它看起来相对于 Card.class 所在的位置。

即使您创建一个将类和图像组合在一起的 jar 文件,此机制 (x.class.getResource) 也能正常工作。请注意,eclipse 会将非 java 文件直接从 src 复制到 bin,并且在 maven 中,“resource”目录中放入的任何内容也会在 maven 构建期间移动。

关于java - 在 IntelliJ 中使用图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52227277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com