e668. 在一组像素中创建缓冲图像
创建 图像 像素 缓冲 一组
2023-09-14 09:12:00 时间
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 |
相关文章
- 看透设计模式-创建型模式
- three.js之创建坐标系网格
- three.js之创建一条直线
- 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件
- docker如何创建一个运行后台进程的容器并同时提供shell终端
- "无法从带有索引像素格式的图像创建graphics对象" 解决
- 创建一个Android模拟器
- Django创建应用二
- OpenCV 基础知识------图像创建、访问、转换
- 一个简单的小技巧,监控网页所有动态标签创建的调用处
- SQLServer 创建自己的数据库
- Spring读书笔记——bean创建(下)
- Emacs之自动生成作者信息、创建时间、修改时间(八十一)
- Eclipse创建java webproject配置Tomacat和JDK
- e660. 用一组像素创建图像
- 【OpenCV 例程300篇】07. 图像的创建(np.zeros)
- 使用TortoiseGit(小乌龟)操作分支的创建