OSDN Git Service

Set optimal mime types and executable settings.
[mikumikustudio/MikuMikuStudio.git] / src / com / jme / util / ImageUtils.java
1 /*
2  * Copyright (c) 2003-2009 jMonkeyEngine
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
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.
15  *
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.
19  *
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.
31  */
32
33 /**
34  * <code>ImageUtils</code> is used to for various helper methods based on com.jme.image.Image.
35  * 
36  * @author Tijl Houtbeckers
37  * @version $Id: ImageUtils.java,v 1.2 2007/02/05 16:41:23 nca Exp $
38  */
39
40 package com.jme.util;
41
42 import java.nio.ByteBuffer;
43
44 import com.jme.image.Image;
45 import com.jme.system.JmeException;
46 import com.jme.util.geom.BufferUtils;
47
48 public class ImageUtils {
49
50         /**
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.
54          * 
55          * @param source
56          *            The source Image to convert from.
57          * @param convertTo
58          *            The type of Image to convert to. Eg. Image.RGBA8888
59          * @return The newly created converted Image.
60          * 
61          * @throws JmeException
62          *             thrown is the conversion can not be done.
63          */
64         public static Image convert(Image source, Image.Format convertTo) throws JmeException {
65
66                 switch (convertTo) {
67                 case RGBA8:
68                         if (source.getFormat() == Image.Format.RGB8)
69                                 return _RGB888_to_RGBA8888(source);
70                         break;
71                 }
72                 throw new JmeException("Can not convert to this image format yet (" 
73                                 + source.getFormat() + " to " + convertTo       + ")");
74         }
75
76         // conversion code by Tony Vera (Tora)
77         private static Image _RGB888_to_RGBA8888(Image rgb888) {
78                 int size = rgb888.getWidth() * rgb888.getHeight() * 4;
79
80                 ByteBuffer rgb = rgb888.getData(0);
81
82                 ByteBuffer rgba8888 = BufferUtils.createByteBuffer(size);
83                 rgb.rewind();
84                 for (int j = 0; j < size; j++) {
85                         if ((j + 1) % 4 == 0) {
86                                 rgba8888.put((byte) 0xFF);
87                         } else {
88                                 rgba8888.put(rgb.get());
89                         }
90                 }
91                 return new Image(Image.Format.RGBA8, rgb888.getWidth(), rgb888.getHeight(), rgba8888);
92         }
93
94     public static java.awt.Image makeAwtImage(Image image) {
95 //        if (image == null || image.getData() == null)
96             return null;
97 //
98 //        int type = BufferedImage.TYPE_4BYTE_ABGR;
99 //
100 //        switch (image.getType()) {
101 //            case Image.RGBA8888:
102 //                type = BufferedImage.TYPE_4BYTE_ABGR;
103 //                break;
104 //            default:
105 //                return null;
106 //        }
107 //
108 //        BufferedImage img = new BufferedImage(image.getWidth(), image
109 //                .getHeight(), type);
110 //        img.getRaster().setDataElements(0, 0, image.getData());
111 //
112 //        return img;
113     }
114 }