java以编程方式从图像生成像素艺术
我想为用户提供的任何图像生成一幅64x64像素的艺术品。我现在不知道该怎么做。OpenCV似乎没有提供任何这样的功能。任何指向正确方向的指示都将不胜感激
编辑
像素艺术是给定图像的像素化图像。下面的屏幕截图显示了我迄今为止所取得的成就
基本上我所做的如下
使用保持的纵横比缩放图像,使其适合64x64网格
Image sourceImage; Rectangle imageBound = sourceImage.getBounds(); double sx = (double) 64 / (double) imageBound.width; double sy = (double) 64 / (double) imageBound.height; double s = Math.min(sx, sy); int dx = (int) (s * imageBound.width); int dy = (int) (s * imageBound.height); Image scaledImage = new Image(d, sourceImage.getImageData().scaledTo(dx, dy));
从缩放图像中读取每个像素并将其输出到屏幕上
下面显示了如何从每个像素提取颜色。我使用SWT框架
Display d;
ImageData data = scaledImage.getImageData();
for(int i=0; i<data.width; i++) {
for(int j=0; j<data.height; j++) {
int pixel = data.getPixel(i,j);
int red = (pixel & 0x00ff0000) >> 16;
int green = (pixel & 0x0000ff00) >> 8;
int blue = pixel & 0x000000ff;
pixelGrid[i][j].setBackground(new Color(d, red, green, blue));
}
}
但正如您所看到的,在调整图像大小后,颜色有很大的不同。我想知道的是,我是否走上了实现这一目标的正确道路,如果是,如何在缩放时保留实际颜色
# 1 楼答案
您可能有一个RGBA格式的图像,并且正在从图像中提取错误的值(好像它是ARGB)。它现在看起来很蓝,我没有看到任何红色。这应该让你走上正确的道路: