我折騰了一下午了,先是用強制類型轉換,結果總出java.lang.ClassCastException: sun.awt.windows.WImage錯誤,好像是cast不對。然后我就試用
BufferedImage bi = new BufferedImage (600,600,BufferedImage.TYPE_INT_RGB );
Graphics2D biContext =bi.createGraphics( );
biContext.drawImage(image, 0, 0, null );
這種辦法,結果沒有錯誤了,但是顯示出來的圖片卻是全黑的。
到底怎么才能正確的把image轉化成bufferedimage呢???或者能把image轉化成png圖片格式也可以(中間轉不轉bufferedimage都可以)。
對了,是要在servlet中實現的
謝謝啦!傾家盪產給分都可以!!!-_-:
6 个解决方案
你的思路基本正確了,
首先在內存中創建一個圖象。
然后在這個圖象上畫東西。
最后編碼輸出就可以了。
我有一個簡單的例子你看看。
//**DrawImage.java**//
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.lang.*;
public class DrawImage extends HttpServlet {
public void init() throws ServletException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); //創建內存圖片
Graphics g = image.getGraphics();
g.setColor( Color.red ); //設置顏色
g.fillRect( 0,0,100,100 );//畫巨型
g.drawImage(image,20,20,null);
g.setColor( Color.white );
g.drawString("我的故事",10,20);
ServletOutputStream out = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}
public void destroy()
{
}
}
還是不行呀,我這樣做之后總是只能顯示底色,如紅色或黑色,可是image中的確有圖呀,因為我在applet中測試中看到的
幫幫忙呀,還有三天就要交了,要不然過不了了!
我現在的問題是只能用outputstream外加設置response輸出格式才能輸出png格式圖片並正常顯示,但是這樣產生的圖片卻不能在j2me模擬器中顯示(說是格式錯誤),不知道是不是編碼器版本問題。可是如果我換用另外一種pngencoder(com.keypoint.pngencoder),在瀏覽器(ie)中根本就顯示不了(懷疑有可能和原圖片源的格式有關,因為我看這個pngencoder的api說明好像對於圖像源有一定限制),總像鏈接失效的樣子似的。
怎么辦呢?我現在手里的圖片源可以是byte[],也可以是image,有什么辦法能轉成bufferedimage,renderedimage或者直接png格式呢?另外,因為最終是要在手機中顯示,怎么能改變圖片大小呢,我試着用image的getscaleinstance去縮小圖片,但好像沒什么反應。
請幫幫忙吧,多少分都可以呀(不過我現在只有500多分了)
頂!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11