[ACE]Screenshot Taker

OP

Basil

Platinum User
Mensajes
2.961
Reacciones
338
Puntos
924
Ubicación
República independiente de Baja California
Screenshot Taker
-Toma Screenshots (capturas de pantalla) con una sola tecla.
-.png o .bmp
-El formato bmp es instantáneo, las .png son mas pequeñas pero toman más tiempo.
Creditos: Jet, Zeus81

Script:
Código:
#===============================================================================
# Screenshot Taker
# By Jet10985 (Jet)
# PNG and BMP saving code by: Zeus81
#===============================================================================
# This script will allow you to take screenshots of the current gamescreen
# with the push of a button
# This script has: 7 customization options.
#===============================================================================
# Overwritten Methods:
# None
#-------------------------------------------------------------------------------
# Aliased methods:
# Graphics: update
#===============================================================================
=begin
Notes:

All screenshots are saved in a folder in the game directory called "Screenshots"
and they are named sequentially, depending on how many screenshots are in
the folder already.
=end

module JetScreenshotTaker
  
  # Do you want to save the screenshot as a .bmp, or a .png?
  # .bmp is basically instant, and is 32-bit but the alpha channel is not
  # compatible with every image editing program.
  # .png is slightly slower but it is usually smaller than the .bmp
  # true is for .png, false if for .bmp
  SAVE_AS_PNG = true
  
  # Which button do you have to press to take a screenshot?
  SCREENSHOT_BUTTON = Input::F5
  
  # Do you want a pop-up window to appear when a screenshot has been taken?
  # The popup window will display how many seconds it took for the screenshot
  POPUP_SCREENSHOT_WINDOW = true
  
  # Would you like a sound effect played when a screenshot is taken?
  SCREENSHOT_SE = true
  
  # What SE would you like played?
  SCREENSHOT_SE_FILE = ""
  
  # Do you want to add a "Watermark" or some other image ontop of screenshots?
  WATERMARK = false
  
  # What is the name of the watermark image name?
  # This should be in the Pictures folder
  # Watermark image starts at (0, 0) which is top left, so make the image
  # screen-sized and place the contents accordingly.
  WATERMARK_IMAGE = "Watermark"
  
end

#===============================================================================
# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.
#===============================================================================

# Bitmap export v 3.0 by Zeus81
class Bitmap
  
  RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  
  def address
    RtlMoveMemory_pi.call(a = "\0" * 4, __id__ * 2 + 16, 4)
    RtlMoveMemory_pi.call(a, a.unpack('L')[0] + 8, 4)
    RtlMoveMemory_pi.call(a, a.unpack('L')[0] + 16, 4)
    a.unpack('L')[0]
  end
  
  def export(filename)
    jet_file_type = JetScreenshotTaker::SAVE_AS_PNG ? ".png" : ".bmp"
    Dir.mkdir("Screenshots") unless File.directory?("Screenshots")
    filename = "Screenshots/Screenshot #{Dir.entries("Screenshots").size - 1}#{jet_file_type}"
    file = File.open(filename, 'wb')
    case format=File.extname(filename)
    when '.bmp'
      data, size = String.new, width*height*4
      RtlMoveMemory_ip.call(data.__id__*2+8, [size,address].pack('L2'), 8)
      file.write(['BM',size+54,0,54,40,width,height,1,32,0,size,0,0,0,0].pack('a2L6S2L6'))
      file.write(data)
      RtlMoveMemory_ip.call(data.__id__*2+8, "\0"*8, 8)
    when '.png'
      def file.write_chunk(chunk)
        write([chunk.size-4].pack('N'))
        write(chunk)
        write([Zlib.crc32(chunk)].pack('N'))
      end
      file.write("\211PNG\r\n\32\n")
      file.write_chunk("IHDR#{[width,height,8,6,0,0,0].pack('N2C5')}")
      RtlMoveMemory_pi.call(data="\0"*(width*height*4), address, data.size)
      (width*height).times {|i| data[i<<=2,3] = data[i,3].reverse!}
      deflate, null_char, w4 = Zlib::Deflate.new(9), "\0", width*4
      (height-1).downto(0) {|i| deflate << null_char << data[i*w4,w4]}
      file.write_chunk("IDAT#{deflate.finish}")
      deflate.close
      file.write_chunk('IEND')
    when ''; print("Export format missing for '#{filename}'.")
    else     print("Export format '#{format}' not supported.")
    end
    file.close
  end
end

class << Graphics
  
  alias jet9991_update update unless $@
  def update(*args)
    jet9991_update(*args)
    if Input.trigger?(JetScreenshotTaker::SCREENSHOT_BUTTON)
      old_time = Time.now
      f = Graphics.snap_to_bitmap
      if JetScreenshotTaker::WATERMARK
        a = Cache.picture(JetScreenshotTaker::WATERMARK_IMAGE)
        f.blt(0, 0, a, a.rect)
      end
      f.export("Image")
      if JetScreenshotTaker::SCREENSHOT_SE
        RPG::SE.new(JetScreenshotTaker::SCREENSHOT_SE_FILE, 100, 100).play
      end
      if JetScreenshotTaker::POPUP_SCREENSHOT_WINDOW
        time = Time.now
        real_time = (time - old_time)
        elapsed_time = (real_time * 1000.0).to_i / 1000.0
        p "Screenshot taken: #{elapsed_time} seconds"
      end
    end
  end
end
 
Arriba Pie