001 package net.minecraft.util; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.awt.image.BufferedImage; 006 import java.io.File; 007 import java.nio.IntBuffer; 008 import java.text.DateFormat; 009 import java.text.SimpleDateFormat; 010 import java.util.Date; 011 import javax.imageio.ImageIO; 012 import org.lwjgl.BufferUtils; 013 import org.lwjgl.opengl.GL11; 014 import org.lwjgl.opengl.GL12; 015 016 @SideOnly(Side.CLIENT) 017 public class ScreenShotHelper 018 { 019 private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); 020 private static IntBuffer field_74293_b; 021 private static int[] field_74294_c; 022 023 /** 024 * Takes a screenshot and saves it to the screenshots directory. Returns the filename of the screenshot. 025 */ 026 public static String saveScreenshot(File par0File, int par1, int par2) 027 { 028 return func_74292_a(par0File, (String)null, par1, par2); 029 } 030 031 public static String func_74292_a(File par0File, String par1Str, int par2, int par3) 032 { 033 try 034 { 035 File var4 = new File(par0File, "screenshots"); 036 var4.mkdir(); 037 int var5 = par2 * par3; 038 039 if (field_74293_b == null || field_74293_b.capacity() < var5) 040 { 041 field_74293_b = BufferUtils.createIntBuffer(var5); 042 field_74294_c = new int[var5]; 043 } 044 045 GL11.glPixelStorei(GL11.GL_PACK_ALIGNMENT, 1); 046 GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1); 047 field_74293_b.clear(); 048 GL11.glReadPixels(0, 0, par2, par3, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, field_74293_b); 049 field_74293_b.get(field_74294_c); 050 func_74289_a(field_74294_c, par2, par3); 051 BufferedImage var6 = new BufferedImage(par2, par3, 1); 052 var6.setRGB(0, 0, par2, par3, field_74294_c, 0, par2); 053 File var7; 054 055 if (par1Str == null) 056 { 057 var7 = func_74290_a(var4); 058 } 059 else 060 { 061 var7 = new File(var4, par1Str); 062 } 063 064 ImageIO.write(var6, "png", var7); 065 return "Saved screenshot as " + var7.getName(); 066 } 067 catch (Exception var8) 068 { 069 var8.printStackTrace(); 070 return "Failed to save: " + var8; 071 } 072 } 073 074 private static File func_74290_a(File par0File) 075 { 076 String var2 = dateFormat.format(new Date()).toString(); 077 int var3 = 1; 078 079 while (true) 080 { 081 File var1 = new File(par0File, var2 + (var3 == 1 ? "" : "_" + var3) + ".png"); 082 083 if (!var1.exists()) 084 { 085 return var1; 086 } 087 088 ++var3; 089 } 090 } 091 092 private static void func_74289_a(int[] par0ArrayOfInteger, int par1, int par2) 093 { 094 int[] var3 = new int[par1]; 095 int var4 = par2 / 2; 096 097 for (int var5 = 0; var5 < var4; ++var5) 098 { 099 System.arraycopy(par0ArrayOfInteger, var5 * par1, var3, 0, par1); 100 System.arraycopy(par0ArrayOfInteger, (par2 - 1 - var5) * par1, par0ArrayOfInteger, var5 * par1, par1); 101 System.arraycopy(var3, 0, par0ArrayOfInteger, (par2 - 1 - var5) * par1, par1); 102 } 103 } 104 }