代码之家  ›  专栏  ›  技术社区  ›  Amin

JavaFx套接字编程和发送图像[副本]

  •  0
  • Amin  · 技术社区  · 6 年前

    有什么方法可以序列化 javafx.scene.image.image网站 ?

    这是我的SerializableImage类。

    import javafx.scene.image.Image;
    import javafx.scene.image.PixelReader;
    import javafx.scene.image.PixelWriter;
    import javafx.scene.image.WritableImage;
    
    import java.io.Serializable;
    
    
    public class SerializableImage implements Serializable {
        private int width, height;
        private int[][] data;
    
        public SerializableImage() {}
    
        public void setImage(Image image) {
            width = ((int) image.getWidth());
            height = ((int) image.getHeight());
            data = new int[width][height];
    
            PixelReader r = image.getPixelReader();
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    data[i][j] = r.getArgb(i, j);
                }
            }
    
        }
    
        public Image getImage() {
            WritableImage img = new WritableImage(width, height);
    
            PixelWriter w = img.getPixelWriter();
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    w.setArgb(i, j, data[i][j]);
                }
            }
    
            return img;
        }
    
    }
    
    0 回复  |  直到 9 年前
        1
  •  8
  •   James_D    9 年前

    通常,通过以常规图像格式存储图像,可以通过创建 java.awt.image.BufferedImage javax.imageio.ImageIO 应用程序编程接口:

    Image image = ... ;
    ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", ...); 
    

    第三个论点 ImageIO.write(...) File OutputStream .

    如果您有一个类想要使其可序列化,它包含 Image ,可以创建自定义序列化窗体:

    public class SomeClass implements Serializable {
        private transient Image image ;
    
        // other fields, etc...
    
        private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
            s.defaultReadObject();
            image = SwingFXUtils.toFXImage(ImageIO.read(s), null);
        }
    
        private void writeObject(ObjectOutputStream s) throws IOException {
            s.defaultWriteObject();
            ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", s);
        }
    }