如何从SWT图像获得感兴趣的区域?

时间:2017-02-05 17:50:40

标签: java swt

我想从SWT Image对象中获取感兴趣的区域(ROI)。

我找不到能为我做这个的方法。是否有可能避免自己写一篇文章?

我需要类似的东西(类似于opencv实现):

Image img = new Image(display, path);
Rectangle roi = new Rectangle(0, 0, 10, 10);
Image imgRoi = img.getROI(roi);

1 个答案:

答案 0 :(得分:1)

我不知道从一个地区创建图像的基本SWT方法,但是我找到了一个应该在这里执行此操作的片段https://gist.github.com/azhawkes/4347761(作者请给作者Andy Hawkes)。

这里我稍微修改了输入原始图像的方法。我还实施了greg-449建议的优化(最小化了对Image.getImageData的调用)。

public static Image loadImageFromRegion(Image original, Rectangle region) {

    ImageData originalImageData = original.getImageData();

    ImageData data = new ImageData(region.width, region.height, originalImageData.depth, originalImageData.palette);
    int[] pixels = new int[region.width];
    byte[] alphas = new byte[region.width];

    for (int y = 0; y < region.height; y++) {
        originalImageData.getAlphas(region.x, region.y + y, region.width, alphas, 0);
        originalImageData.getPixels(region.x, region.y + y, region.width, pixels, 0);

        data.setPixels(0, y, region.width, pixels, 0);
        data.setAlphas(0, y, region.width, alphas, 0);
    }

    return new Image(Display.getCurrent(), data);
}