如何将 BufferedImage 保存到 pgm 文件?
How do I save a BufferedImage to a pgm file?
我上网查了一下,但找不到答案。我有一个 pgm 文件,我将其用作 BufferedImage 来进行卷积(我为此使用 JAI),但我无法将其保存回 pgm 文件。
到目前为止,我使用以下代码来保存:
JAI.create("filestore", newImage, outputFileName);
有了它,我得到了一个 pgm 文件,但是当我打开图像时,IfranView 告诉我它是一个扩展名不正确的 TIF 文件。我需要更改什么?
感谢您的帮助!如果可能,请提供代码示例。谢谢大家。
亲切的问候,
斯坦尼尔
BufferedImage bufferedImage = ImageIO.read(new File("input file directory...image.png"));
ImageIO.write(bufferedImage, "pgm", new File("output file directory.....image.pgm"));
这应该采用缓冲图像(jpeg、png...等)并将其正确转换为 pgm。
找到允许 .pgm 文件与 ImageIO 一起使用的 JAI 插件
这是我找到的一个例子。未测试。
// Create the OutputStream.
OutputStream out = new FileOutputStream(fileToWriteTo);
// Create the ParameterBlock.
PNMEncodeParam param = new PNMEncodeParam();
param.setRaw(true.equals("raw"));
//Create the PNM image encoder.
ImageEncoder encoder = ImageCodec.createImageEncoder("PNM", out, param);
我找到了答案。我已经将外部 JAI imageio 添加到我的库中。
ImageIO.write(bufferedImage, "pnm", new File("output file directory.....image.pgm"));
而不是 "pgm" 它应该说 "pnm"。新文件将自动具有 pgm 扩展名。
可能晚了,但我刚写了一篇。一个简单的 PGM 编写器采用一个 2d-double 数组,其值在 [0.0,1.0].
范围内
public static void WritePGM(string fileName, double[,] bitmap)
{
var width = bitmap.GetLength(0);
var height = bitmap.GetLength(1);
var header = "P5\n" + width + " " + height + "\n255\n";
var writer = new BinaryWriter(new FileStream(fileName, FileMode.Create));
writer.Write(System.Text.Encoding.ASCII.GetBytes(header));
for (var j = 0; j < height; j++)
{
for (var i = width-1; i >= 0; i--)
{
var c = (byte)(System.Math.Max(System.Math.Min(1.0, bitmap[i, j]), 0.0) * 255.0);
writer.Write(c);
}
}
writer.Close();
}
我上网查了一下,但找不到答案。我有一个 pgm 文件,我将其用作 BufferedImage 来进行卷积(我为此使用 JAI),但我无法将其保存回 pgm 文件。 到目前为止,我使用以下代码来保存:
JAI.create("filestore", newImage, outputFileName);
有了它,我得到了一个 pgm 文件,但是当我打开图像时,IfranView 告诉我它是一个扩展名不正确的 TIF 文件。我需要更改什么?
感谢您的帮助!如果可能,请提供代码示例。谢谢大家。
亲切的问候, 斯坦尼尔
BufferedImage bufferedImage = ImageIO.read(new File("input file directory...image.png"));
ImageIO.write(bufferedImage, "pgm", new File("output file directory.....image.pgm"));
这应该采用缓冲图像(jpeg、png...等)并将其正确转换为 pgm。
找到允许 .pgm 文件与 ImageIO 一起使用的 JAI 插件这是我找到的一个例子。未测试。
// Create the OutputStream.
OutputStream out = new FileOutputStream(fileToWriteTo);
// Create the ParameterBlock.
PNMEncodeParam param = new PNMEncodeParam();
param.setRaw(true.equals("raw"));
//Create the PNM image encoder.
ImageEncoder encoder = ImageCodec.createImageEncoder("PNM", out, param);
我找到了答案。我已经将外部 JAI imageio 添加到我的库中。
ImageIO.write(bufferedImage, "pnm", new File("output file directory.....image.pgm"));
而不是 "pgm" 它应该说 "pnm"。新文件将自动具有 pgm 扩展名。
可能晚了,但我刚写了一篇。一个简单的 PGM 编写器采用一个 2d-double 数组,其值在 [0.0,1.0].
范围内 public static void WritePGM(string fileName, double[,] bitmap)
{
var width = bitmap.GetLength(0);
var height = bitmap.GetLength(1);
var header = "P5\n" + width + " " + height + "\n255\n";
var writer = new BinaryWriter(new FileStream(fileName, FileMode.Create));
writer.Write(System.Text.Encoding.ASCII.GetBytes(header));
for (var j = 0; j < height; j++)
{
for (var i = width-1; i >= 0; i--)
{
var c = (byte)(System.Math.Max(System.Math.Min(1.0, bitmap[i, j]), 0.0) * 255.0);
writer.Write(c);
}
}
writer.Close();
}