Плагин для Irfanview.
Формально просто конвертит scr в bmp, Flash не учитывыется. (код для PureBasic)
PHP код:
; scr to bmp plugin 4 irfanview
Global Dim color.l(15)
Global Dim cl.l(1)
Global hDIB.l
Global hl.l
Global Header.l = 54
Global *buf_from
ProcedureDLL.l scr2dib(file_name$)
color(0) = 4 | 2 << 8 | 4 << 16 | 255 << 24
color(1) = 180 | 2 << 8 | 4 << 16 | 255 << 24
color(2) = 4 | 2 << 8 | 180 << 16 | 255 << 24
color(3) = 180 | 2 << 8 | 180 << 16 | 255 << 24
color(4) = 4 | 178 << 8 | 4 << 16 | 255 << 24
color(5) = 180 | 178 << 8 | 4 << 16 | 255 << 24
color(6) = 4 | 178 << 8 | 180 << 16 | 255 << 24
color(7) = 180 | 178 << 8 | 180 << 16 | 255 << 24
color(8) = 4 | 2 << 8 | 4 << 16 | 255 << 24
color(9) = 252 | 2 << 8 | 4 << 16 | 255 << 24
color(10) = 4 | 2 << 8 | 252 << 16 | 255 << 24
color(11) = 252 | 2 << 8 | 252 << 16 | 255 << 24
color(12) = 4 | 254 << 8 | 4 << 16 | 255 << 24
color(13) = 252 | 254 << 8 | 4 << 16 | 255 << 24
color(14) = 4 | 254 << 8 | 252 << 16 | 255 << 24
color(15) = 252 | 254 << 8 | 252 << 16 | 255 << 24
*buf_from = AllocateMemory(6912)
ReadFile(0, file_name$)
ReadData(0, *buf_from, 6912)
CloseFile(0)
hDIB=GlobalAlloc_(#GHND,256*192*4+ Header)
If hDIB=0: ProcedureReturn #False: EndIf
*buf_to_1 = GlobalLock_(hDIB)
PokeS(*buf_to_1 + 0, "BM")
PokeL(*buf_to_1 + 2, 256*192*4+54)
PokeW(*buf_to_1 + 6, 0)
PokeW(*buf_to_1 + 8, 0)
PokeL(*buf_to_1 + 10, 54)
PokeL(*buf_to_1 + 14, 40)
PokeL(*buf_to_1 + 18, 256)
PokeL(*buf_to_1 + 22, -192)
PokeW(*buf_to_1 + 26, 1)
PokeW(*buf_to_1 + 28, 32)
For line.l = 0 To 191
For byte.l = 0 To 31
c.l = PeekB(*buf_from + 6144 + ((line >> 3) << 5) + byte)
cl(0) = color((c & %111) | ((c & %01000000) >> 3))
cl(1) = color(((c & %111000) >> 3) | ((c & %01000000) >> 3))
flash.l = (c & %10000000) >> 7
b.l = 1
For bit.l = 7 To 0 Step -1
If PeekB(*buf_from + hl + byte) & b = b: n=0: Else: n=1: EndIf
PokeL(*buf_to_1 + Header + (line * 1024) + (byte*8 + bit)*4, cl(n))
b << 1
Next bit
Next byte
l.l = hl & %11111111
h.l = hl >> 8
h + 1
If h & %111 <> 0: Goto end_hl: EndIf
l + 32
If l > 255: l & %11111111: Goto end_hl: EndIf
l & %11111111
h - 8
end_hl:
hl = l | (h << 8)
Next line
FreeMemory(*buf_from)
GlobalUnlock_(hDIB)
ProcedureReturn hDIB
EndProcedure