Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自字符串的缓冲图像_Java_Loops_Bufferedimage - Fatal编程技术网

Java 来自字符串的缓冲图像

Java 来自字符串的缓冲图像,java,loops,bufferedimage,Java,Loops,Bufferedimage,我正在尝试创建一个基于字符串的图像,在新行上指定RGB颜色值。但无论出于何种原因,像素被放置在错误的位置,形成了这种奇怪的V形图案。很明显,问题在于我如何增加价值,但我似乎找不到问题所在 我还以多种不同的方式确认了字符串没有问题 static void AddPixels(字符串数据){ 扫描仪扫描=新扫描仪(数据); ArrayList Table=新的ArrayList(); while(Scan.hasNextLine()&&!(XCount==XTotal)){ Scanner Lin

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

我还以多种不同的方式确认了字符串没有问题

static void AddPixels(字符串数据){
扫描仪扫描=新扫描仪(数据);
ArrayList Table=新的ArrayList();
while(Scan.hasNextLine()&&!(XCount==XTotal)){
Scanner LineScan=新扫描仪(Scan.nextLine());
while(LineScan.hasNext()){
Table.add(LineScan.nextInt());
}
if(Table.size()==3){
setRGB(XCount,YCount,新颜色(Table.get(0),Table.get(1),Table.get(2),255).getRGB());
}
否则{
setRGB(XCount,YCount,新颜色(0,0,0,0).getRGB());
}
表1.clear();
YCount++;
如果(YCount==YTotal){
YCount=0;
XCount++;
系统输出打印LN(数学楼层((双)X计数/额外)*100);
}     
}
//系统输出打印项次(“完成”);
如果(XCount>=XTotal){
System.out.println(“Runnin”);
试一试{
File ImageFile=新文件(“TestImage.png”);
写入(图像,“png”,图像文件);
}
捕获(IOE异常)
{
System.out.println(“错误:+e”);
}
}
}

每次循环时(对于R、G和B中的每一个)都要更新y坐标,并绘制一个时间的2/3倍的黑色像素(代码中的
else
块)

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

200
100
0
其中,
200
是每个像素的R值,
100
是B值,
0
是G值


如果是这种情况,则只需每隔三分之一从文件中读取一次Y值,而不必绘制黑色像素。

验证您的
x
/
Y
坐标是否正确表示(数据中未翻转)当图像被更新时,值没有在
AddPixels
方法之外被更新图像通常在水平行之后存储水平行,即(x=0,y=0),(x=1,y=0)…(x=width-1,y=0),(x=0,y=1)。。。你确定你没有把X和Y倒过来吗?(您的代码正在一列接一列地读取)@FBergo可以确认我没有翻转/反转数据。这是垂直列,它们不会翻转,也不会在外部更新AddPixels@A.J.Steinhauser然后,可能的错误是a)您的YTotal和/或XTotal关闭了1,或者b)在循环开始之前,XCount没有正确初始化为0。不应该有一个
XCount=0在while循环之前?否文件在一行中看起来像0 255 223。else语句处理只有1个int值的行,它告诉我它是透明的还是非透明的。听起来你需要读取透明值,然后正确设置alpha通道。现在,您正在打印一个(透明的)黑色像素,而不是为打印的像素设置alpha。换句话说,您正在打印1/2时间的额外像素,而不是2/3时间的额外像素。对于此图像,像素是透明的或不是透明的。在输入字符串中,彩色像素以字符串=字符串+“\t”+R+“\t”+G+“\t”+B+“\n”的形式出现。而透明像素的格式为String=String+1+“\n”。它不值得浪费我在透明像素上的有限数据,所以我只是用一个int表示它,这样循环就可以将它注册为一个新的像素。听起来这可能不是问题,那么。您的输出看起来好像跳过了Y空间块,大小约为YTotal/2。你是不是在分块处理这件事?我建议仔细看看你的全球状况。几乎可以肯定,在两次传递之间如何(可能没有)重置它是一个错误。
200
100
0