2015-03-24 3 views
-1

Я пытаюсь преобразовать изображение в изображение с серой шкалой с помощью Java. Проблема здесь в том, что когда я пытаюсь сохранить это изображение после преобразования в серый масштаб, он показывает черное изображение. Я немного не знаю об этих конверсиях изображений. Я хотел бы знать, почему он не работает, и ваши ответы помогут мне в моем проекте. Спасибо.Преобразование цветного изображения в оттенки серого показывает черное изображение в java

BufferedImage image = ImageIO.read(fileContent); 
File outputFile = new File(date1); 
ImageIO.write(image1, "png", outputFile); 

(Это цветное изображение получается из HTML страницы, и она работает должным образом. И когда я пытаюсь отобразить/сохранить это изображение, цветное изображение видно. Но проблема возникает тогда, когда ниже код используется для преобразования цветного изображения в изображение с серой шкалой.)

 BufferedImage image1 = new BufferedImage(width, height,BufferedImage.TYPE_BYTE_GRAY); 
    Graphics graphics = image1.getGraphics(); 
    graphics.drawImage(image, 0, 0, null); 
    graphics.dispose(); 

    File outputFile = new File(date1); 
    ImageIO.write(image1, "png", outputFile); 
+0

Просто интересно : работает ли ваш код, если вы не включаете преобразование? Смысл: сначала я попытаюсь заставить поток показать мне исходную картину; Когда это работает, вы можете подумать о том, чтобы потянуть ваше преобразование. – GhostCat

+0

Изначально, когда я пытаюсь отображать/сохранять цветное изображение, я вижу изображение, после преобразования он отображает черное изображение вместо изображения с серой шкалой. – user3364490

+0

Можете ли вы попытаться отобразить изображение в «JFrame» или аналогичном, чтобы увидеть, является ли проблема преобразованием или сохранением изображения в оттенках серого? Имеет ли значение, если вы используете другой формат выходного файла, например BMP или JPEG? – haraldK

ответ

1

Имеются проблемы с преобразованием цветового пространства. Вы можете вручную преобразовать каждый пиксель выходного изображения в оттенках серого и установить пиксели выходного изображения таким образом:

int gray = red * 0.299 + green * 0.587 + blue * 0.114 

или использовать класс ColorConvertOp для выполнения преобразования для вас:

BufferedImage in = ImageIO.read(inputFile); 
BufferedImage out = new BufferedImage(in.getWidth(), in.getHeight(), BufferedImage.TYPE_INT_ARGB); 
ColorConvertOp op = new ColorConvertOp(in.getColorModel().getColorSpace(), ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
op.filter(in, out); 
ImageIO.write(out, "png", outputFile); 
+0

ColorConvertOp также показывает черное изображение в качестве выхода. – user3364490

+0

Имеет ли ваше изображение прозрачность? – copeg

+0

Прозрачность означает? Извините, я не знаю об этих условиях обработки изображений. – user3364490