关于JAVA的问题:如何将BufferedImage转换为Image

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于JAVA的问题:如何将BufferedImage转换为Image相关的知识,希望对你有一定的参考价值。

RT.如何将BufferedImage转换为Image
求大神!!!!!!!

参考:http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/ConvertbetweenSWTImageandAWTBufferedImage.htm

有完整的示范代码。

下面是从网站上提取出来的转换函数。请把下面代码复制到eclipse中,按ctrl+shift+f整理一下格式,就可以直接使用了。

函数的输出是ImageData对象。为了得到Image对象,可以用new Image(display, imageData);得到Image对象。

/**
 * <a href=
 * "http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/ConvertbetweenSWTImageandAWTBufferedImage.htm">Convert
 * between SWT Image and AWT BufferedImage : SWT Swing AWT « SWT JFace
 * Eclipse « Java</a> <br/>
 * <span style="color:green">原名:static ImageData convertToSWT(BufferedImage
 * bufferedImage)(ImageData data)</span> <br/>
 * 
 * @param bufferedImage
 * @return
 */
public static ImageData convertAWTBufferedImageToSWTImageData(BufferedImage bufferedImage) 
if (bufferedImage.getColorModel() instanceof DirectColorModel) 
DirectColorModel colorModel = (DirectColorModel) bufferedImage.getColorModel();
PaletteData palette = new PaletteData(colorModel.getRedMask(), colorModel.getGreenMask(),
colorModel.getBlueMask());
ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(),
colorModel.getPixelSize(), palette);
WritableRaster raster = bufferedImage.getRaster();
int[] pixelArray = new int[3];
for (int y = 0; y < data.height; y++) 
for (int x = 0; x < data.width; x++) 
raster.getPixel(x, y, pixelArray);
int pixel = palette.getPixel(new RGB(pixelArray[0], pixelArray[1], pixelArray[2]));
data.setPixel(x, y, pixel);


return data;
 else if (bufferedImage.getColorModel() instanceof IndexColorModel) 
IndexColorModel colorModel = (IndexColorModel) bufferedImage.getColorModel();
int size = colorModel.getMapSize();
byte[] reds = new byte[size];
byte[] greens = new byte[size];
byte[] blues = new byte[size];
colorModel.getReds(reds);
colorModel.getGreens(greens);
colorModel.getBlues(blues);
RGB[] rgbs = new RGB[size];
for (int i = 0; i < rgbs.length; i++) 
rgbs[i] = new RGB(reds[i] & 0xFF, greens[i] & 0xFF, blues[i] & 0xFF);

PaletteData palette = new PaletteData(rgbs);
ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(),
colorModel.getPixelSize(), palette);
data.transparentPixel = colorModel.getTransparentPixel();
WritableRaster raster = bufferedImage.getRaster();
int[] pixelArray = new int[1];
for (int y = 0; y < data.height; y++) 
for (int x = 0; x < data.width; x++) 
raster.getPixel(x, y, pixelArray);
data.setPixel(x, y, pixelArray[0]);


return data;

return null;

参考技术A bufferedImage 是 image的子类,直接赋值就好了

Image img=new BufferedImage(x,y,t);
Image img=ImageIo.read(....);本回答被提问者采纳

关于 websocket 的说明

【中文标题】关于 websocket 的说明【英文标题】:Clarification on websocket 【发布时间】:2016-10-21 12:56:07 【问题描述】:

我现在正在探索 Websocket。我需要一些澄清。我正在将 websocket 与 tomcat 一起使用。

tomcat 如何将 websocket 请求映射到特定的 java 类。例如,我们可以在 web.xml 中给出 servlet 类。但是 websocket 是如何工作的呢?

【问题讨论】:

【参考方案1】:

1- Javascript: 为 websocket 声明变量如下: var websocket; var address = "ws://localhost:8080/appName/MyServ";

注意 appName 是您的应用程序名称,而 MyServ 是端点

还在你的脚本中添加一个函数来打开连接:

var websocket;
var address = "ws://localhost:8080/appName/MyServ";
function openWS() 

    websocket = new WebSocket(address);
    websocket.onopen = function(evt) 
        onOpen(evt) 
    ;
    websocket.onmessage = function(evt) 
        onMessage(evt)
    ;
    websocket.onerror = function(evt) 
        onError(evt)
    ;
    websocket.onclose = function(evt) 
        onClose(evt)
    ;


function onOpen(evt) 
   // what will happen after opening the websocket


function onClose(evt) 
    alert("closed")   

function onMessage(evt) 
    // what do you want to do when the client receive the message?
   alert(evt.data);


function onError(evt) 
   alert("err!")


function SendIt(message) 
// call this function to send a msg
    websocket.send(message);

2- 在服务器端,您需要一个 ServerEndpoint :我在上面的脚本中将其称为 myServ。

现在,我认为这正是您所需要的:

通过使用 @ServerEndpoint 注释来声明任何 Java POJO 类 WebSocket 服务器端点

import java.io.IOException
import javax.servlet.ServletContext;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value="/MyServ") 
public class MyServ
    @OnMessage
    public void onMessage(Session session, String msg) throws IOException  
        // todo when client send msg
        // tell the client that you received the message!
       try 
            session.getBasicRemote().sendText("I got your message :"+ msg);
         catch (IOException e) 
            throw new RuntimeException(e);
        


    

    @OnOpen
    public void onOpen (Session session) 
      // tell the client the connection is open!

     try 
            session.getBasicRemote().sendText("it is open!");
         catch (IOException e) 
            throw new RuntimeException(e);
        
    

    @OnClose
    public void onClose (Session session) 
        System.out.println("websocket closed");

    

    @OnError
    public void onError (Session session) 

    

【讨论】:

这很好 :) 但是这个 ws 请求是如何到达目的地的呢? tomcat是怎么处理的? 这是在客户端打开一个连接 websocket = new WebSocket("ws://localhost:8080/appName/MyServ");然后,在服务器端,有一个 ServerEndpoint,@ServerEndpoint(value="/MyServ")。 Tomcat 寻找请求标头和匹配的 URI。看看这个***.com/questions/26103939/…

以上是关于关于JAVA的问题:如何将BufferedImage转换为Image的主要内容,如果未能解决你的问题,请参考以下文章

Java屏幕截图并另存为PNG

Java生成验证码小工具

关于JAVA的问题:如何将BufferedImage转换为Image

关于JAVA~~~~ 如何将图片等大对象存入ORACLE中~~求详解!(代码)

java生成的二维码中间logo怎么改成文字

关于Java线程超时退出的问题.