当前位置: 首页 > 面试题库 >

BufferedImage颜色意外更改

罗昊空
2023-03-14
问题内容

我有以下代码,该代码创建灰度BufferedImage,然后设置每个像素的随机颜色。

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值。栅格将为您完成所有转换工作。



 类似资料:
  • 问题内容: 我正在开发一个捕获屏幕快照并从捕获的图像创建视频的应用程序。但是问题在于,当生成视频时,生成的视频中的颜色非常粉红色。我认为这是因为我正在使用BufferedImage.TYPE_3BYTE_BGR类型操纵捕获的图像以显示光标。有人可以告诉我如何解决此问题,我希望视频的颜色与屏幕的实际颜色相同。 为了捕获屏幕图像,我正在执行以下操作: 对于操作图像,我正在做如下操作: 请告诉我如何获取

  • 问题内容: 所以我有一个带有火山的图像文件。其他所有内容均为0xFFFF00FF(不透明的洋红色)。我想将包含该颜色的每个像素替换为0(透明)。到目前为止,我的方法如下所示: 这工作正常,但似乎很慢。我见过有人以其他方式执行此操作,但是我不知道发生了什么。如果有人知道更好的方法,我非常想听听。 问题答案: 为了避免遍历像素,请更改基础ColorModel。这是一个例子。以下是作者使用原始Buffe

  • 问题内容: 我需要创建一个具有指定背景颜色的矩形,在背景上绘制一些图案并将其保存到文件中。我不知道如何创建背景。 我正在使用嵌套循环: 但是,当图像较大时,速度非常慢。 如何以更有效的方式设置颜色? 问题答案: 获取图像的图形对象,将当前绘画设置为所需的颜色,然后调用。

  • 问题内容: 我想知道是否有人知道如何设置显示在外壳中的文本的颜色。我注意到“ ls”在将信息打印到屏幕上(在Linux盒子上)时使用了几种不同的颜色,想知道我是否可以在Python中利用它。 问题答案: 使用Curses或ANSI转义序列。开始喷射转义序列之前,应检查stdout是tty。您可以使用。这是一个从我的项目中提取的函数,该函数使用ANSI转义序列根据状态以红色或绿色打印输出:

  • 本文向大家介绍用javascript获取任意颜色的更亮或更暗颜色值示例代码,包括了用javascript获取任意颜色的更亮或更暗颜色值示例代码的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍的是关于利用javascript获取任意颜色更亮或更暗颜色值的相关内容,下面话不多说,来一起看看详细的介绍: 预处理CSS,比如Sass和less可以通过设定一个特定值,让任何颜色变得更亮或者