OSDN Git Service

[added] Can save PNG files with Hiero now.
authornathan.sweet <nathan.sweet@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Mon, 1 Nov 2010 01:56:01 +0000 (01:56 +0000)
committernathan.sweet <nathan.sweet@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Mon, 1 Nov 2010 01:56:01 +0000 (01:56 +0000)
extensions/hiero/src/com/badlogic/gdx/hiero/BMFontUtil.java

index f79b887..c488a1d 100644 (file)
@@ -9,10 +9,14 @@ import java.awt.font.GlyphVector;
 import java.awt.geom.AffineTransform;\r
 import java.awt.image.AffineTransformOp;\r
 import java.awt.image.BufferedImage;\r
+import java.awt.image.WritableRaster;\r
 import java.io.File;\r
 import java.io.FileOutputStream;\r
 import java.io.IOException;\r
 import java.io.PrintStream;\r
+import java.nio.ByteBuffer;\r
+import java.nio.ByteOrder;\r
+import java.nio.IntBuffer;\r
 import java.util.ArrayList;\r
 import java.util.HashMap;\r
 import java.util.Iterator;\r
@@ -22,8 +26,13 @@ import java.util.Map;
 import javax.imageio.ImageIO;\r
 import javax.swing.ImageIcon;\r
 \r
+import org.lwjgl.BufferUtils;\r
+import org.lwjgl.opengl.GL11;\r
+import org.lwjgl.opengl.GL12;\r
+\r
 import com.badlogic.gdx.Files.FileType;\r
 import com.badlogic.gdx.Gdx;\r
+import com.badlogic.gdx.graphics.Texture;\r
 import com.badlogic.gdx.hiero.unicodefont.Glyph;\r
 import com.badlogic.gdx.hiero.unicodefont.GlyphPage;\r
 import com.badlogic.gdx.hiero.unicodefont.UnicodeFont;\r
@@ -141,6 +150,12 @@ public class BMFontUtil {
                }\r
                out.close();\r
 \r
+               int width = unicodeFont.getGlyphPageWidth();\r
+               int height = unicodeFont.getGlyphPageHeight();\r
+               IntBuffer buffer = BufferUtils.createIntBuffer(width * height);\r
+               BufferedImage pageImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);\r
+               int[] row = new int[width];\r
+\r
                pageIndex = 0;\r
                for (Iterator pageIter = unicodeFont.getGlyphPages().iterator(); pageIter.hasNext();) {\r
                        GlyphPage page = (GlyphPage)pageIter.next();\r
@@ -149,24 +164,17 @@ public class BMFontUtil {
                                fileName = outputName + ".png";\r
                        else\r
                                fileName = outputName + (pageIndex + 1) + ".png";\r
-                       File imageOutputFile = new File(outputDir, fileName);\r
-                       FileOutputStream imageOutput = new FileOutputStream(imageOutputFile);\r
-                       try {\r
-                               // BOZO - Save texture to PNG.\r
-                               // saveImage(page.getTexture(), "png", imageOutput, true);\r
-                       } finally {\r
-                               imageOutput.close();\r
+\r
+                       page.getTexture().bind();\r
+                       buffer.clear();\r
+                       GL11.glGetTexImage(GL11.GL_TEXTURE_2D, 0, GL12.GL_BGRA, GL11.GL_UNSIGNED_BYTE, buffer);\r
+                       WritableRaster raster = pageImage.getRaster();\r
+                       for (int y = 0; y < height; y++) {\r
+                               buffer.get(row);\r
+                               raster.setDataElements(0, y, width, 1, row);\r
                        }\r
-                       // Flip output image.\r
-                       Image image = new ImageIcon(imageOutputFile.getAbsolutePath()).getImage();\r
-                       BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);\r
-                       Graphics g = bufferedImage.getGraphics();\r
-                       g.drawImage(image, 0, 0, null);\r
-                       AffineTransform tx = AffineTransform.getScaleInstance(1, -1);\r
-                       tx.translate(0, -image.getHeight(null));\r
-                       AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);\r
-                       bufferedImage = op.filter(bufferedImage, null);\r
-                       ImageIO.write(bufferedImage, "png", imageOutputFile);\r
+                       File imageOutputFile = new File(outputDir, fileName);\r
+                       ImageIO.write(pageImage, "png", imageOutputFile);\r
 \r
                        pageIndex++;\r
                }\r