Java 以编程方式从图像生成像素艺术
我想为用户提供的任何图像生成一幅64x64像素的艺术品。我现在不知道该怎么做。OpenCV似乎没有提供任何这样的功能。任何指向正确方向的指示都将不胜感激 编辑 像素艺术是给定图像的像素化图像。下面的屏幕截图显示了我迄今为止所取得的成就 基本上我所做的如下Java 以编程方式从图像生成像素艺术,java,image-processing,Java,Image Processing,我想为用户提供的任何图像生成一幅64x64像素的艺术品。我现在不知道该怎么做。OpenCV似乎没有提供任何这样的功能。任何指向正确方向的指示都将不胜感激 编辑 像素艺术是给定图像的像素化图像。下面的屏幕截图显示了我迄今为止所取得的成就 基本上我所做的如下 使用保持的纵横比缩放图像,使其适合64x64网格 Image sourceImage; Rectangle imageBound = sourceImage.getBounds(); double sx = (double) 64 / (do
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));
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));
}
}
显示d;
ImageData=scaleImage.getImageData();
对于(int i=0;i 16;
int绿色=(像素&0x0000ff00)>>8;
int蓝色=像素&0x000000ff;
pixelGrid[i][j].背景(新颜色(d,红色,绿色,蓝色));
}
}
但是,正如您所看到的,调整图像大小后,颜色会有很大的差异。我想知道的是,我是否走上了实现这一点的正确道路,如果是,如何在缩放时保留实际颜色。您可能有一张RGBA格式的图像,并且从图像中提取了错误的值(好像是ARGB).它现在看起来很蓝,我没有看到任何红色。这应该让你走上正轨:
int red = (pixel>>24) & 0xff;
int green = (pixel>>16) & 0xff;
int blue = (pixel>>8) & 0xff;
int alpha = pixel & 0xff; // always 0xff for images without transparency
你想要什么样的像素艺术?“OpenCV似乎没有提供任何这样的功能”-是的。你找错了方向。这是一个计算机视觉库,而不是像素艺术库。你可能想包括它,以确保处理的图像格式一致。