如何在 eclipse e4 rcp 的固定大小标签中显示纵横比已调整大小的图像?
How display a resized image with aspect ratio preserved in a fixed size Label in eclipse e4 rcp?
我想显示一个预览图像,它是原始图像的调整大小版本,纵横比保留在固定大小的标签中。例如,我有一张 1024x786 的图像,我想将其显示在尺寸为 500x500 的标签中。我希望它适合这个标签,保持图像的纵横比不变。
如果用户调整部分大小时图像可以自动调整大小就好了。
Label 可以做到这一点吗?或者我需要 canvas 吗?
此图像缩放代码基于JFace ImageDescriptor
:
ImageDescriptor scaleImage(Display display, ImageDescriptor imageDesc,
int maxWidth, int maxHeight)
{
if (imageDesc == null)
return null;
ImageData imageData = imageDesc.getImageData();
if (imageData == null) // Can by JPEG using CMYK colour space etc.
return imageDesc;
int newHeight = maxHeight;
int newWidth = (imageData.width * newHeight) / imageData.height;
if (newWidth > maxWidth)
{
newWidth = maxWidth;
newHeight = (imageData.height * newWidth) / imageData.width;
}
// Use GC.drawImage to scale which gives better result on Mac
Image newImage = new Image(display, newWidth, newHeight);
GC gc = new GC(newImage);
Image oldImage = imageDesc.createImage();
gc.drawImage(oldImage, 0, 0, imageData.width, imageData.height, 0, 0, newWidth, newHeight);
ImageDescriptor result = ImageDescriptor.createFromImage(newImage);
oldImage.dispose();
gc.dispose();
return result;
}
我想显示一个预览图像,它是原始图像的调整大小版本,纵横比保留在固定大小的标签中。例如,我有一张 1024x786 的图像,我想将其显示在尺寸为 500x500 的标签中。我希望它适合这个标签,保持图像的纵横比不变。
如果用户调整部分大小时图像可以自动调整大小就好了。
Label 可以做到这一点吗?或者我需要 canvas 吗?
此图像缩放代码基于JFace ImageDescriptor
:
ImageDescriptor scaleImage(Display display, ImageDescriptor imageDesc,
int maxWidth, int maxHeight)
{
if (imageDesc == null)
return null;
ImageData imageData = imageDesc.getImageData();
if (imageData == null) // Can by JPEG using CMYK colour space etc.
return imageDesc;
int newHeight = maxHeight;
int newWidth = (imageData.width * newHeight) / imageData.height;
if (newWidth > maxWidth)
{
newWidth = maxWidth;
newHeight = (imageData.height * newWidth) / imageData.width;
}
// Use GC.drawImage to scale which gives better result on Mac
Image newImage = new Image(display, newWidth, newHeight);
GC gc = new GC(newImage);
Image oldImage = imageDesc.createImage();
gc.drawImage(oldImage, 0, 0, imageData.width, imageData.height, 0, 0, newWidth, newHeight);
ImageDescriptor result = ImageDescriptor.createFromImage(newImage);
oldImage.dispose();
gc.dispose();
return result;
}