zoukankan      html  css  js  c++  java
  • e668. 在一组像素中创建缓冲图像

    This example demonstrates how to convert a byte array of pixel values that are indices to a color table into a BufferedImage. In particular, the example generates the Mandelbrot set in a byte buffer and combines this data with a SampleModel, ColorModel, and Raster into a BufferedImage. A 16-color index color model is used to represent the pixel colors.

        import java.awt.*;
        import java.awt.event.*;
        import java.awt.geom.*;
        import java.awt.image.*;
        
        // Instantiate this class and then use the draw() method to draw the
        // generated on the graphics context.
        public class Mandelbrot2 {
            // Holds the generated image
            Image image;
        
            // 16-color model; this method is defined in
            // e660 用一组像素创建图像
            ColorModel colorModel = generateColorModel();
        
            public Mandelbrot2(int width, int height) {
                // Initialize with default location
                this(width, height, new Rectangle2D.Float(-2.0f, -1.2f, 3.2f, 2.4f));
            }
        
            public Mandelbrot2(int width, int height, Rectangle2D.Float loc) {
                // Generate the pixel data; this method is defined in
                // e660 用一组像素创建图像
                byte[] pixels = generatePixels(width, height, loc);
        
                // Create a data buffer using the byte buffer of pixel data.
                // The pixel data is not copied; the data buffer uses the byte buffer array.
                DataBuffer dbuf = new DataBufferByte(pixels, width*height, 0);
        
                // The number of banks should be 1
                int numBanks = dbuf.getNumBanks(); // 1
        
                // Prepare a sample model that specifies a storage 4-bits of
                // pixel datavd in an 8-bit data element
                int bitMasks[] = new int[]{(byte)0xf};
                SampleModel sampleModel = new SinglePixelPackedSampleModel(
                    DataBuffer.TYPE_BYTE, width, height, bitMasks);
        
                // Create a raster using the sample model and data buffer
                WritableRaster raster = Raster.createWritableRaster(sampleModel, dbuf, null);
        
                // Combine the color model and raster into a buffered image
                image = new BufferedImage(colorModel, raster, false, null);//new java.util.Hashtable());
            }
        
            public void draw(Graphics g, int x, int y) {
                g.drawImage(image, x, y, null);
            }
        }
    

    Here's some code that uses the Mandelbrot2 class:

        class RunMandelbrot2 {
            static public void main(String[] args) {
                new RunMandelbrot2();
            }
            RunMandelbrot2() {
                Frame frame = new Frame("Mandelbrot2 Set");
                frame.add(new MyCanvas());
                frame.setSize(300, 200) ;
                frame.setVisible(true);
            }
        
            class MyCanvas extends Canvas {
                Mandelbrot2 mandelbrot;
        
                MyCanvas() {
                    // Add a listener for resize events
                    addComponentListener(new ComponentAdapter() {
                        // This method is called when the component's size changes
                        public void componentResized(ComponentEvent evt) {
                            Component c = (Component)evt.getSource();
        
                            // Get new size
                            Dimension newSize = c.getSize();
        
                            // Regenerate the image
                            mandelbrot = new Mandelbrot2(newSize.width, newSize.height);
                            c.repaint();
                        }
                    });
                }
        
                public void paint(Graphics g) {
                    if (mandelbrot != null) {
                        mandelbrot.draw(g, 0, 0);
                    }
                }
            }
        }
    
    Related Examples
  • 相关阅读:
    [命令]在uboot下查看文件系统的目录结构
    (DNS)dnsmasq部署DNS
    [iptables]iptables常规设置
    [net]ftp ssh http telnet https服务及端口
    [shell]shell 中| && || () {} 用法以及shell的逻辑与或非
    React躬行记(5)——React和DOM
    React躬行记(4)——生命周期
    React躬行记(3)——组件
    React躬行记(2)——JSX
    React躬行记(1)——函数式编程
  • 原文地址:https://www.cnblogs.com/borter/p/9575565.html
Copyright © 2011-2022 走看看