如何在eclipse e4 rcp中以固定大小的标签显示保留纵横比的已调整大小的图像?

时间:2015-07-17 10:09:28

标签: eclipse swt rcp e4

我想显示一个预览图像,它是原始图像的调整大小版本,其宽高比保留在固定大小的标签中。例如,我有一个1024x786的图像,我想在尺寸为500x500的标签中显示它。我希望它适合这个标签,保持图像的纵横比不变。

如果用户调整零件大小时图像可以自动调整大小,那也很好。

是否可以使用Label执行此操作?或者我需要画布吗?

1 个答案:

答案 0 :(得分:3)

此图片缩放代码基于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;
}