|
Cheat Engine The Official Site of Cheat Engine
|
View previous topic :: View next topic |
Author |
Message |
DaSpamer Grandmaster Cheater Supreme Reputation: 52
Joined: 13 Sep 2011 Posts: 1578
|
Posted: Wed May 22, 2019 5:55 pm Post subject: decoding GIF to bitmap frames [script] |
|
|
Seen a post recently on how to animate an image.
So came up with this solution, by using Egor-Skriptunoff GIF decoder library (source https://github.com/Egor-Skriptunoff/pure_lua_GIF);
we're able to decode GIF image into nested table pixels.
And then we can encode it into bitmap format, using this function I wrote.
EDIT:
This is the whole script (gif decoder & bitmap encoder), source (contains also the example): https://pastebin.com/mX1f4FUM
Modified the extract gif, it should return now a table with each bitmap loaded into a stream and the gif object itself (to get information or what not check script source for more information).
Here's an example,
getting string from internet and supplying the data directly, and creating animation.
Code: | local _internet
function getImageString(url)
_internet = (_internet or getInternet());
return _internet.getURL(url);
end
local f = createForm();
f.autosize = true; -- auto size to image size
local i = createImage(f);
-- get gif information and extract it;
local gifString = getImageString('https://media.tenor.com/images/dfb11ec7ee94e551ceeac653ce636d21/tenor.gif')
bitmapStreams,gif = extractGIF(gifString);
i.width,i.height = gif.get_width_height(); -- set width && height
-- animate the image!
t = createTimer(f);
t.interval = gif.get_image_parameters().delay_in_ms; -- based on first frame delay
local id = 1;
t.onTimer = function(sender)
id = (id > #bitmapStreams and 1 or id);
local stream = bitmapStreams[id];
stream.position = 0;
i.Picture.loadFromStream(stream);
id = id + 1;
end |
(old - first script to extract frames and save locally)
Use the following script to extract a GIF image into bitmap frames, afterwards just save it as table file or as string (don't forget to encode it using base64), and use it as you wish, or just use this script on the go with threads.
preview:
Cannot post this script here cause of the darn cloudflare quick trigger, so have a pastebin url.
https://pastebin.com/NRvJkrY5
note: it contains an encoded GIF from the internet, change path at the bottom of the script.
Second edit:
Fixed syntax error;
Third edit:
Just encoded it using the CE function an added url to script source.
_________________
Last edited by DaSpamer on Thu May 23, 2019 10:04 am; edited 5 times in total |
|
Back to top |
|
|
Corroder Grandmaster Cheater Supreme Reputation: 75
Joined: 10 Apr 2015 Posts: 1667
|
Posted: Wed May 22, 2019 11:50 pm Post subject: |
|
|
Nice job mate,
Since I don't see base64 encoder function (think some users don't know about it), here is an addition:
Code: | path = "E://sample.gif"
file = io.open(path, "rb")
image = file:read("*a")
---- Convert image to base64 encode string
function createBase64romPicture(data)
local b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
return ((data:gsub('.', function(x)
local r,b='',x:byte()
for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
return r;
end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
if (#x < 6) then return '' end
local c=0
for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
return b:sub(c+1,c+1)
end)..({ '', '==', '=' })[#data%3+1])
end
bs64 = createBase64romPicture(image) --- creating base64 image
print(bs64)
img = tostring(bs64) |
_________________
Stealing Code From Stolen Code...
And Admit It.. Hmmm....Typically LOL |
|
Back to top |
|
|
DaSpamer Grandmaster Cheater Supreme Reputation: 52
Joined: 13 Sep 2011 Posts: 1578
|
Posted: Thu May 23, 2019 7:37 am Post subject: |
|
|
Well I supplied base64 decoding function (in the pastebin script) just to use an encoded sample gif in script.
Also edited the first post with whole source and animation example.
_________________
|
|
Back to top |
|
|
Corroder Grandmaster Cheater Supreme Reputation: 75
Joined: 10 Apr 2015 Posts: 1667
|
Posted: Thu May 23, 2019 9:04 am Post subject: |
|
|
Note :
Before the original script has encoded with CE Encoded function, it gives an error when trying to execute:
"105: attempt to index a nil value (upvalue 'K')"
Then, when trying to load gif file from local this by change:
Code: | local gifString = getImageString('https://media.tenor.com/images/dfb11ec7ee94e551ceeac653ce636d21/tenor.gif') |
change to
Code: | local gifString = 'E:\\sampe.gif' |
it gives an error-controlled by assert statement "wrong file format', while the sample.gif is really a gif file.
EDIT: This one works fine:
source: https://pastebin.com/mX1f4FUM
_________________
Stealing Code From Stolen Code...
And Admit It.. Hmmm....Typically LOL |
|
Back to top |
|
|
DaSpamer Grandmaster Cheater Supreme Reputation: 52
Joined: 13 Sep 2011 Posts: 1578
|
Posted: Thu May 23, 2019 10:09 am Post subject: |
|
|
Corroder wrote: | Note :
Before the original script has encoded with CE Encoded function, it gives an error when trying to execute:
"105: attempt to index a nil value (upvalue 'K')"
Then, when trying to load gif file from local this by change:
Code: | local gifString = getImageString('https://media.tenor.com/images/dfb11ec7ee94e551ceeac653ce636d21/tenor.gif') |
change to
Code: | local gifString = 'E:\\sampe.gif' |
it gives an error-controlled by assert statement "wrong file format', while the sample.gif is really a gif file.
EDIT: This one works fine:
source: https://pastebin.com/mX1f4FUM |
I minified using this site, https://mothereff.in/lua-minifier ; it generated a faulty script (first it didn't escape correctly rep function and also with a simple 'or' statement) as it is outdated, and removed the CE encoded function, better just to use pastebin so user could understand and use it freely.
About the second error, don't supply it path to gif, but rather the gif binary string itself (io.open, io.read), the error generated (called from gif decoding function) is because the given string was not a gif itself.
The example in the script fetches image from given url (as a binary string) and supplies it directly.
_________________
|
|
Back to top |
|
|
Corroder Grandmaster Cheater Supreme Reputation: 75
Joined: 10 Apr 2015 Posts: 1667
|
Posted: Thu May 23, 2019 11:26 am Post subject: |
|
|
Quote: | About the second error, don't supply it the path to gif, but rather the gif binary string itself (io.open, io.read), the error generated (called from gif decoding function) is because the given string was not a gif itself.
The example in the script fetches the image from given URL (as a binary string) and supplies it directly. |
Got it clearly and thanks
_________________
Stealing Code From Stolen Code...
And Admit It.. Hmmm....Typically LOL |
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 32
Joined: 16 Feb 2017 Posts: 1260
|
Posted: Fri May 24, 2019 12:23 pm Post subject: |
|
|
My master; Thanks for this work.
Form and Image size manually:
Code: | opposite = cheatEngineIs64Bit() and '32bit' or '64bit'
oppositeBinary = cheatEngineIs64Bit() and 'cheatengine-i386.exe'
or 'cheatengine-x86_64.exe'
if cheatEngineIs64Bit() then
function CEncode(encrypt)
decodeFunction(string.reverse(string.gsub(encrypt,'︷','e')))()
end
CEncode('z_%^O@1Zp(?]I_ZaNk:AVx:^nU5jocVn;c+zJrXJY?kl(_CS︷60vRchnC1ouNL:Z0n?]^KzH*0v32Vub)F]^q7xq^t)hp[ol[-;Sb)B$r[hF^/U}xzh4l6/Gm]L_q+p6fi$@9$u%Hyz%W09zoM3%?q{]Z^h.PHt#Cu(2#*SLsEWp#SkAWy$bFCIClw!i,:^+w[BPoBA/Z4Zy,M︷J*MTCJ@A5$P[*S]-Q2t︷OojxR/yD{;SzNb_VT9],d-ihfjic#n%mj192U#Up*MI[ThS?Prhj︷4?RMM{ytHmq8-i}3$d/]q#zKcmWC]A3Q[4m2OPcXVLfnp=*?.cK:t+jdV7=;D+1*Y@V=vYq)DU3yuRz]jhYS{lgJWyzwgv[@vu,3NIJ2Ny:sI}0[]lLBMrWn{26?:;/v^.yYv@Bb6U5Whv︷!5(6#sS06JpIoO6T){60aC0yXNA=XqHqvr8/0H!AOysQoI︷S0Y+uHYq;2[diI9,%JnhrC︷N,4Zk20)lhZp$_=+7DW5k%B7lODBI?yJc0t]0gQNaRdE2d@]*w9w_(]Im*Ua;tj}38_3woZm]hy6jUg2?QM.{k0?X#JHb$3A)VB︷Y=_?{x4YVcSi$zfo@f!,Xq*5B[uyTJVc/Q{JxmG$F,]#j]Y.gf=R*7TPtJzrL;ZK︷!nbG$Sc#x!ww_5s;Kif4#FI︷-3:(zGad8)=vc:qY/[nbB:KEn:b{tXp)Jz+PXwCgxax}ixH@knMlgK$;CKl:@J_^2TEh-t660qkRA2n(8-3N@N!$=v;bD4c?2@G{YwW(z=Amr:2c1k,ytP7$p3rBX︷:_JjJOgOAjw#huW@Q+G.o{c?ClgV;OVu+Bv.U^3)!!4M_P!5Lr-52s]%︷B.,,7z3niV]DBO:3+=rs9V-PLy7L︷D︷.zQD9srEoBA5K3a0ka$-Ym$,,YLoY-MJ[Pr*;sSmqV4_M5CDt]t(;A_1Och@JA;y;$8CkH^%71K#SDBWfRS)NA4(#8um]j*?1zCtgY7?y_(@H6Y;h6r/K4jklj*tZ%%m@kM0Ovk=qRVk@0jCS)v,b[*hH95}^r5[)#sl9{1k!yia*s/{@8vR*(Sn:7slP7/S!Ya)QCg4*KLzZKQLEW}1(A9m#yTo7H+pwuJNrP?m@Vm$?t9n;9[pYqiu[w8QEgQ.QAu+Ei3?hS(?7^aRyAo@@/mOOlv/41i?[Kq9g16v+bLA?X=W{kG#YBLb6g0A:56,9cPNwg#(R,-(PJ6a#$Lf7(K4?yJNt04ry#f(RFvDD{w@NdFm}(]m︷K49.9)ht5)6tw?l#),IZc5tdZh︷ia0axC:xy=b$IPXQxO_;︷5S1RFEZP#Wu)oWqkn?x(iq9G/LXg-5In+$︷-Qk0DzJHSN:Jq7Ru+W+)cMip#r9iB=My):D$1!fN9(qrRJzvr._NOH(JL/M+NB9iZ]S5m_{Rpx5}a;-i=qFqB+Q!dJWsqaL1dLXO9+2DpwP$K6d#hrVyR7nq!5Zi-kqEK)#ax9H-Zm:MtVRzTgX1ZfvmBNOi7^ARrDuuwJA^[X,Of(ru-%/K4T{kWFnC=$n#DVSA2︷(ZW)DDpVWo*z[EHCb.Yv.tNp9(k}8PbrA?=j8QyM+tI︷[r$WFA33m1r1}/;/,2Hto{7tlai[F3HGU8%$vN[P_y3A8JZ8$*C:1JL7NOAszh9$./_3p=#G=8Kp]6%HjvWl-R{GR4F︷@5/MPFYmq3(97TC3NkIhUdux%#jvE}aUAR}3oQE1vtyj$Hh:U;9S)^T#G%GT-om;gwVcWOH{.4+:/bu0qT4(h..x[$zyx59Sm3:-Kt!JD*n7QJxti09=E;I(rG(cC9xmGSXFvFEq^tAgP.z:.Bnx9vD?Ey9?︷3/r7.B-tVH${o2OCX︷:dMn+!NZc};6(yD?gKrb==X/(UPBXfY#/!@-;7b[fI2TDb@3W_MkBgua_*GtnkGM8z!Hk4-2u[v}*yn7+p[LR9BTK(hw[4%(Hpc1Pqt/MtR-#︷SMQ3xPG=!f3HDkHD2/=w:1JW[(K@?zD)UANDR-o_@{bk!YjS︷!!-xa5I(g5c=SU()_EZdGu;g5Moz$9DnDK%1YnW*U[n#=G8bq5Q3lFrY︷?(.vqrjVl*=QQ[85Ogn3yX+R4.Qml_pvQnffjdY?-TmGv8R10iL)a:Rp(T,8m@_8ziq_uTxTpYz2qPEP[d?j(}?v]v︷4K$LC^JS{i58p^3P#Bv3zB.{L2X0b@UI8dTzB]([email protected]_afkyB26BMp4!=CS*M}5s,0hI2︷%V.f?C#WMTO[Vd︷AKy5?hmfkT/Bi]lND7(E5=2$wx1l9F])SOf#/P;)tV6*XXbL_vPgilT[zG2FUiC-(Ws^DnL3u(MF_]q)oQ:DW2;P4]9suV︷*GD8ft/Ju+9w/}NWSw+2[l}PP6]v8E#P0/RW!EutnU@-MGJRmh],C{Ys}Zw[︷#ZXD(w]X8Ac{1?L5hSyrtVnx(WYqlDZJQ4oc]vdTPQoaRq5(7︷;Habd?J[[,3i/]6cgY:wjywT](;y8hffHi_*5Z^q?︷nN}w5N#BW(003_w,MhowilPG(QbykBonX?[abgoV?.}8w^:*BmDwmQFL;GZnH5V@r0O$#)/WW^︷[O3,/AVPKjFY],ET,CmS65dNCpw9WHT%DFTKwvgkZ4w4SzYMVFhGUN/UU$YkQuH[DOVjCpu%g^[(9S:c{fhqG_i?v@nKxxS+.?B.5N!pwFR_{^y50j%wtcEAph#$SdJZDuXb9Q{=7(!_StXR{︷uoCcrmgzc)/]q:Cc6-93=W30s$=hPMqzgh!+pb.7aT7cV5:_+TF︷R80s_-h)f!*$P![P8qJ-74SI7%GW︷o2OYlmI1/rOWMBzcbs_Ea?y3T@MTf@9ii!tk}rv0Tndzx?sJstDmf7nC︷Fm,oa+ymn,iF=??jkxCv@4pNY}R[_{O0AL[15=sla6A3{mD]9w_OQ︷!LyU+l$sIkJx{D_udRyDb(5UxdkYygkRf#DBTPJ^hHMFl8}︷cAoBR+PDdUXW%ysQK=IrWff[Zib$T#%_/Xz;#X)=ZsadPcq]/X+}-}EnD0RL^ZT4HxLU8)sP-63yqQ)/XTj4wR-︷bU3D=V7w︷QVSos/*YIs}E),tRw^CZ︷3,(yD$wSCyYGj}*vb;QUv628cC︷UP#j[B*)}rj-PSB!HoX.OQl7!5N+=M-2m]R4)4Dr(/+#;as{KBrfxnUTfvTv;/P[XBEnE5(O8X5bZ^!︷Q+$o%PR-f8$btI5itT=!%KkS:VEEo^M0EvIkyyf]iTQz_zIL;q,.vp@yE(DP2LgB@Oxo]]b(Tw,?yG$poGk+q[{!9FG9h2ldW_uYRHKO(f+{s(a@_Q_sXb7_xLR︷g,?7Ak9Jl951W/VDJX]6C%,_[1R)XDW4h)THTxX-I:XaO06?gQGHhy0QNdso]#pG#3J6@]Y[cj[sxmcNWHjAt[gu1}PWV7EG,bOl@;1ojDX1f1VFyYo3NmL+Q(5ghaa︷fXWEw:K-Fx[tgB!sbWO{.bz:U6!(Z^/Y,W8{ryIamT0+zVRXad{Ep,D{P8H)8f7o#B!]nDO/L$]!UxT.w/#L]D7d.?p2(DR9f!:w^Ju+sqq=f[!V?zQzhJOO#vp!6jAc3_]SAJot}Gsg]J0?Fx}3R)mwRosmV4urntnUq/1Uw!W!HF2xHF1w69IVxhJH7^:;Ga[TGjOYjTKuFVLEg8uc.?=l3N[?I81VA9%+8y8OF4:U1xW@+=X9F]2n*r(n+;}NolsQjPcYcY)vJq:?Sk+#m#b^lj-=CZRrW50KtP︷l︷kHR?pN4w-h/OGT3Ko_AEb*iNPaP︷X!X9sGl7JsV=k-As-W^Rn/LS^BhuP(/0R3%==*?TZ303ALo!ln/C8:BnDw.w9,_JzMXj:wg@8YE)8,/h2H%.FLNE%h1NUn_jP8Gt81OpVaV;tlR[3IxU$jfiCq$GPcQ@CFR:5PC*yxr$#KLJ?N{*my)WkziO.CV9sGEuUR84ucOBz*n9qUJO}l@E_Na)#3cPdlX+iLN)V@HUj,2u*@fW7RH*n-aUn}91ZG^F=ap(Y32-jDQm=++C[lbAdfA=@)#[9%v^6z75EOs/y+yAQyE,%XEs{.bqgdw;nRVnVKych3D11DQ;#mZa:^9]VJ3*]wp2_︷LC/hUA,RVz?-︷7I/P++y-Rd{HNK.FJ:.X:s9=pK%T1Hk}:r7S$Z=V*I48RAxghWmc(i}RI7l+U+^X5x^[s,T7EmK$t{h?,bB/-)^tO9pN24{l#(Yd!(105J1t1P,J1p%+yBng^vSUo6{1=A*@ShBC[(QL)00ZPzZjA3nvvMV=tsCHyLF][iLdk0g]?]MLd![_!}+9fZ:#cvgjlGKAdBATYl.RrRsaG3I:fU!Tu1/OxIQh4{XV?Xm^bl1LH9lSru9zA{hJRb=I]$?$cW[U(/7[$qJ}wL]B/z)9]KyVn-H)a1D0CZFhFCNgLV=$:KRu$P!RGcvf#wC=Bk:42aTzlv@/t:pd#ha.Mh;wDL!c?:︷%cxYr*!An)V8ME5{?1L/pUk5a#Wcm(tx8ka(P9-=mPu[nH%nl28︷)shVgj_0+6cXhHm-y*#gFi*wsTY?I]%QG*B({ot5m8Hlbwh0D(g73M@7o$,(/qEBk︷-F*!m*2l0*EClIa?@)Zr:︷/BZxJCH(Cg_iZ{9ga9IwPy0pbsf8PNl(PzoDlA8l5=27QSVpFPyY];-wa2BBWD?+*79wt︷#2L4a:/X2ihH,Vpa5︷ySDQJ.sgNuFgRnLU4vaPr@NQGA[aJJdRS7l2fMg@QNmX5g,Pp-F;w(Oo11?IbkSlp09uWgG-Ls+Z{Rl^[]!-r{=:=;p75Rp6N!u0LBD*2tu4RNbv{ss%:1:$C@Q$︷9PfYccBft#v+cngL23/S.dBZh!SVxz*ngnI(aA-dp_SLHQtoYE?SbX1%XlcUiN^]N}NruO-E︷^mj:5j)J%YM8Ev?xs︷LK30[2)wUfQw)Ng^[b6KL.cFl:N=4Wsu#=kgz:a︷=K@}m:1lxc_q2MlLBLA}Hh*.7=XGt2CKGkN!S$9W}A,}IwER_#G7[{H1#7mP@)3YFEl]9__xPn0@Q,AY=;wn3CcdEPPNqr##1(y3gyQJv)]X279IPrU.ov!qy+]2︷Br-b!){h#L(cj@W?CLE[-)︷+O.8u(n@./n#Ri2CUask]G0X:bO^^bLKvELB!K:g3POlsywRDqIAF7U6MV:iX9!Bi}JSQG)5ztJ8]4-cT{3fY(]E!8A]d4KQ^dIl{k+fO+68WVH3in5FP((5uI74PxOTo9BJv0H_)w,P!*Q+.cD_*9SFht*Ef#J^itO@^JD5Co]Sy$Zw}t6]ua#xzADXD(=.ETXuVg*4%0]Gkx_FT]ZJJ6pU3w{[l=#N$C-X-Z*R;gzYvTQ^!I1s]ssFmKq1Pfu+N}(@UBnYKhElHnksIMG)#q0rAoCt[BURcIfrQrPl-C)K9^/UvJfH_01cn!Y7B^iHF5qi9Z6hJ52xXj)m?AvCHI9]OS:U*;iULgcD9=s,CQn-c')
else
function CEncode(encrypt)
decodeFunction(string.reverse(string.gsub(encrypt,'︷','e')))()
end
CEncode('X7D7t95aa7(?$ZSB?c{pny)t(J:vkp_-40*duf5Rs(g2S;yP./8_Xy6E6rhc;T︷1KMJQ(mfM}LmR#:}{0)a;D=JbUGmK%#8I^@2^hzE+UG:]?WmKJ}(=@[-0N_[Y-p(g*+p(s5NYyrhEF/4]kl:3Gdkz]zKr,XDTln︷E[c,+xC9@iO71z=#ouY%_OsjxMg*U-j=KOW}=A#n*d9%pgE/.f;qH;Y^4xkJnBN7[︷q!wrEwq4x8NT4EXq=KgtioXqCYf]J@s7qDr8n2Gw@O*}n6jjx:VA-nAhF!EJ;UlI#Ad(1c1gb:VC6,%HXjI︷?h︷z83!NFh*C1JD_cl)oSplr[y{zLDiOZX!4TjtIddK/3udvh;o4R,yQ1QLz-PMN︷+o%fjL#3Y,uQI4XUvT*V%czTdxQ/2-Y_{HdU3S6uJXs3.︷xYU2GJ6MRv}%*6+CjE=1}E︷cIsDu^sG^).sFSw4EDt.n(ko9!L︷vl[Nb;CmX})aOb5352,7nUd7{cYVUBAy=T%hE(_0UYgumWO4-4_,,5_zVm6PVrC*+GGBS0tY[n?2NxBWnDdpV?r4:O9K}78#C]-;=ON.=6CdJl8M6dlr5BJ8EotW!_(+K*xlTW7UgK?{(XWz-q#Xf/HtpSMXCQ36Wq_%-7OBk%FUJg}z3Z..(WCB-u*Yb?F?@FvVbpwMQ;^Z9YC^*jxZ3KvB]y6k*YogVarrTmfKZf{91Bg=W$KiWrIKuREPnMK-6=X0m=.kuaC56@=yS(%x7xwU)Q$2^!u1F{pg2mI%UB0xMkr6RzFKqix7Xg;cI+w-aU*xt(/*amk2WKBc:qwL%S@#/rMvH=D!KGQ%;z=O%D3q{@a+_jt:Jvf.X(D1:S7Vmoo%iEYC/YkO]};N8K6[{^:zaPZk3ZFB4-M:B52:2p/2g8[UAu)o6i!+xGp4Y7IQ))zX}UZ7]GF$+L4cw3h@qo{i,=Zj,oI3gxq_b$Jq,hK-9iFP@vbw*M!(gn;OH?*IcfUzdkaD3aS2:th+_+ZTT89cQ#O$nY@_@w*RUOo[T:2q7RE%o,*7NoHF*m0p5,)LjDu3dCW6Vps$$TwKpH5@;GtNI︷V(wbysN8A3}1)/YFj︷z8Jo.[d7{?*F(U+n26r7gXUmx+9An)SIzA9;sNAHydL(xbx,@00QKz$%9︷y3b:HMJ{$︷)︷^cf8)1Vrmodf%f0}zxy]%o*g^Uop}a2N1auhJ+-Q,*Xsi9w6SnAiCXvRL@s}}NEg05)uMGAlvt︷8︷wpCH;a$DlTu_D8G/t6i?:R/Jl6S-ZBao3zYjD-;O]GAG$of3X(M)DW:lDlHP64wn,J5zEbsZZYMvc;OSG(/F:aH57DMDFkhj8];p{;sX8;3YKdlOSV@O[]#c}!NWd!vn!#wMhF-cPC*)UCB@ij?t3-E*#F;$PZ50[CN?R,c?S0G$Xj^=NcS+3NO9dN![/WVuWkx/jkSgt(P5qfc1-Yf@Lg@cJLf4N6#(F︷_KiKStr_MLy*1r{5hQk;O0J=(︷#f:PJs/Yh+d8Ou(:b3p%.R:?Qt6u,D4I︷wg/!oS5F]mlyM(HB/!HW5zOKIo5MOYCvG{P!}$Iw/u=-I_P9:^.A9@pS]KLov+%8I.n[pycOIMdC)CHfRh8,sC1Y-j1︷y*hHoSu4;$cI-;.RsSILXKFu!:h5NKf#p︷*21qY$?Pv=96?z#VmK(OSav-@yTJHav5COLyVspwf@CBNQktqr]@0#Wg0^j8n+*PcED︷y[.tYwa3TA(rYMB0S5jGgMhU3.^YdG!-7.WOQ-=@%Io:()qyV{(a8hUx-.T!48g=}cZ︷h8=5;Y/:1EHLDp{Xg@-N/5BQ#d!]L.KcbiTYr7;6rZITNsDgU;2-Qkur[qW%b8J(?KbKmAbPRL9qW!$x2lXv6VRrS:;p!iQi9J[;y3w)W7;g]mI}hWLg6Tjh8du2H:4[?!t(.TI5:GGK(4tf:0fW58?8ZO3f3d9WO$B{T}H.{7r[Pv︷^u+{]y*23$J6(+w2S%DE2A=R32iqE8z?xSA;0j9T{(4XugODc$X}F8SU5vn{gp,@$8GJFp)h(}t/0c!C?i/LT6!︷1=8$EU0?AElmzXkS0gy.UGU[6qDu#v}.UopIt[tEmf(:youp8v7Q{yxxX!GAZA5^)zVZ?P4-.=@/vHwnH,o]?g;y7dd#+pPo35zr)fDh1^5HpU(dVhcmOj(r,U{o?O9VhQMUnA7ZMA?$W+rYfYdZl=#L{Vpo@F*+EMa!6cCbM2Q[%UOBvDw^jz^rf:-#/4$sVP^07%j[1xM.=34MG,0njEPUQ4Qk!Z^Iw_5B{XgL3%Da!wgq;XmYAUkGAuUMwwn]mWmXRF8rwvRO*5!)JH$Xc,xw:wA7paT_-1%_Vv-zipSkcJ2AWF@COOo0;nSg]0jlybzpsv[N,L+EU/SV6I.wCH]4/:]VS;!rIw;dvJ=bZj#TJfBKU:f4pxv]+RTJjP+LCbMcYxf9p7$b}0ryUDZ:?Ht9hyj#o/V+w@YqOs=]cVR={s{+D]YWQX31jbEGQq_Tdh?{UA1kL2.;SO(]F{pN[WNhPmsbQmB$J.f(G︷BZ9Sf(u{g}%;HnDgNR%f-jMC?xS︷︷ptlaYdU:9?tp0C79E%yIUs#dwSiSsgX*m(3!y8[(o1!#zcz[?0-;UnR85_h-9W$XEGPCW6Fi%}otoGC9#jC}g[$z@C={Q7:!ncyfii_Mcyg{wUTW8S;Y[VlWIbAZVyTiJ^n$+IF*%F1︷LxXpM=c{j40m8vmFqSpq︷UoZs=7ISv}cJ(g?pWVivxZ)tHW2U-x:wgS]UDf30jU+Rxo(X7.@^U%XyMNbb@^G:CoGR:dt5/RDMXNRjwBM8E)MIt)Mp7]QwAXOzH]uI30l:sFUfL((M(hCAl9g,6Sgf︷ng{#X)[_Abh)%$,cr51Hk*N7S=D8!X.hnPIc3rVfzT@SnXBF-︷KI^b-x6h!%?a.ah-b9%V{3%@a9!i;(z$s+Tb.lNI,.]b-X[R[QW5W6;=oSMq)1hk#27,3aOFw$PXFq7O%xS2B?NFZI#U8PC;hEf6Cpq43yDbQqjy:-#[8L/X7ro^d779GS%9OSafXP2tuQ3})n︷h1Uxq?,(L0:P).;g-4bX-dus3;Sc.$g%l/FaTlZLMNu}@nR6_%zGTv#ot;4K155]bGJ[t1pQAEV;)P)ht]^}}R8Th?nF3Eb-QH{,UUj^o?︷A{CH3,Zt-gsW0Zhs%g+j/BQA@D%r}+gUnJzrV}}JYhsbyLVxN]Up^gS*0GUV$8Ey47k?=yc^6r6O4!/d)YDLVX1i3RJ9/J.qC}U0=N[[IJ1WWoiz0s}QH}II*ZO^GUEn7N*N4H%m]6*8,RAUaZ.Wd.ook#]:lb{VJ[Cf*!A7_iWX@CdzDnMWowU*s@A6;YX}W$h,mVVCZpQ*tGAOO8fUvMN?Vu9/v!/$tTEf?dc,@GM1u$s_4MlpdR18G[mU{#/783^I38P)f*!3*Jg]pkL+@S^Kup(ozY:bR}SC[5,Szp7Fd.XE]Ckdkv**Z$W/@_!oPxKff;lMZ@%m/Z#t-jRs︷{u$)8d.7?0;uW4G︷_$=y%2oF^MVgX76g?gWXr?jUwg[XtY9MR$Iz0oiVfY]==TB-#%︷]%R7AI=!Kgj$iZs.Jssk43$z+L53Y%H%covoL$tw@$*qtka(M[t︷AWbL_;IcYyp]aOX3ArAR[.B@!R(k^+m:D1}hnzc{*it*N:*5p.nD;}0-a-94[V)R!;Ey*EPOOihC;Er(Aa*}q!QT;uT#nVwq5KJtPf{Dk6_o_uZFy--h_.TiAf^dkCp,VU︷@2_Q8WzTEH]^fd/]5KSh[fYrD,h^AdJ]︷XxQ]Run7f%{u/qtFTh[{LH!6L=!)0)TEPE]0WEM6{/A-BF@Mpf3*EBD4CsHaXROG!uR52:C(J7FYxzCa$sD2t_G,QYAI3WKH/hFqtALVg;I2XV/p;6TX;89lu%+H!wY@MK=!(t[gP-bo1HQ_L/6CZx_mi}ZkKX+x2fM1Rd=BW{(k)rqDm06)BRS1,A0$k#9/.V$VM%$Kv1t1i5iZ*Z=a]+PAm+/0cv6LW.GBb=Bd[+︷gC-D7VlKaQ#x4}.L=v(A/$)mr_@1czaM/F}Hg1Qu_s,C+p8hkCW︷VM,Uu8mICwAhwPP}jkdpr8NJ({$=naEkRSG9^iA%tz^}*YcvU:+Clf6EG$bv7xqk6.FIK)PuvoxRa.9=+iw^2.p+@*xZTky[hRzyfi}:DY,;;;dQhK,n:g^Zw}9^c^/#hQxQ*(hRg2lU^Xm,AILJWZFU3%rYVSYfD2,Wg0luYw]l.OY}[fE#fv︷mt︷sY]4:7wd3!I-!=,]k#=8(w{;/FVpD-:*GaN*$0S!l]@ioK=$1rh@,Q0TGDs?9/]c#+?U!7KDF4^hmYV*9!=+Ln[VwLv_i$hSc)^r8FZw{9D)u%dqu:z#3L-(L]%)5%o$Q)ndG2YbTl;jByUvCd9_3yzM=89a!k1WHzZ:zXV^KiWrjzsD:t4uL+XBPOBV6KM4np,0n-!MR︷1cVKu(/3@B*g*),MS:2#s0CRb@y[N2Y!^}HxTFtny*MtAx8K{COK$Jx=g^]iy3Tb0MkL}xjo^EMU(kM)2nZg;K$iI?L2C[aGM]︷400PN︷9zBpiuh4xRHchwN3H$G)#wGR%PV@Bf$b(Abvp?%]p4sDE/A(!BOY?}/hT-M[fLtr8]h3tDb$oPS#[*K0czDJYVslOXYSW{[va^0DQkD-+Kjja.SX+y#z.^)n:NPr3Ck98#r5p?Q6y62K:ObZPom]9DCZ8wg=TjB?o6m︷y5TUD︷caZ,iQF^E#ZPGsxv7t81G:︷D{.AsBp[HIaU7AQsvkI!tQBbpJOGJ!Q/z5U$;B)qLjRw+EoLt45,p#;.6_6%dd=9REP^Rs)d]WXk+0%?Mx!BU4I*XS[$n#1c-(n4bcuaGA*!I0︷bN)2VlUd#y;/Ab$-.%(4@4p(aRzP{ld)jlz2Gy!+y1lU{qlt%G;kyMq_u5v4r=b3wxVbg0r︷ZR=a7TK=s28u!7z=d+qGz}i$pmnZ!TdN]m]P4GjCmiXs_1wnciXl7A%tScGrRm%25V︷@q?P8YcwAg@Ax839Uf︷LH/1Onf]Dd_G1NP$EJU*Hv6TdDEvT+k9164R?GibB-xRry@I}*c/.OS8KOC8O6U38u-TLxL8x(M48oTmxxbd2-Bu=Tm@FW@P+rWIYktaG8aMfw/kHy7G9(%︷Ya^Sv70i7c^D.TI?M1Qmul-PNas=)v+br(Jxl1+50KbU%(IH$5B8LkcJ-SavR8$rb@1p=XV2DK1,bO[8HfE#︷Sa6lgZv+-xw0F}@,NXhKV$OBfFcFa[mrzX︷FtR/H54Df:;XqI$/︷Amu(bAD^[email protected]^V︷)Xj#,8fu0Cct=A]ylck%RmKI42]^-0Vw[b6mP@i)aM_lGl@J/f)Y],iV#;^(yMP]cf]s5[Ak2RxSsx?DzR%VtpoBNGYX[pKr?SF,{npNj8770/dBA!o︷!2wM5u︷0RQ︷F(T:pOPL?5u(N8Q@qA-*mdENG(%Pn-c')
end
local _internet
function getImageString(url)
_internet = (_internet or getInternet());
return _internet.getURL(url);
end
local f = createForm();
f.width,f.height = 220,220
local i = createImage(f);
i.width,i.height = 220,220
local gifString = getImageString('https://media.tenor.com/images/dfb11ec7ee94e551ceeac653ce636d21/tenor.gif')
bitmapStreams,gif = extractGIF(gifString);
-- animate the image!
t = createTimer(f);
t.interval = gif.get_image_parameters().delay_in_ms; -- based on first frame delay
local id = 1;
t.onTimer = function(sender)
id = (id > #bitmapStreams and 1 or id);
local stream = bitmapStreams[id];
stream.position = 0;
i.Picture.loadFromStream(stream);
id = id + 1;
end |
Such studies; More beautiful with CE and Lua.
I hope more will come.
Again Thanks. (And +1)
And Video is promising to show.
Hopefully a work for the video image begins.
_________________
|
|
Back to top |
|
|
DaSpamer Grandmaster Cheater Supreme Reputation: 52
Joined: 13 Sep 2011 Posts: 1578
|
Posted: Fri May 24, 2019 3:08 pm Post subject: |
|
|
Using this script able to include sort gif, to animate hacks effects, not recommended to try and display a 'short video', as it decodes each frame and frame into a bitmap object, not memory/performance efficient at all, can get memory usage from several mbs to hundreds of mb for a simple gif!
_________________
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|