/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Indstilling af opløsning (dpi) ved skrivni~
Fra : MSR


Dato : 05-11-02 13:17

Se evt. http://forum.java.sun.com/thread.jsp?forum=31&thread=319666 for
pænere kodeopsætning.

I en Java-applikation skal jeg skrive et tiff-billede i en bestemt
opløsning, f.eks. 300 pixels/inch (dpi), og med en størrelse på f.eks. 5 x 2
cm. Dette medfører, at pixel-dimensionerne bliver ca. 583 x 237 pixels.
Tiff-filen skal være en bitmap, i.e. 1-bit farver (s/h).

Min nuværende kode er (en modificeret udgave af kode fundet på
http://access1.sun.com/techarticles/ImagingApps/JImage.html ):

import java.awt.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
import com.sun.media.jai.codec.*;
import javax.media.jai.*;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.awt.image.DataBuffer;
import java.awt.geom.GeneralPath;
import java.io.*;
import javax.swing.*;
import java.awt.image.renderable.ParameterBlock;


public class TIFFJai extends JApplet {

public static final String DEFAULT_FILE = "white.tif";
private static RenderedImage img;

public void init() {
setBackground(Color.blue);

String fileName = DEFAULT_FILE;

// Read the image from the designated path.
System.out.println("load image from '" + fileName+"'");
img = (RenderedImage)JAI.create("fileload", fileName);
}


public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Dimension d = getSize();
g2.setBackground(getBackground());
g2.clearRect(0, 0, d.width, d.height);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
int w = d.width;
int h = d.height;


RenderedImageAdapter ria = new RenderedImageAdapter(img);
BufferedImage bi = ria.getAsBufferedImage();

Graphics2D big = bi.createGraphics();

big.setFont(new Font("Dialog", Font.PLAIN, 10));
big.setColor(Color.black);
big.drawString("This is the text!!!", 4, 50);

g2.drawImage(bi, 0, 0, this);



try {
File file = new File("images", "test1.tif");
FileOutputStream out = new FileOutputStream(file);

TIFFEncodeParam params = new TIFFEncodeParam();
params.setCompression(TIFFEncodeParam.COMPRESSION_NONE);
ImageEncoder encoder = ImageCodec.createImageEncoder("TIFF",out,
params);
if(encoder == null) {
System.out.println("imageEncoder is null");
System.exit(0);
}
encoder.encode(bi);


} catch (Exception ex) {
g2.setColor(Color.red);
g2.drawString("write permissions on images/test1.tif?", 5,
h*2-5);
}


}


public static void main(String argv[]) {
final TIFFJai demo = new TIFFJai();
demo.init();
JFrame f = new JFrame("JAI Demo - TIFFJai");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
f.getContentPane().add("Center", demo);
f.pack();
f.setSize(new Dimension(400,300));
f.show();
}
}

Den hentede tiff-fil 'white.tif' er 300 dpi og 5 x 2 cm og 583 x 237 pixels.
Men den skrevne tiff-fil 'test1.tif' er 72 dpi og 20.6 x 8.3 cm og 583 x 237
pixels. Begge har 1-bit farver som krævet.

Jeg vil meget gerne have, at 'test1.tif' har de samme mål som 'white.tif'.
Hvordan gør jeg det?

(Det er ikke et krav at 'white.tif' bliver hentet som baggrund. Det er bare
et helt hvidt billede, hentet ind for at få de rette dimensioner.

En løsning ville være bare at skrive Graphics2D g2 som en tiff-fil med de
rette indstillinger.

Men hvordan skal det gøres?)

Skriv endelig hvis der er noget som skal tydeliggøres.

På forhånd tak til alle.



 
 
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste