gpt4 book ai didi

java - 将像素从一张图像复制到另一张图像

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:09 27 4
gpt4 key购买 nike

我正在 SWT 中创建图像操纵器框架。其中一部分是选择图像的特定部分并以某种方式对其进行操作。由于我使用第三方软件,我只能操作整个图像并想要复制选区的像素。

该函数如下所示:

public Image doMagic(Image input, Selection selection) {
Image manipulatedImage = manipulateImage(input);
int width = manipulatedImage.getBounds().width;
int height = manipulatedImage.getBounds().height;

GC gc = new GC(manipulatedImage);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
if (!selection.containsPixel(x, y)) {
// we should not have transformed this pixel
//-> we set it back to the original one
gc.drawImage(input, x, y, 1, 1, x, y, 1, 1);
}
}
}
gc.dispose();
return manipulatedImage;
}

现在可以工作了,但是速度很慢。可能是因为整个图片是用来绘制单个像素的。

第二种可能性是:

    ImageData inputData = input.getImageData();
ImageData manipulatedImageData = manipulatedImage.getImageData();
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
if (!selection.containsPixel(x, y)) {
manipulatedImageData.setPixel(x, y, inputData.getPixel(x,y));
}
}
}
return new Image(image.getDevice(), manipulatedImageData);

但这根本不起作用,我猜是因为调色板在操作时发生了变化。就我而言,灰度会创建黄色灰度图像。

那么我还缺少另一种可能性吗?在图像之间传输像素的推荐方法是什么?

最佳答案

对于ImageData,您需要使用palette字段:

int inputPixel = inputData.getPixel(x,y);

RGB rgb = inputData.palette.getRGB(inputPixel);

int outputPixel = manipulatedImageData.palette.getPixel(rgb);

manipulatedImageData.setPixel(x, y, outputPixel);

关于java - 将像素从一张图像复制到另一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24487909/

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