gpt4 book ai didi

java - 遍历图像像素使我的程序崩溃

转载 作者:行者123 更新时间:2023-11-29 05:24:26 24 4
gpt4 key购买 nike

我开始研究一个小型图像处理软件。目前我只需要将图像设置为黑白并循环遍历其像素并生成每个像素的计数器、坐标和颜色(#、x、y、颜色)的报告。

它可以很好地处理我为测试而创建的小图像,但是当我使用真实图片时,它会花费几分钟甚至使我的软件崩溃。我在循环中的代码似乎很容易崩溃。

关于如何改进它的任何提示?提前致谢!

void processImage(BufferedImage image) {
exportStr = "#,x,y,color"+ newline;

Color c = new Color(0);
int imgW = image.getWidth();
int imgH = image.getHeight();
matrix = new int[imgW][imgH];

int currentPx = 1;

for(int x=0; x < imgW; x++)
{
for(int y=0; y < imgH; y++)
{
c = new Color(image.getRGB(x, y));

if(c.equals(Color.WHITE))
{
matrix[x][y] = 1;
}

String color = matrix[x][y]==1 ? "W" : "B";
exportStr += formatStringExport(currentPx, x, y, color); // just concatenate values
currentPx++;
}
}

return img;
}

最佳答案

这可能是你的问题

exportStr += formatStringExport(currentPx, x, y, color);

改用StringBuilder:

StringBuilder sb = new StringBuilder(imgW  * imgH * <String size per pixel>);

....

sb.append(formatStringExport(currentPx, x, y, color));

检查 StringBuilder有关详细信息的文档。此外,您可以尝试减少创建的对象数量。因此,例如替换:

c = new Color(image.getRGB(x, y));

String color = matrix[x][y]==1 ? "W" : "B";

由...

if(image.getRGB(x, y).equals(...))

sb.append(formatStringExport(currentPx, x, y, (matrix[x][y]==1 ? "W" : "B")));

祝你好运! :)

关于java - 遍历图像像素使我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23255734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com