java - 来自字符串的缓冲图像

标签 java loops bufferedimage

我正在尝试基于字符串创建图像,并在新行上分配 RGB 颜色值。但无论出于何种原因,像素被放置在错误的位置,从而形成了这种奇怪的 V 形图案。显然,问题在于我如何增加值,但我似乎找不到问题。

我还通过多种不同的方式确认了该字符串没有任何问题

Chevron pattern I was talking about

  static void AddPixels(String Data){
      Scanner Scan = new Scanner(Data);

      ArrayList<Integer> Table = new ArrayList<>();

      while (Scan.hasNextLine() && !(XCount == XTotal)){
         Scanner LineScan = new Scanner(Scan.nextLine());
         while (LineScan.hasNext()){
            Table.add(LineScan.nextInt());
         }
         if (Table.size() == 3){
            Image.setRGB(XCount,YCount, new Color(Table.get(0),Table.get(1),Table.get(2),255).getRGB());
         }
         else{
            Image.setRGB(XCount,YCount, new Color(0,0,0,0).getRGB());
         }
         Table.clear();
         YCount++;
         if (YCount == YTotal){
            YCount = 0;
            XCount++;
            System.out.println(Math.floor(((double)XCount/XTotal)*100));
         }     
      }
      //System.out.println("Finished");
      if (XCount >= XTotal){
      System.out.println("Runnin");
         try{
            File ImageFile = new File("TestImage.png");
            ImageIO.write(Image, "png", ImageFile);
         }
         catch(IOException e)
         {
            System.out.println("Error: " + e);
         }
      }

}

最佳答案

每次循环时(对于 R、G 和 B),您都会更新 y 坐标,并用 2/3 的时间绘制黑色像素(中的 else block )您的代码)。

如果我正确理解您的问题陈述,该文件如下所示:

200
100
0

其中对于每个像素,200 是 R 值,100 是 B 值,0 是 G 值。

如果是这种情况,您只需从文件中读取的每三个值更新一次 Y 值 - 并且根本不绘制黑色像素。

关于java - 来自字符串的缓冲图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663063/

相关文章:

java - 这个递归排列代码是如何工作的?

java - 动态加载接口(interface)实现时如何使接口(interface)成为仅编译依赖项

java - 平滑 BufferImage 边缘

java - 使用 2 个 BufferedImage transient 字段序列化 Obj,第二个图像将不会被读取

java - Java 中通过多个其他列表对列表进行排序

java - 无法通过 smack : No response from server 连接到 XMPP 服务器

python - 遍历 python 列表列表并根据条件删除列表

javascript - 在循环之前定义数组的长度是一种好习惯吗?

python - 如何将 "for"循环的结果保存到单个变量中?

java - 如何检查图像是否太大而无法打开?