package org.sunflow.core.display;
import org.sunflow.core.Display;
import org.sunflow.image.Bitmap;
import org.sunflow.image.Color;
public class FileDisplay implements Display {
private Bitmap bitmap;
private String filename;
public FileDisplay(boolean saveImage) {
// a constructor that allows the image to not be saved
// usefull for benchmarking purposes
bitmap = null;
filename = saveImage ? "output.png" : null;
}
public FileDisplay(String filename) {
bitmap = null;
this.filename = filename == null ? "output.png" : filename;
}
public void imageBegin(int w, int h, int bucketSize) {
if (bitmap == null || bitmap.getWidth() != w || bitmap.getHeight() != h)
bitmap = new Bitmap(w, h, filename == null || filename.endsWith(".hdr"));
}
public void imagePrepare(int x, int y, int w, int h, int id) {
}
public void imageUpdate(int x, int y, int w, int h, Color[] data) {
for (int j = 0, index = 0; j < h; j++)
for (int i = 0; i < w; i++, index++)
bitmap.setPixel(x + i, bitmap.getHeight() - 1 - (y + j), data[index]);
}
public void imageFill(int x, int y, int w, int h, Color c) {
Color cg = c;
for (int j = 0; j < h; j++)
for (int i = 0; i < w; i++)
bitmap.setPixel(x + i, bitmap.getHeight() - 1 - (y + j), cg);
}
public void imageEnd() {
if (filename != null)
bitmap.save(filename);
}
}