所以我在Java中制作了一个程序,目的是从某些给定的输入生成图像。我设法让程序编译和解析输入而不会崩溃,但它似乎并没有保存输出图像。Image not saving Julia sets
这里的东西有关保存文件:
public static void saveImage(BufferedImage img, File file) throws IOException {
ImageWriter writer = null;
java.util.Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
if(iter.hasNext()){
writer = (ImageWriter)iter.next();
}
ImageOutputStream ios = ImageIO.createImageOutputStream(file);
writer.setOutput(ios);
ImageWriteParam param = new JPEGImageWriteParam(java.util.Locale.getDefault());
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT) ;
param.setCompressionQuality(0.98f);
writer.write(null, new IIOImage(img, null, null), param);
}
public static void save(String[] args) throws Exception {
BufferedImage colorImage, julia;
if (args.length != 1)
System.out.println("usage is: java Julia filename");
else
{
julia = Julia();
saveImage(julia, new File("julia" + args[0]));
}
,这里是我的代码,在它的全部:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
import java.lang.Math.*;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
import javax.imageio.stream.ImageOutputStream;
public class Julia{
public static void saveImage(BufferedImage img, File file) throws IOException {
ImageWriter writer = null;
java.util.Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
if(iter.hasNext()){
writer = (ImageWriter)iter.next();
}
ImageOutputStream ios = ImageIO.createImageOutputStream(file);
writer.setOutput(ios);
ImageWriteParam param = new JPEGImageWriteParam(java.util.Locale.getDefault());
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT) ;
param.setCompressionQuality(0.98f);
writer.write(null, new IIOImage(img, null, null), param);
}
public static BufferedImage Julia()
{
//z= (Xmin +i(Xmax- Xmin) /size) + (Ymin+ j(Ymax-Ymin)/size);
BufferedImage outImage;
float zreal, zimag;
float cReal, cImag;
float xMin, xMax, yMin, yMax;
int height, width, size;
height = width = size = 512;
outImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
//initializing variables
cReal = 0;
cImag = 0;
xMin = 0;
xMax = 0;
yMin = 0;
yMax = 0;
//c= creal+cimag
Complex c;
c = new Complex (cReal, cImag);
int i, j ,k;
Complex f;
for (i = 0; i<width; i++)
{
for(j = 0; j<height; j++)
{
for (k= 0; k< 256; k++)
{
zreal = (xMin +i*(xMax- xMin) /size);
zimag = (yMin+ j*(yMax-yMin)/size);
Complex z = new Complex(zreal, zimag);
//z = z^2
//f= z^2 +c
z = z.multi(z);
f = z.addd(c);
if (Math.sqrt(Math.pow(zreal, 2.0)+Math.pow(zimag, 2.0))>2)
break;
}
int pixel = getHSBColor(k);
outImage.setRGB(i, j, pixel);
}
}
return(outImage);
}
public static void main(String[] args)
{
BufferedImage outImage, julia;
double cReal, cImag;
float xMin, xMax, yMin, yMax;
Scanner scan = new Scanner (System.in);
System.out.println("Input: cReal cImag xMin xMax yMin yMax fname");
cReal=scan.nextDouble();
cImag=scan.nextDouble();
xMin=scan.nextFloat();
xMax=scan.nextFloat();
yMin=scan.nextFloat();
yMax=scan.nextFloat();
String fname = scan.next();
double f;
int z;
int c;
int height, width, size;
height = width = size = 512;
outImage = Julia(); // Put 6 junk inside cReal, cImag, xMin, xMax, yMin, yMax
}
//something I tried to save the file that didn't seem to work properly//
/* try {
File outputfile = new File("Julia" + args[0]);
ImageIO.write(julia, "jpg", outputfile);
} catch (IOException e) {
}*/
public static void save(String[] args) throws Exception {
BufferedImage colorImage, julia;
if (args.length != 1)
System.out.println("usage is: java Julia filename");
else
{
julia = Julia();
saveImage(julia, new File("julia" + args[0]));
}
}
// hsb color table
public static int getHSBColor(int idx)
{
return Color.getHSBColor((float)(idx/255.0), 1.0f, 1.0f).getRGB();
}
}
class Complex
{
double real;
double imaginary;
Complex(double newReal, double newImaginary)
{
real = newReal;
imaginary = newImaginary;
}
public Complex addd(Complex complexToAdd)
{
double x , y , newreal, newimaginary;
newreal = complexToAdd.real;
newimaginary = complexToAdd.imaginary;
x = real + newreal;
y = imaginary + newimaginary;
Complex newComplex = new Complex(x, y);
return newComplex;
}
public Complex multi(Complex complexToMulti)
{
double x, y , newreal, newimaginary;
newreal = complexToMulti.real;
newimaginary = complexToMulti.imaginary;
x = real*newreal - imaginary*newimaginary;
y = real*newimaginary + imaginary*newreal;
Complex newComplex= new Complex(x, y);
return newComplex;
}
// extra absolute value method //
/*public Complex abso (Complex complexAbso) {
double x, y, newreal, newimiginary;
real = complexAbso.real;
imaginary= complexAbso.imaginary;
x = real*real;
y = imaginary*imaginary;
Complex newComplex = new int (x, y);
return newComplex;
}*/
}
人有什么想法?任何和所有的帮助将不胜感激。
谢谢你的时间。