1
240
以下是我的操作方法(关于如何加载图像的详细信息):
|
2
502
如果您使用的是jpanel,那么可能使用的是Swing。试试这个:
图像现在是一个Swing组件。它会像其他组件一样受布局条件的约束。 |
3
32
弗雷德·哈斯拉姆的方法很有效。不过,我在文件路径上遇到了问题,因为我想引用JAR中的一个图像。为此,我使用了:
因为我只有一个有限的图像(大约10个),我需要用这个方法加载,所以它工作得很好。它获取文件而不必具有正确的相对文件路径。 |
4
31
我认为没有必要对任何事物进行子类划分。只需使用jLabel。可以将图像设置为jLabel。因此,调整jLabel的大小,然后用图像填充它。没关系。我就是这样做的。 |
5
19
|
6
10
|
7
7
|
8
6
您可以对jpanel进行子类划分-这里是“我的图像面板”的一个摘录,它将图像放在5个位置中的任意一个,即顶部/左侧、顶部/右侧、中间/中间、底部/左侧或底部/右侧:
|
9
5
有点问题
|
10
5
我正在做一个非常类似的私人项目。到目前为止,我已经生成了高达1024x1024的图像,没有任何问题(内存除外),并且可以非常快速地显示它们,并且没有任何性能问题。 重写jpanel子类的paint方法是多余的,并且需要比您需要做的更多的工作。 我的做法是:
或
用于生成图像的代码将在此类中。当调用painticon()时,我使用bufferedimage进行绘制,使用g.drawimvge(bufferedimage);这减少了生成图像时所做的闪烁量,并且您可以对其进行线程处理。 接下来我扩展jLabel:
这是因为我想把我的图像放在一个滚动窗格上,即显示图像的一部分,并让用户根据需要滚动。 所以我使用JScrollPane来保存mapLabel,它只包含mapIcon。
但是对于你的场景(每次只显示整个图像)。您需要将maplabel添加到顶部jpanel,并确保将它们全部调整为图像的完整大小(通过覆盖getPreferredSize())。 |
11
4
在项目目录中创建一个源文件夹,在本例中,我称之为images。
|
12
3
这个答案是对@shawalli答案的补充… 我也想引用我的jar中的一个图像,但我不想使用bufferedimage,而是简单地执行以下操作:
|
13
0
你可以避免使用自己的
|
14
0
我能看到很多答案,但并没有真正解决OP的三个问题。 1) 关于性能的一句话:字节数组可能不高效,除非您可以使用与显示适配器当前分辨率和颜色深度相匹配的精确像素字节顺序。 要获得最佳的绘图性能,只需将图像转换为BufferedImage,该图像由与当前图形配置对应的类型生成。请参见CreateCompatibleImage,网址为 https://docs.oracle.com/javase/tutorial/2d/images/drawonimage.html 这些图像将在没有任何编程努力的情况下被多次缓存在显示卡存储器上(这是自Java 6以来的摆动标准),因此实际绘图将花费可忽略的时间量。 如果 您没有更改图像。 改变图像会在主存储器和GPU存储器之间进行额外的存储器传输,这是很慢的。因此,请避免将图像“重绘”到BufferedImage中,尽可能避免执行GetPixel和SetPixel。 例如,如果您正在开发一个游戏,而不是将所有的游戏参与者绘制到BufferedImage,然后再绘制到JPanel,那么将所有参与者加载为较小的BufferedImage,并在JPanel代码中的适当位置逐个绘制它们会更快——这样,主内存和GPU内存之间就不会有额外的数据传输。用于缓存的图像的初始传输点。 ImageIcon将在引擎盖下使用BufferedImage,但基本上使用 适当的 图形模式是关键,不需要努力去做正确的事情。 2) 通常的方法是在jpanel的重写paintcomponent方法中绘制BufferedImage。虽然Java支持大量额外的好处,例如缓冲链控制在GPU存储器中缓存的挥发性图像,但是Java 6不需要使用任何这些图像,它可以在不暴露GPU加速的所有细节的情况下做一个相当好的工作。 请注意,对于某些操作,例如拉伸半透明图像,GPU加速可能不起作用。 3) 不要添加。如前所述,只需对其进行喷漆:
如果图像是布局的一部分,“添加”是有意义的。如果您需要将其作为背景或前景图像填充jpanel,只需绘制paintcomponent。如果您喜欢构建一个可以显示您的图像的通用Swing组件,那么它是相同的故事(您可以使用JComponent并重写其paintcomponent方法),然后添加 这 到图形用户界面组件的布局。 4) 如何将数组转换为BufferedImage 将字节数组转换为PNG,然后加载它需要大量的资源。更好的方法是将现有的字节数组转换为BufferedImage。 为此: 不用于循环 并复制像素。那是非常慢的。而是:
|
McRui · Laravel storeAs()存储问题中的图像 1 年前 |
HTML · 如何使用css使任何SVG图像灰度化? 2 年前 |
GabyUnalaq · 从原始RGB深度图像到灰度的转换不正确 2 年前 |
MHSarmadi · 阻止显示未完全加载的图像 2 年前 |
softandwet · 反应img onError未点火 2 年前 |
Nilesh soni · 颤振图像已缩放,但如何更改缩放位置 2 年前 |