Graphics2D.scale(2.0,2.0); orAffineTransform trans=AffineTransform.setToScale(2.0,2.0);
g2d.drawImage(img,trans,this);
g2d.drawImage(img,trans,this);
解决方案 »
- 火龙果 杨辉三角形 问题
- 如何实现类似于C里的int sort(int a[])的数组排序
- 有没有办法分别读取一个文件夹里的全部文件
- 关闭窗口的问题?
- 数组问题
- 请教一个JLabel问题,谢谢大家
- 看sun的swing tutorial的有关java web start的问题
- jtable的位置
- "FormatFunction.java": Error #: 354 : incompatible types; found: java.lang.String, required: int at line 117, column 29 这是什么
- Swing中tree的问题
- 疑惑不解
- 未发现数据源名称并且未指定默认驱动程序??
如果非面版显示呢?请大哥指教。
小弟的原代码,大小的问题解决了,但是,
缩少图片后,质量好差,不知道应该如何
才可以抗失真。希望各位大哥能够赐教。
小弟在这里谢谢各位了。import javax.imageio.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.awt.Image;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;public class javaJPG { public static void main(String args[]) throws IOException {
double Ratio=0.0;
String name = "http://www.google.com/intl/zh-CN_ALL/images/logo.gif";
URL filestring = new URL(name);
BufferedImage Bi = ImageIO.read(filestring);
Image Itemp = Bi.getScaledInstance(200, 200, Bi.SCALE_SMOOTH);
if ( (Bi.getHeight() > 200) || (Bi.getWidth() > 200)) {
if (Bi.getHeight() > Bi.getWidth()) {
Ratio = 200.0 / Bi.getHeight();
}
else {
Ratio = 200.0 / Bi.getWidth();
}
} AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);
Itemp = op.filter(Bi, null);
String formatName = "jpg";
String outputFilename = "c:/name" + "." + formatName;
File outputFile = new File(outputFilename);
boolean writerExists = ImageIO.write((BufferedImage)Itemp, formatName, outputFile);
}
}
...
BufferedImage Itemp;
// Because you use AffineTransformOp to do transform
// Image Itemp = Bi.getScaledInstance(200, 200, Bi.SCALE_SMOOTH);
ImageIO.write(Itemp, formatName, outputFile); //no castjpg is a losing format. to improve quality, you can use .png format.
another thing is ImageIo.write doesn't support .gif
o 线性插值
o 双线性插值
o 样条曲线插值
使用的插值算法从上往下,质量越好,速度越慢。
建议你参考一些数字图像处理的书籍。
ImageIO不支持gif是写出不是读入。import javax.imageio.*;
public class ShowImageIOInfo
{
public ShowImageIOInfo() {
String names[] = ImageIO.getReaderFormatNames();
for (int i=0; i<names.length; ++i) {
System.out.println( "reader "+names[i] );
}
names = ImageIO.getWriterFormatNames();
for (int i=0; i<names.length; ++i) {
System.out.println( "writer "+names[i] );
}
}
static public void main( String args[] ) throws Exception {
new ShowImageIOInfo();
}
}可以输出支持的格式。
输出结果为:reader png
reader jpeg
reader JPEG
reader gif
reader jpg
reader JPG
writer PNG
writer png
writer jpeg
writer JPEG
writer jpg
writer JPG而且经过测试,缩放后,一张6K的jpg和
一张60K的png质量好像也差不了多少。
请问如何抗锯齿的呢?op.setRenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);好像是不行的。小弟非常希望各位大哥能够帮忙。mattus_zhao(人生十有八九不如意) 兄说的方法,
小弟完全不会。能否举个例子呢?例如就在这个
程序里面,如果我要抗锯齿,输出的图片效果好点,
我可以怎么做,程序应该怎么写呢?今天是大年初一,小弟恭祝各位大哥新年快乐,身体
健康,恭喜发财!!恭喜恭喜!
BufferedImage 类已经实现了相关的内容:
比如三个插值算法,还有在图形绘制时候的反走样,就象你上面所用的 setRenderingHints方法。
如果你对 Java 2D 有兴趣的话,可以参考 J2SDK 的文档,上面有一节专门讲述 Java 2D API 的。
圆滑的呢?java的2d库里面应该有相应方法吧,只是偶
不懂啊………………