我有一個java swt應用程序。在容器的resize方法中,我想調整圖像的大小,使用下面的代碼顯示。但似乎 - 即使我處置了一切(真的?)內存消耗正在不斷增加... 我找不到我的錯誤。爲什麼和這個代碼在哪裏吃掉我所有的記憶?以Java縮放圖像Swt和內存消耗
這裏是調整大小監聽:
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;
}
謝謝,這個提示幫助。我將相關部分改爲:'Image image = new Image(Display.getDefault(),filename_front); \t \t \t \t Image scaled = Helper.ImageScale(image,width,height); \t \t \t \t lblCoverfront.setImage(scaled); \t \t \t \t image.dispose(); \t \t \t \t scaled.dispose();' – user2340162 2013-05-03 19:14:51