`
keating
  • 浏览: 170058 次
  • 性别: Icon_minigender_1
  • 来自: weihai
社区版块
存档分类
最新评论

通过Image来构造一个BufferedImage

    博客分类:
  • Java
阅读更多
Creating a Buffered Image from an Image

http://www.exampledepot.com/egs/java.awt.image/Image2Buf.html


An Image object cannot be converted to a BufferedImage object. The closest equivalent is to create a buffered image and then draw the image on the buffered image. This example defines a method that does this.
   
// This method returns a buffered image with the contents of an image
    public static BufferedImage toBufferedImage(Image image) {
        if (image instanceof BufferedImage) {
            return (BufferedImage)image;
        }
    
        // This code ensures that all the pixels in the image are loaded
        image = new ImageIcon(image).getImage();
    
        // Determine if the image has transparent pixels; for this method's
        // implementation, see e661 Determining If an Image Has Transparent Pixels
        boolean hasAlpha = hasAlpha(image);
    
        // Create a buffered image with a format that's compatible with the screen
        BufferedImage bimage = null;
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        try {
            // Determine the type of transparency of the new buffered image
            int transparency = Transparency.OPAQUE;
            if (hasAlpha) {
                transparency = Transparency.BITMASK;
            }
    
            // Create the buffered image
            GraphicsDevice gs = ge.getDefaultScreenDevice();
            GraphicsConfiguration gc = gs.getDefaultConfiguration();
            bimage = gc.createCompatibleImage(
                image.getWidth(null), image.getHeight(null), transparency);
        } catch (HeadlessException e) {
            // The system does not have a screen
        }
    
        if (bimage == null) {
            // Create a buffered image using the default color model
            int type = BufferedImage.TYPE_INT_RGB;
            if (hasAlpha) {
                type = BufferedImage.TYPE_INT_ARGB;
            }
            bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
        }
    
        // Copy image to buffered image
        Graphics g = bimage.createGraphics();
    
        // Paint the image onto the buffered image
        g.drawImage(image, 0, 0, null);
        g.dispose();
    
        return bimage;
    }

//Determining If an Image Has Transparent Pixels

// This method returns true if the specified image has transparent pixels
    public static boolean hasAlpha(Image image) {
        // If buffered image, the color model is readily available
        if (image instanceof BufferedImage) {
            BufferedImage bimage = (BufferedImage)image;
            return bimage.getColorModel().hasAlpha();
        }
    
        // Use a pixel grabber to retrieve the image's color model;
        // grabbing a single pixel is usually sufficient
         PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
        try {
            pg.grabPixels();
        } catch (InterruptedException e) {
        }
    
        // Get the image's color model
        ColorModel cm = pg.getColorModel();
        return cm.hasAlpha();
    }

分享到:
评论
4 楼 iamfoolberg 2012-11-14  
好东西,正要使用:)
3 楼 keating 2010-09-15  
will.jiang 写道
资料非常有用,谢谢分享!

恩...记得是以前搜集到的,是个老外写的吧...我给转过来了
2 楼 will.jiang 2010-09-15  
资料非常有用,谢谢分享!
1 楼 keating 2009-09-02  
哇嘎...这么多浏览量,也没个回帖的!

相关推荐

    转换Image数据为byte数组

    2. **绘制图像到缓冲区**:接下来,利用`BufferedImage`的`getGraphics()`方法获取一个`Graphics`对象,然后使用该对象的`drawImage()`方法将原始`Image`对象绘制到缓冲图像上。 3. **释放图形资源**:完成绘制后,...

    将BufferedImage保存为BMP格式的文件

    以下是一个简化的示例代码,展示了如何使用Java将`BufferedImage`保存为BMP文件: ```java import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException...

    java image 处理

    你可以通过指定图像类型(如TYPE_INT_ARGB)来创建一个新的BufferedImage对象,然后使用其提供的方法进行像素级别的操作。 2. **ImageIO类**: `javax.imageio.ImageIO`类是用于读取和写入图像文件的核心类。你...

    html2image 0.9.jar 和 html2image2.0.1.jar jar包

    2. 创建HTML2Image对象:通过调用相关的构造函数创建一个HTML2Image实例,设置必要的参数,如HTML内容、输出图像的宽度和高度等。 3. 转换HTML:使用`generateImage()`或`generateImageToFile()`方法将HTML转换为...

    JAVA 3D动画演示

    动画中的一个帧被转换结构扩大四倍;分为两个步骤:第一步 提供的BufferedImage传给Java 3D的ImageComponent2D对象,然后传给Java 3D Texture2D. 区域的图像更新非常快:每秒更新25帧,要求结构更新25次.因此结构...

    如何给面板或窗体添加背景图片

    在Java编程中,给面板...此外,你提到的SQL2005和eclipse6.0可能是用于数据存储和开发环境,它们在实现这个功能中并不直接涉及,但对一个完整的应用程序来说,数据库连接和集成开发环境的使用也是不可或缺的部分。

    JFrame中加载图片

    `ImagePanel`接收一个`BufferedImage`对象作为构造函数参数,这个对象就是我们要在窗口中显示的图片。在`paintComponent()`方法中,我们首先调用`super.paintComponent(g)`以确保父类的绘图逻辑得到执行,接着如果...

    java生产文字图片(消除线段的锯齿状边缘)

    通过`new Font(String family, int style, int size)`可以创建一个新的字体对象,然后使用`Graphics2D`的`setFont(Font font)`方法来设置当前绘制使用的字体。 4. **文字绘制**: 使用`Graphics2D`的`drawString...

    java从图片缩放

    `BufferedImage`是`Image`的一个子类,提供了对像素的直接访问,因此更适合进行图像处理操作,如缩放。它有三个构造函数,可以根据需要创建具有不同颜色模型和样本深度的图像。 4. **缩放方法** 缩放图像通常有两...

    JAVA截屏代码

    提供了两个构造函数,第一个构造函数使用默认的文件名前缀和图片格式,第二个构造函数允许用户自定义文件名前缀和图片格式。 ##### 4. 截图方法 ```java public void snapShot() { try { // 创建一个...

    Java图形验证码.pdf

    这段代码创建了一个80x25像素的`BufferedImage`对象,设置了白色背景和黑色文本"HelloImage"。然后,它将图像保存为JPEG格式的文件。 生成随机字符串和将其绘制到图像上是验证码的核心部分。我们可以创建一个新的类...

    java 截屏截图

    通过`new Robot()`构造函数创建一个`Robot`实例,然后调用它的`createScreenCapture(Dimension dim)`方法,传入屏幕尺寸,即可获取屏幕快照。 4. **保存截图**: 获取到`BufferedImage`对象后,我们可以将其保存为...

    java 图片放大缩小

    - `Redraw(String, String, int, int)`:这个方法读取源文件的`Image`对象,然后创建一个新的`BufferedImage`,指定新的宽度和高度。这个方法中提供了三种不同的图像缩放算法: - `Image.SCALE_SMOOTH`:平滑缩放...

    用文字成图片的Bean

    例如,我们可以使用`BufferedImage`类来创建一个新的图像,使用`Graphics2D`类来绘制文本,而`ImageIO`类则用于保存生成的图像到磁盘。 以下是一个简单的JavaBean实现文字转图片的示例: ```java import java.awt....

    MemoryImageSource类用法

    它接受一个包含像素数据的数组,并通过 `ImageProducer` 接口将这些数据提供给消费者,如 `Canvas` 或 `BufferedImage`。它允许开发者动态地修改图像的像素值,这对于创建动画或者实时更新的图像非常有用。 ### 2. ...

    java图片百叶窗,java代码

    在这个例子中,我们创建了一个`BlindEffect`类,它接受一个`BufferedImage`对象作为构造函数参数。`paintComponent`方法用于绘制百叶窗效果,而定时器则控制百叶窗的打开速度。当用户单击窗口时,百叶窗动画开始。 ...

    Java Robot对象实现服务器屏幕远程监视.doc

    此外,`Robot`类的一个关键功能是`createScreenCapture()`方法,这个方法能够捕获屏幕的一部分或者整个屏幕的像素数据,并将其复制到一个`BufferedImage`对象中,便于进一步处理或保存为图像文件。 **2. 屏幕截取的...

    java实现验证码(源码)

    在`TestNum.java`这个文件中,很可能是实现了一个简单的数字验证码的类。可能的代码结构如下: ```java public class TestNum { private String code; // 验证码字符串 private BufferedImage image; // 验证码...

    java (bean) 生成图片

    2. **默认构造器**:至少有一个无参构造器用于实例化对象。 3. **事件处理**:支持事件监听和发布机制,使得组件之间可以进行交互。 **Java生成图片:** Java提供了一些核心库,如`java.awt`和`javax.imageio`,...

Global site tag (gtag.js) - Google Analytics