是否有可能在刷新之前查看public static BufferedImage rasterize(File svgFile) throws IOException {
final BufferedImage[] imagePointer = new BufferedImage[1];
// Rendering hints can't be set programatically, so
// we override defaults with a temporary stylesheet.
// These defaults emphasize quality and precision, and
// are more similar to the defaults of other SVG viewers.
// SVG documents can still override these defaults.
String css = "svg {" +
"shape-rendering: geometricPrecision;" +
"text-rendering: geometricPrecision;" +
"color-rendering: optimizeQuality;" +
"image-rendering: optimizeQuality;" +
"}";
File cssFile = File.createTempFile("batik-default-override-", ".css");
FileUtils.writeStringToFile(cssFile, css);
TranscodingHints transcoderHints = new TranscodingHints();
transcoderHints.put(ImageTranscoder.KEY_XML_PARSER_VALIDATING, Boolean.FALSE);
transcoderHints.put(ImageTranscoder.KEY_DOM_IMPLEMENTATION,
SVGDOMImplementation.getDOMImplementation());
transcoderHints.put(ImageTranscoder.KEY_DOCUMENT_ELEMENT_NAMESPACE_URI,
SVGConstants.SVG_NAMESPACE_URI);
transcoderHints.put(ImageTranscoder.KEY_DOCUMENT_ELEMENT, "svg");
transcoderHints.put(ImageTranscoder.KEY_USER_STYLESHEET_URI, cssFile.toURI().toString());
try {
TranscoderInput input = new TranscoderInput(new FileInputStream(svgFile));
ImageTranscoder t = new ImageTranscoder() {
@Override
public BufferedImage createImage(int w, int h) {
return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
}
@Override
public void writeImage(BufferedImage image, TranscoderOutput out)
throws TranscoderException {
imagePointer[0] = image;
}
};
t.setTranscodingHints(transcoderHints);
t.transcode(input, null);
}
catch (TranscoderException ex) {
// Requires Java 6
ex.printStackTrace();
throw new IOException("Couldn't convert " + svgFile);
}
finally {
cssFile.delete();
}
return imagePointer[0];
缓冲区中的内容?如果可以,怎么办?
例如,我正在调试以下代码:
stdout
如果我在调试器的最后一行停止,我想查看该缓冲区,其中应包含for(int i = 0; i < 10; i++){
printf("%d ", i);
}
printf("\n"); // Break point on this line
。
答案 0 :(得分:2)
通常不能,但是如果使用setvbuf()
,则可以用您创建的libc覆盖libc使用的专用缓冲区。在那些printf()
调用之前执行此操作应使数据在刷新之前最终存储在缓冲区中。
char mybuffer[BUFSIZ]; // BUFSIZ is defined in <stdio.h>
setvbuf(stdout, mybuffer, _IOLBF, BUFSIZ);
无论如何,您在缓冲区中发现的肯定不是记录在案的东西,所以缓冲区的内容可能不是您所期望的。例如,我自己进行了一些测试,发现glibc似乎并不喜欢较小的缓冲区,并且有时会忽略用户缓冲区(不过您应该对BUFSIZ
感到满意)。