当前位置: 首页 > 知识库问答 >
问题:

使用处理随机后从图像中重新绘制像素

麻鹏鹍
2023-03-14

假设我有一个像素化的图像……我想用处理来重画它。

起初应该有一个随机的彩色像素网格——过了一段时间,像素化的图像会通过这个像素化的网格出现。

我想我可以用这样的系统来处理这个问题:如果一个特定的随机颜色的像素与像素化图像的颜色相匹配,那么应该会有一个新的像素被绘制出来。

为了更好地理解,请看一下这段代码:

PImage img;

float rows;
float cols;
float pixel;

color gridcolor;
color imagecolor;    

color[][] grid = new color[500][500];
color[] colors = new color[4];

void setup() {
  size(600, 600);
  img = loadImage("bw.jpg");    
  cols = grid.length;
  rows = grid[0].length;    
  pixel = width/cols;    
  noStroke();    
  colors[0] = color(0, 0, 0);
  colors[1] = color(219, 219, 219);
  colors[2] = color(218, 218, 218);
  colors[3] = color(255, 255, 255);
}


void draw() {
  background(255);

  for (int x = 0; x < rows; x++) {
    for (int y = 0; y < cols; y++) {    
      int selector = int(random(colors.length));
      grid[x][y] = colors[selector];

      gridcolor = grid[x][y];
      fill(gridcolor);  
      rect(x*pixel, y*pixel, pixel, pixel);
    
      imagecolor = img.get(int(x*pixel), int(y*pixel));
      if (imagecolor == gridcolor) {
        fill(imagecolor);
        rect(x*pixel, y*pixel, pixel, pixel);
      }
    }
  }
}

所以我能够在颜色匹配的情况下绘制像素——但是因为彩色噪声是随机绑定的——它们会再次消失……我如何将矩形像素从if语句中转移出来?如何让它们保持不变?我尝试将其连接到布尔语句……但这只是纠结……

感谢您的任何帮助!我真的被这个困住了...

共有1个答案

申光临
2023-03-14

这是我使用PGraphics找到的解决方案……使用PGraphycs,所有内容都会绘制在第二层上,然后使用图像功能在草图窗口上重新绘制:

PGraphics pg;
PImage img;

float rows;
float cols;
float pixel;

color gridcolor;
color imagecolor;


color[][] grid = new color[100][100];
color[] colors = new color[9];



void setup() {
  size(600, 600);
  pg = createGraphics(600, 600);
  img = loadImage("1.bmp");

  cols = grid.length;
  rows = grid[0].length;

  pixel = width/cols;

  noStroke();

  colors[0] = color(0, 0, 0);
  colors[1] = color(255, 255, 0);
  colors[2] = color(66, 94, 171);
  colors[3] = color(240, 85, 90);
  colors[4] = color(161, 205, 12);
  colors[5] = color(93, 76, 132); 
  colors[6] = color(202, 132, 184);
  colors[7] = color(16, 208, 208);
  colors[8] = color(255, 255, 255);
}


void draw() {
  background(255);

  for (int x = 0; x < rows; x++) {
    for (int y = 0; y < cols; y++) {

      int selector = int(random(colors.length));
      grid[x][y] = colors[selector];

      gridcolor = grid[x][y];
      fill(gridcolor);  
      rect(x*pixel, y*pixel, pixel, pixel);

      pg.beginDraw(); 
      imagecolor = img.get(int(x*pixel), int(y*pixel));
      if (imagecolor == gridcolor) {
        pg.noStroke();
        pg.fill(imagecolor);
        pg.rect(x*pixel, y*pixel, pixel, pixel);
        pg.endDraw();
      }
    }
  }
  image(pg, 0, 0);
}
 类似资料:
  • 我的迭代器 我的绘图方法

  • > 我有一张NxM大小的原始图像(FigureB-它是原始图像的蓝色香奈儿),从这张图像中我选择一个特定的区域来研究(NewfigureB),大小120x170; 然后我将这个区域划分为我所说的宏像素,即10x10的数据点(像素)阵列; 我然后在所选区域上涂上掩膜,只选择符合一定发光条件的点; 到目前为止,这是我想出来的。如有任何帮助,将不胜感激。 多谢

  • 问题内容: 因此,我正在创建一个免费的手绘图JPanel,它会响应鼠标的移动并 绘制线条。我得到了它的大部分工作,除了一个错误,它会 在线之间随机画一条直线。该随机直线不是 故意的,在缓冲图像上绘制的内容严格来说应该是 用户绘制的内容。这些随机绘制的线不是由用户完成的, 这令人困惑。以下是我的代码,任何人都可以看看吗?所包含的图像 使您可以直观地看到正在执行的操作。 问题答案: 您可能希望嵌套列表

  • 问题内容: 我正在尝试使用Java的Graphics2D在屏幕上绘制图像。这是我正在使用的代码。我想看到图像在屏幕上稳定移动。目前,我可以看到图像,但是除非调整窗口大小,否则图像不会移动,在这种情况下,图像确实会移动。我已经勾勒出以下课程。 传递给Tester的Component对象是以下类: 我确保此类仅添加了一个精灵。Sprite类大致如下: 但是,我在屏幕上仅看到固定的Bowser图像。除非

  • 我是新来的。我正在尝试更改颜色(或其他参数,如色调、饱和度…)每个像素周围的像素。 我没有得到任何改变,而是得到了想要的结果。求求你,帮帮任何人(

  • 我的makeWhiteTransparent方法如下所示: 我尝试将graphics.drawImage(newImage,null,0,0)更改为graphics.drawImage(newImage,0,0,null),并按照建议将TYPE_4BYTE_ABGR更改为TYPE_INT_ARGB,但没有任何效果。错误仍然存在。