1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
| #===============================================================================
# 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 |