gpt4 book ai didi

java - 将 MagickImage 转换为 SWT.ImageData

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:56:04 25 4
gpt4 key购买 nike

我正在尝试将 MagickImage 转换为 SWT.ImageDate,因为以前的库提供的 API 可以更好地缩放图像,具有平滑的边缘、更好的插值和保持透明度。

这是我的测试图像(2x2 像素 PNG 文件): blue pixel has transparency value 127

蓝色像素的透明度值为 127

这是我用来转换的示例代码:

ImageInfo ii = new ImageInfo("img/test.png");
MagickImage mi = new MagickImage(ii);
Point p = new Point(mi.getDimension().width, mi.getDimension().height);
int blobSize = p.x * p.y;
byte[] dataBlob = new byte[blobSize * 4];
byte[] alphaDataBlob = new byte[blobSize];
PixelPacket temp = null;
int blobpos = 0;
int alphapos = 0;
for(int row=0; row<p.y; row++) {
for (int col = 0; col < p.x; col++) {
temp = mi.getOnePixel(col, row);
alphapos = (row * p.x) + col;
blobpos = 4 * ((row * p.x) + col);
dataBlob[blobpos + 1] = (byte)(temp.getRed() & 0xFF);
dataBlob[blobpos + 2] = (byte)(temp.getGreen() & 0xFF);
dataBlob[blobpos + 3] = (byte)(temp.getBlue() & 0xFF);
alphaDataBlob[alphapos] = (byte)(0xFF - (temp.getOpacity() & 0xFF));
}
}
ImageData imageData = new ImageData(p.x, p.y, 24, new PaletteData(0xFF0000, 0x00FF00 , 0x0000FF));
imageData.data = dataBlob;
imageData.alphaData = alphaDataBlob;
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] {imageData};
imageLoader.save("img/result.png", SWT.IMAGE_PNG);

这个转换的结果是: enter image description here

第四个像素现在有 255 透明度值和颜色是奇数。

当我使用 SWT api imageData 字段读取 test.png 文件时:数据、alphadata 和颜色掩码与我自定义创建的 imageData 相同,但保存的图像不同。

我更改了 PaletteData 中的颜色 mask 值,但效果不佳。也许有人知道如何正确地做到这一点。

最佳答案

24 的颜色深度不适合 dataBlob 的布局,每个像素有 4 个字节。

您可以将 ImageData 构造函数调用更改为

ImageData imageData = new ImageData(p.x, p.y, 32, new PaletteData(0xFF0000, 0x00FF00, 0x0000FF));

或者每个像素存储 3 个字节:

blobpos = 3 * ((row * p.x) + col);
dataBlob[blobpos + 0] = (byte)(temp.getRed() & 0xFF);
dataBlob[blobpos + 1] = (byte)(temp.getGreen() & 0xFF);
dataBlob[blobpos + 2] = (byte)(temp.getBlue() & 0xFF);

两者都可以。

关于java - 将 MagickImage 转换为 SWT.ImageData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34649694/

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