じ☆ve冰风 发表于 2026-8-1 20:21:50

Screenshot Taker by Jet and Zeus81





Screenshot Taker
by Jet & Zeus81





Introduction

Jet’s screenshot saver, up from the ashes

Features

- Push-of-a-button screenshot taking
- Displays how long it took to take the screenshot
- Can save as .png OR .bmp
- .bmp files are instant, .png are smaller but a little slower.
- And more...

Screenshot





Script

http://pastebin.com/raw.php?i=0fpPC0Xm

Credit

Jet
Zeus81


Jet’sscript is made under this license:







                Code:       
#===============================================================================

# 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') + 8, 4)

    RtlMoveMemory_pi.call(a, a.unpack('L') + 16, 4)

    a.unpack('L')

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, .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(.pack('N'))

      write(chunk)

      write(.pack('N'))

      end

      file.write("\211PNG\r\n\32\n")

      file.write_chunk("IHDR#{.pack('N2C5')}")

      RtlMoveMemory_pi.call(data="\0"*(width*height*4), address, data.size)

      (width*height).times {|i| data = data.reverse!}

      deflate, null_char, w4 = Zlib::Deflate.new(9), "\0", width*4

      (height-1).downto(0) {|i| deflate << null_char << data}

      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




本贴来自国际rpgmaker官方论坛作者:GrandmaDeb处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/screenshot-taker-by-jet-and-zeus81.90182/
页: [1]
查看完整版本: Screenshot Taker by Jet and Zeus81