java bufferedimage颜色_java – BufferedImage意外地改变了颜色
我有以下代碼,它創建灰度Buffered
Image,然后設置每個像素的隨機顏色.
import java.awt.image.BufferedImage;
public class Main {
public static void main(String[] args) {
BufferedImage right = new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_GRAY);
int correct = 0, error = 0;
for (int i = 0; i < right.getWidth(); i++) {
for (int j = 0; j < right.getHeight(); j++) {
int average = (int) (Math.random() * 255);
int color = (0xff << 24) | (average << 16) | (average << 8) | average;
right.setRGB(i, j, color);
if(color != right.getRGB(i, j)) {
error++;
} else {
correct++;
}
}
}
System.out.println(correct + ", " + error);
}
}
大約25-30%的像素出現奇怪的行為,我設置顏色,然后它具有不同于先前設置的值.我用錯誤的方式設置顏色嗎?
最佳答案 這是你的解決方案:禁止getRGB并使用Raster(比getRGB更快更容易)或甚至更好的DataBuffer(最快但你必須處理編碼):
import java.awt.image.BufferedImage;
public class Main
{
public static void main(String[] args)
{
BufferedImage right = new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_GRAY);
int correct = 0, error = 0;
for (int x=0 ; x < right.getWidth(); x++)
for (int j = 0; j < right.getHeight(); j++)
{
int average = (int) (Math.random() * 255) ;
right.getRaster().setSample(x, y, 0, average) ;
if ( average != right.getRaster().getSample(x, y, 0) ) error++ ;
else correct++;
}
System.out.println(correct + ", " + error);
}
}
在你的情況下getRGB很糟糕,因為編碼是一個字節數組(8位),你必須使用getRGB操作RGB值.柵格為您完成所有轉換工作.
總結
以上是生活随笔為你收集整理的java bufferedimage颜色_java – BufferedImage意外地改变了颜色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么用u盘装系统pe 用U盘装系统PE步
- 下一篇: 线程调度 java_Java多线程--线