gpt4 book ai didi

java - 在 Java Swt 和内存消耗中缩放图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:17 29 4
gpt4 key购买 nike

我有一个 java swt 应用程序。在容器的调整大小方法中,我想调整图像的大小,使用以下代码显示。然而看起来 - 即使我处理了所有东西(真的吗?)内存消耗一直在增加......我找不到我的错误。为什么这段代码会占用我所有的内存?

这是 Resize-Listener:

tabCover.addListener(SWT.Resize, new Listener() {

public void handleEvent(Event event) {
// Set images: cover_front
int width = tabCover.getSize().x - 30;
int height = tabCover.getSize().y - 30;
Image buffer_Coverfront;

buffer_Coverfront = new Image(Display.getDefault(), filename);
lblCoverfront.setImage(Helper.ImageScale(buffer_Coverfront, width, height));
buffer_Coverfront.dispose();
buffer_Coverfront = null;

} // handleEvent
}); // Listener

这里是缩放函数:

public static Image ImageScale(Image image, int width, int height) {


ImageData data = image.getImageData();

// Some logic to keep the aspect ratio
float img_height = data.height;
float img_width = data.width;
float container_height = height;
float container_width = width;

float dest_height_f = container_height;
float factor = img_height / dest_height_f;

int dest_width = (int) Math.floor(img_width / factor );
int dest_height = (int) dest_height_f;

if(dest_width > container_width) {
dest_width = (int) container_width;
factor = img_width / dest_width;
dest_height = (int) Math.floor(img_height / factor);

}

// Image resize
data = data.scaledTo(dest_width, dest_height);
Image scaled = new Image(Display.getDefault(), data);
image.dispose();
return scaled;
}

最佳答案

据我从 handleEvent(...) 方法中可以看出,您忘记处理旧图像。

tabCover.addListener(SWT.Resize, new Listener() {
public void handleEvent(Event event) {
// Set images: cover_front
int width = tabCover.getSize().x - 30;
int height = tabCover.getSize().y - 30;
Image buffer_Coverfront;

buffer_Coverfront = new Image(Display.getDefault(), filename);
Image old = lblCoverfront.getImage();
lblCoverfront.setImage(Helper.ImageScale(buffer_Coverfront, width, height));
buffer_Coverfront.dispose();
buffer_Coverfront = null;

if (old != null) old.dispose();

} // handleEvent
}); // Listener

上面的代码假定控件的图像是在此方法中设置的。如果您还从其他地方设置初始图像,则必须改进处理条件...

关于java - 在 Java Swt 和内存消耗中缩放图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16322664/

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