2 * Copyright (c) 2003-2009 jMonkeyEngine
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 * <code>ImageUtils</code> is used to for various helper methods based on com.jme.image.Image.
36 * @author Tijl Houtbeckers
37 * @version $Id: ImageUtils.java,v 1.2 2007/02/05 16:41:23 nca Exp $
42 import java.nio.ByteBuffer;
44 import com.jme.image.Image;
45 import com.jme.system.JmeException;
46 import com.jme.util.geom.BufferUtils;
48 public class ImageUtils {
51 * This method converts between different Image formats. Right now it only
52 * converts RGB888 to RBGA8888, but in the future it might handle more
53 * formats, such as RGBA8888 to RGBA8888_DXT5.
56 * The source Image to convert from.
58 * The type of Image to convert to. Eg. Image.RGBA8888
59 * @return The newly created converted Image.
61 * @throws JmeException
62 * thrown is the conversion can not be done.
64 public static Image convert(Image source, Image.Format convertTo) throws JmeException {
68 if (source.getFormat() == Image.Format.RGB8)
69 return _RGB888_to_RGBA8888(source);
72 throw new JmeException("Can not convert to this image format yet ("
73 + source.getFormat() + " to " + convertTo + ")");
76 // conversion code by Tony Vera (Tora)
77 private static Image _RGB888_to_RGBA8888(Image rgb888) {
78 int size = rgb888.getWidth() * rgb888.getHeight() * 4;
80 ByteBuffer rgb = rgb888.getData(0);
82 ByteBuffer rgba8888 = BufferUtils.createByteBuffer(size);
84 for (int j = 0; j < size; j++) {
85 if ((j + 1) % 4 == 0) {
86 rgba8888.put((byte) 0xFF);
88 rgba8888.put(rgb.get());
91 return new Image(Image.Format.RGBA8, rgb888.getWidth(), rgb888.getHeight(), rgba8888);
94 public static java.awt.Image makeAwtImage(Image image) {
95 // if (image == null || image.getData() == null)
98 // int type = BufferedImage.TYPE_4BYTE_ABGR;
100 // switch (image.getType()) {
101 // case Image.RGBA8888:
102 // type = BufferedImage.TYPE_4BYTE_ABGR;
108 // BufferedImage img = new BufferedImage(image.getWidth(), image
109 // .getHeight(), type);
110 // img.getRaster().setDataElements(0, 0, image.getData());