PureBasic PNG decoder and UpdateLayeredWindow_()

Share your advanced PureBasic knowledge/code with the community.
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

PureBasic PNG decoder and UpdateLayeredWindow_()

Post by netmaestro »

UpdateLayeredWindow can be used with the PureBasic PNG decoder without problems, with one caveat: The API expects a premultiplied image, which it doesn't get from UsePNGImageDecoder(). This is easily overcome by premultiplying the image before you use it:

Code: Select all

; Requires PB 5.10

Declare PreMultiply(image)

UsePNGImageDecoder()
CatchImage(0, ?PicPak, 6630)

PreMultiply(0) ;Comment this line to see result of not premultiplying 

OpenWindow(0,0,0,ImageWidth(0),ImageHeight(0),"",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
SetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE, GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE)|#WS_EX_LAYERED|#WS_EX_TOOLWINDOW)

hDC = StartDrawing(ImageOutput(0)) 
  With sz.SIZE
    \cx = ImageWidth(0)
    \cy = ImageHeight(0)
  EndWith
  With BlendMode.BLENDFUNCTION 
    \SourceConstantAlpha = 255 
    \AlphaFormat = 1
  EndWith
  UpdateLayeredWindow_(WindowID(0),0,0,@sz,hDC,@ContextOffset.POINT,0,@BlendMode,2)
StopDrawing() 

Repeat
  ev=WaitWindowEvent()
  Select ev
    Case #WM_LBUTTONDOWN
      SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
    Case #PB_Event_RightClick
      CloseWindow(0)
      End
    EndSelect
Until ev = #PB_Event_CloseWindow

Procedure PreMultiply(image)
  StartDrawing(ImageOutput(image))
    DrawingMode(#PB_2DDrawing_AllChannels)
    For j=0 To ImageHeight(image)-1
      For i=0 To ImageWidth(image)-1
        color = Point(i,j)
        Plot(i,j, RGBA(Red(color)   & $FF * Alpha(color) & $FF / $FF,
                       Green(color) & $FF * Alpha(color) & $FF / $FF,
                       Blue(color)  & $FF * Alpha(color) & $FF / $FF,
                       Alpha(color)))
      Next
    Next
  StopDrawing()
EndProcedure

DataSection
  PicPak:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$4000000040000000,$7169AA0000000608,$59487009000000DE,$0E0000C40E000073,
         $00001B0E2B9501C4,$6850504343694F0A,$20706F68736F746F,$666F727020434349,$9DDA780000656C69,$F73D16E953546753,
         $4B9480884B42F4DE,$8B4252200815526F,$1009212A26911480,$C15115D9A121884A,$88A0C81B04454511,$2C51158C808E8E03,
         $A221E407D80A8A0C,$E1FBCA8A88A3838E,$CDE6F7BCD66BA37B,$9DF3ACE73ED7B5FE,$48960C08C007CFB3,$1E42A90C80355133,
         $E4E1C6C4C783E011,$100070240A81402E,$0123FD732164B308,$C0222B3C3C7EF800,$080BD3780100BE07,$871C30C09B4DC000,
         $80015C9942EA0FFF,$084B389174C00184,$A6428E7A40001480,$26989D8001464000,$63CB600004A00053,$2760002D5000E362,
         $99F89D8000D3E67F,$011521945B00017B,$44886513200091A0,$8A56CFAC003B6800,$4B66140030580045,$4930002DD80039C4,
         $C000B7B000486657,$000C0800B20B10CE,$7B04002985885130,$8400782323C86000,$F13C57F246140099,$7800002AE710AE2B,
         $81453924B93CB299,$2E575707712D085B,$36142B1749CE281E,$79C22E409A610261,$F3E00F3481321999,$E0111591A00000CC,
         $CEAE0ECE78FDF383,$EA2D5F0EB68E36CE,$FEE3626222FF06BF,$E100004070ABCFE5,$1AB32F2CFED17E74,$25A2FE6D80063B80,
         $F775A00B5E6804EE,$A000B5400FB2668B,$3C7EF870F357DAE9,$E5D9D9B990A1453C,$615B42C44AD8E4E4,$C05FC267FE7D57CA,
         $F7FC3C7EF96CFD57,$5D328124E2BEE0F5,$F4CCC2E0F8044781,$62840992CF1CA54C,$FF0BB7FC478FE6DC,$B96249C422D31DFC,
         $8E711251E3142A58,$8922A532F38C9A44,$64FFD225C5299242,$35DF3E03FB2CDFE2,$2D917B013E6AB000,$10274BF603635DA8,
         $F20000F7E2C07458,$80030828D4C16FBB,$3FEFFF77CFE18368,$4966800025A047FD,$2E24445E00007192,$000008C73FB3CA54,
         $F41B41B02A81A044,$05C11C06C02C18C1,$42843660FC0BC1DC,$640A421042C2C424,$4282AC2960721C80,$2F602A1DB0CD8628,
         $866851C0341D40D4,$0EB855C22E0E7093,$C19E0861FA0F703D,$08C841040981BC28,$8A620188DA216113,$F8859917088E2358,
         $20248B120448C121,$35914B22511488C9,$485520548A523148,$5C873902723DF21D,$823200C83B91BA46,$B281943147BC86FC,
         $A8B943B50CD43D51,$64D00BA246841A37,$D09BA0168F9A3174,$E7A1368C3D1AB472,$433E8FDA0F68ABD0,$C4330718E8C030C7,
         $38B142C3C62E306C,$AC22B1CB6393092C,$03AC56B01AC6AB0C,$0477B1CF63F589BB,$77043609C0458112,$4C5848411E612042,
         $241C20A848D84E58,$8403093709DA1134,$B44BA8932227C251,$326218C4F911BA26,$12D6232C48588731,$C443887B102F138F,
         $B927324389122437,$12D254A4B1490290,$2CE923526ED246D2,$C993231A48349BA9,$2C943907B26B64DA,$C3E49DE485C82B20,
         $5BF221E41BE433E4,$53F8A47140629D0A,$E5194A6ACA5228E2,$32986506E534E510,$A1A8DD529AA35541,$A1AD425A8F351154,
         $3413A88751AF52B6,$4B491683CD399A75,$17681AD395A2ADA5,$11BA74E8AF69F768,$D257D0974E1E95DD,$F403E897E847E9CB,
         $88C78315860D0C77,$671807189B192867,$19A64C98AF187719,$31373054C7198BD3,$556F990F99E798EB,$CA91157C2AB62A58,
         $2A1B9526954A950A,$AADEAAA6AAA9542F,$A98F54CB55F3550B,$53335546AE7D535E,$AA55AB96D409A9E3,$A967531B53EB509D,
         $546FA867AA87A83B,$590689FD597EA43F,$A051A4434FC34CC3,$630B20C6BCE35FB1,$AB0D6B212C78B319,$CDB126C435817586,
         $1DFD98BB2A767CD9,$4339A1A9AA3D8BBB,$94F352B357334A33,$9CF87198E3073F66,$F397A728E7094E74,$29E229EF14DE8A7E,
         $5C6531B94C34A61B,$48AB58969796AA6B,$AE36BDEB47AB51AB,$59BB45BDA69DA7ED,$5C274AC7410E81FB,$E79D05CE8F674727,
         $16A70AA7DD53D953,$6BAA2EAEF53A3D4D,$6EBF7744BBA11BA5,$9E805EBE9E98EEA7,$FAE7BD79DEA76F4C,$FA6DFD54FD2F7D1C,
         $0CB306580C47F5A7,$C53C18CE0CDB0624,$DBC72F1D3C6F7135,$A54340C35D4351F1,$B99184E197619561,$0F468D46D5A33CD1,
         $6DE324E35CC6698C,$21260626A3C66DC6,$529AEE4DEA4D4B26,$3B4C3BA629A6B94D,$D6CDA2CDCCCDC74C,$E732D7313D9B3599,
         $60B7DF9BD79BE79B,$B8B6A8B62C5A785A,$EE59A65AE4B24965,$A559395A856EBCB6,$9DAD46B35D5A5558,$11A7BBADBBD625AD,
         $D69EAB4E934EB9A7,$A9B6C9B6F1B0C367,$AEDB06D8E5B019B7,$176267617DB66DB6,$BD93EEC3AEC5B767,$073DFD8D7DBA7D93,
         $1D5A1DAB0ED9870D,$3A563A1472B4737E,$C57D3FEE9CCE9ADE,$10CF58672FE996F4,$29CB13B6E333D8CF,$6747D39B539D69C4,
         $8B88F38373B96717,$2E3E972ECB824B89,$4AE4BDC8DDC61B9B,$F5D27AE15D71F574,$DBA8EDC29BB39B9D,$DC87EE69EE36EEAF,
         $33599E299F34CC9F,$E551E043C8C3D073,$DF6B30959F0B3FD1,$B567814F434F7EAC,$AD57912F632F23E7,$61F7AA77A5B7B0D7,
         $E39F723EF63E17EF,$59DE32DE373CE33E,$CBB7C8B7C037CC5F,$43DF855F9E6FC34F,$D1FF7AFF64FF237F,$890367012580A700,
         $7AF8FB025B814181,$65DB3A3F8EBF217C,$B9A08C41EDD9B2F6,$E582AD828F411541,$AD90ECC86821ADC1,$69CE91CE98E7F721,
         $07D0D6E87E50850E,$270C7EC38B61E661,$708E3F8657858785,$77359731D11A5888,$44FA44DF7343DCD1,$394F31679BDE4496,
         $2EAA3E2A354A2DAF,$3FBA34BA37DA3C6A,$9D58D5CC59662EC6,$2A2E391C4B6C4958,$EDFCDFBE6C6E36AE,$7BE30BE29DE287F3,
         $A179705DC82F9817,$2EA916A785F4C2CE,$4E884C40963A2C12,$16A82A1041F09438,$0A8E257713F2258C,$D12F2267C21DC279,
         $1E2A5C43D888D136,$EC927A4D2A48F24E,$A533C5247935BC91,$BC90A92784B9E52C,$169E3A9BDD4C0D4C,$BD3A3D326D20769A,
         $AA42719091928331,$E667EA67B6934D21,$FEB28565ACCB7666,$07951E2FB78B6EC5,$2D5905AC90B36BC9,$285A54E8A642B60A,
         $66576567B2072AD7,$9EAB9639CA89CDBF,$90DBCAB3CCEDCD2B,$C212EDFF9FEF9C37,$574B86A5B692E112,$396AACBDE6581D2D,
         $15E30ADB79713CB2,$B83CAC0656862B05,$EDAB4FD56D2AB68A,$4D7A26BD7EAE9757,$B5C182CAC15E816B,$85E50A550BEB6B01,
         $584F5DEDD7DCEB7D,$9D86FA61B5DF592F,$DB14AE8A89153E1B,$78DC28D87F159717,$DC99BFCA6F871BE5,$CF64B9C4ABA9B494,
         $9E2DDEE6E966D266,$0E97E697AA960E5B,$56DF0DB4DAD90D6E,$972FDB45F6F5EDB4,$B943B683BBDB28CD,$C9A765BCB83CBFA3,
         $F454A4543F3BCDCE,$B5DDD2EE3654FA54,$7B1BEED16EF8D761,$BC5BDBD5EC34F6BC,$0155DBBEC93EFDF7,$49FB65D566D54D55,
         $E9AA89AE3FF7B3FB,$6D4EAD5D6DFB96F8,$07FD03D203C7ED71,$1DD5D4B9D7B60E23,$EB2BD68F52543DD2,$EF9DFEBE1FC70E47,
         $9C8D550D360D2D77,$E9E479447023E2C6,$DA3A0D1EF7DF09F7,$1FD307E1AC7B8C76,$9A426A2F1D671D76,$5BFB9A539B469AF2,
         $D6D13ECC4FBA5B62,$0F1FDB47FC7ADEEA,$54F34A79593C349C,$6793D382E9DA69C9,$7E7D9D959D8CCFF2,$7BB6A2DB60DCF92E,
         $EF6F0F6ADFCE63E7,$8BFF45D2E17410BA,$B8F25CCE3BBC3BE7,$B85713E5DBB2F274,$74EA6D5F3AAF9A57,$BBC74FD393FE3CEA,
         $B96B5CB9AE9ABB9C,$E9F7667BB5BD7AEE,$79BDF4DDCE379E1B,$3D399ED5D6FF16F1,$F7C5F76F7AF3BDDD,$FD27727EDD16DFF5,
         $ADEE2777D9BBCBCE,$41ED40F45FBC4FBC,$FE5B3FD587DD43D9,$77C06A7FDCEFD8DC,$8506F747DCD1F3A0,$430F8FF591FECF83,
         $860D86CB8F998F05,$3FE239393E389EEB,$64CF43A7FCE9FD72,$CBFEA2FE179E26CF,$EBD5F87E2F1617AE,$F297A1D198D1CED7,
         $EAFDA57C6DBF9397,$C6C2C6DBAF19EBC0,$F45E313378C9BE1E,$1D77DC77C1EDFB56,$207CE44F0FDFA3EF,$53F5B1F968FF287F,
         $FF93931993FBA7D0,$2D3363FCF3980304,$4D416704000000DB,$51FB7C8EB1000041,$5248632000000093,$800000257A00004D,
         $800000FFF9000083,$EA000030750000E9,$170000983A000060,$0F000046C55F926F,$ECDA785441444901,$CEFE7A571B6C5B5B,
         $392D128944DE1999,$E4DF2D917C56D8BA,$6B37789C56D78D24,$69C4DD076C6CD9C7,$9B76E8A05BBBA1F7,$BC81628171F6E816,
         $2DB0FA2DA5F45814,$6B20D3462F4DA010,$445EA5638AC76C6F,$2CB775B64914AF5A,$34949148DD6522C9,$F0E07D39CE6670E4,
         $67014ECB25129226,$BFF999C33994DF88,$7810844867AFFBFF,$801AFB7C278A3792,$937B27801AF801AF,$0BF0543434387DF3,
         $7AF05353531FBF7E,$00AAAA872F2F28BD,$F1E0040810514500,$09595951468D1078,$9696961A69A134D3,$C8912287E3C78E9E,
         $CD60C1831B34D321,$004E18618562E2E2,$B613C78F316CD9B0,$16307870E153EDDB,$DED5BC1C1C1ADD8B,$E154364489163EDE,
         $49254468DE4F59E5,$F70D62C588CB2C82,$999DF3E7C37FDFEF,$2A978F1E367E9E9E,$8DDBB701C387028A,$86F2E272C80A8A8A,
         $C2CECECC55554061,$AED76BB0C6304D34,$B9B9B9EEC6C6C6A5,$F5F5F42E0606078F,$C900670DF1E3C50D,$1DBB760187AC0757,
         $1C1B1F9CE0F3F3F3,$163677CF9F73FC1C,$C6C68CDE6F37B98B,$2D96CB6034343446,$CD84E9D380A8A8A8,$8739C00004210366,
         $004081155550EBAE,$1D18C3C3C30F9F3E,$AA5CB970AAAA851D,$A9FFBBBBBA97AAAA,$C61B186186FBBBBB,$9A68145140010D80,
         $EF77E7FBBBBBB7B6,$874391B366DB7DDE,$EF77BB19B9B9A10E,$2246CDD75AE5CB86,$0DADADA1F5F5F411,$78F1196590A3A3A3,
         $BABB77CECECEC3FC,$5EBD7800E57F6EBA,$D3F6363A3A3162C4,$CF75D746FF3B3B2F,$D89389C4E02F63B1,$4D45168BC15B6DB6,
         $570060606DC91D8B,$4A4A20E0E0C55EAF,$BD5EDFFF7EFC964A,$95FE889122EFF57A,$5DDBB70555555000,$C8C8F3FD9F67D9F3,
         $DCEB78BDC6C6E9C8,$00B5A090D0DDD85B,$87923038A4E28C50,$11F47D1F03A3AEFD,$F93E4FD3F1C11216,$158F63A3A3A3C7E4,
         $750F4A5039B9B980,$3C6E9E9E9F9D7575,$9B0B3D9CCE2CE673,$D7A3144040718322,$70448E10094158BA,$B289D9D97C79FCFE,
         $EA3F969696D1B2B2,$4D4C002C7B6DEDED,$9D9D1BFC7C7C614D,$0FE1F9AB1932BF9D,$C005C047A3E6847F,$925A3CEB429B5F38,
         $B88BEBFD7E008408,$4F815CBA70C7F1FC,$B5DF5F7F7EFB5DAF,$14514842A6B002B5,$0B8E8ECEA6D1A344,$F344BF8BF9DE6A00,
         $0871930E4DD023D1,$B947CF24CB051581,$1830C384B0BEFA92,$FB9C59ECE378E738,$2793CAB4D343EFC3,$3737EF77BBDF9C4E,
         $492488E4842412A4,$FEB6B6B54F020408,$9FE3FA7FD59A61B7,$CE0674D07DFEC0E0,$45CBE19479C2AE45,$30DB9D61CFCB2114,
         $8CBF6FC9C4DD3419,$E9B62C58873ADF37,$B3535356FF93C9E4,$94522DA34801A1EF,$7BCAE572BA534D31,$3FA3F07E7BB3B3B3,
         $B83A6AA1FB83FEC6,$2361B0AB5EF910E0,$93EDF033550E3184,$69A681DFABCAF027,$D3A74BF53A9D4EDB,$9658B16200287DE9,
         $1ABFB6B6B6818618,$E2CE67EBEEFA1A1E,$70438D1A228E37F0,$3C261B115E48B091,$68318C021DE27847,$03FEC19F4FD78E9A,
         $E2F63C5F3A74E107,$2005E4C4362B3F8B,$783C75D744A68D1A,$F7CFFB7B7B4F60F0,$5A1D79DF5388381D,$478F29F23DA29E3C,
         $04F0E01240200027,$B9E6F04020C98620,$E1A1BBB1BB76E1B7,$4006EB93FAFAFA9D,$B7B451A34494F5D7,$C6F33D28842BBFB7,
         $0B81934C32CB20F7,$3F3C92047AE04451,$1D71E205CE33EA48,$C3AF6BD4E14F5595,$467F87C3E1C70D34,$0D9B3600175F2D29,
         $4B4B0B972E0D9B36,$D23ADE464647474B,$69A684EE77DB0C7C,$6639C8A8A457E509,$E1205C242F72C4E3,$F0FE78A34689090E,
         $369B4D8EDFAB6C11,$2EB33E9FA7E9EB7D,$E610A14210A14200,$A753F1D1D1D1E7E7,$86184DF4BD8F45D3,$1589C59489BC9609,
         $CB0AE947BF0B7338,$456418C980B9C199,$D4D000197ADF4BC1,$0335AA908427F4D4,$504ACACA81515150,$340FA7FDFA4C774A,
         $3C78F41D4D75421D,$0814920A2C213171,$C16EAD6561EA6999,$B0D31687380F15B9,$59516A6BAA3F71A7,$5617E6F379BCD959,
         $F10D34D00179880A,$86EA6F2323231C78,$96E7079EF7F67AE1,$A18D8E29240E73DF,$7E91D5A454B57675,$063260382F284887,
         $A5039E67A681C387,$250069E773B9D944,$C7F71870E102CE6B,$F5AD835D553CCFC7,$F5938B8C8C3711DB,$20D315A40A55B007,
         $11207EC66EF892D2,$707DC69EC2D9AC0B,$52897BABABA89C38,$3C3002F20B10A5BA,$850B6DEEF77B8C3C,$D38700D9D8EDCFC3,
         $E3E9D785C658C605,$BA81742539FC8CEB,$B554D8986EA20923,$64A4BB86AA9F9B19,$2FD34281F9797947,$ACF434343826685A,
         $8814763BF5251A69,$0AE6990F3C152BEA,$BA4F62B100CB03B1,$541C60C082E026AC,$514564077EB5B192,$1E8A38009AAAAAAA,
         $FA5A5A565EBAEA8A,$A6986AE6D541080C,$D22E715B20984299,$75ED6BFF8AC93ABD,$7BD4B93B0526CA91,$744880A253260D3A,
         $ADAEA8E72641D6A3,$00F62B7AF0492483,$CDCD018A2C580370,$66CDA3594F1E75CD,$E6C178C60A5DCB87,$99491406DED2C364,
         $2D7835B94318C437,$37D3E4F003D4F32B,$E4F57EFFBFEF002F,$66C503C7994D64E4,$31A4F5DD5B85E303,$E300B8C213CE002E,
         $E649C5DFE4AF9C02,$3604ABA70E738D18,$1CA00BC3A70E1D9B,$974F4F4C0B945480,$484E9C385754D4D7,$C8ACD03BBC9E0C92,
         $64801C053F55F24B,$4A7A28B7A3E444B2,$14A13E85B8BC0A22,$50645640ACB20210,$5630012854AC4A42,$253B9CE4E2108005,
         $4DE759E53A480649,$088A22A261AF8DD1,$862C15C2D7145C0F,$414A707384A98244,$6001440414210528,$3D11585329019A2B,
         $8CC3EFE502938F9F,$4AD72573F19144C0,$9622DC5AB159289E,$64D249240028A4F2,$1158CE0186198A59,$BE6AFA482C6D67D1,
         $04E4F3A8A420A479,$34C0840011A34CD0,$76191B9C10631819,$3A711EDDBB001D5B,$901A6983162D619D,$7798E5CFAE91E565,
         $106191325AB014AD,$183AE3D06B8F4002,$80595145F7CB5163,$AA2C74F249233A52,$F4A41694A069AE22,$52930CD66CB1E45A,
         $1A23A1861169750A,$3AB4CD566800458B,$6E6E6E727FBF7E00,$2540448C58E3D758,$8047879086B56729,$BE3AC29EC53CEB10,
         $6084A947F799A010,$53C38708998C0E60,$AAA800515800A200,$986338B742850E1A,$61E55CA544849A9E,$533298CAF2D78C4D,
         $6801AB669677FD9A,$9D65DEC908013FFD,$4318C1F81FA60013,$801A2B10009C1830,$21375F3E7C2A3468,$6178210A3E313624,
         $FBC9086685E293FA,$2BCE7D119C91C937,$E18F1686172CFB49,$02046EB8F1027F81,$333300000135D181,$71BE935BF38C6333,
         $117592C920442E2C,$21026B1109D31591,$82F067C981722CA5,$4248C5986ED2406E,$2844983CCC3628A0,$F555549A14284018,
         $B1620068A202E5BE,$555314BD9D9D9F18,$E832D8A2821DDE8C,$9A5D63920C3ED22F,$190FB1916529DAC7,$E77C98CC2D080942,
         $920410D3307EA922,$0E3D7436EFB0612C,$400331085B77CF9F,$1F0303034233F35D,$9825F3D3BB453629,$DA7B127245BE5A69,
         $964508A02D749932,$B4520802406327FF,$894779247086A51B,$E1843842C645657F,$3E3E31BAE3C45EFE,$00DAC0B96C2001DE,
         $52E2E2DF5EEF77B8,$C2EF47C638C4E4CB,$9098E9E3D4E4776E,$E5AEF80AA5B4C7F0,$14905291F51974AC,$18F251A3CBB01494,
         $4BE7A771D9B7614A,$0B03FDFBF0F3C384,$35CC008200030B0B,$FFBBBBBA269A6003,$9C15A37ED1659251,$45991286B34A5031,
         $B4D91D514F20664D,$A0362D100E5BEE4F,$40844E1666772322,$F6FE7421C2441596,$6BDEDEDE89A6980B,$5C98FDD68400A600,
         $C657AAAAAB7F7F7F,$9B760BA7A7704747,$01D3E9CF4D6DA323,$87DA9A2B97D5996B,$A2F92D20DC24C62C,$013FFD99FA15493D,
         $6FDA1B14DAEB8911,$FC6C6C620A1C22B4,$429980075CDCDCF6,$CDD934D3000A2FF4,$EBD15CB975DF379B,$2880AC060A10972D,
         $D88817EB51908196,$5F244615F3458F34,$152C35908C8D4BD0,$83C32313BB0E0816,$7BD34D3405F9BCE8,$88005BF0022E7A7A,
         $63639BC305600375,$E174B8AA8B1F7F63,$9F35292540C10803,$2A4A9E353CA1B44D,$0A17C12D2BFE8F93,$DD34EEAC2118897A,
         $2443628AE88726F6,$30C303FF0BE5C212,$BB870E12D3D5D5D0,$DBE48C2F35D4002C,$17D8C60BFEBF5FAE,$B21172B968FD83C3,
         $2E4F04B09A1080AC,$4F7CFD3D496B204E,$55615F2D01921DDA,$915AD7968C89D838,$819930CB249082B6,$1833738217FE1F8B,
         $08BFE8181A1B1B1B,$D1760D6AF4C00260,$BE5F2F852D2D2C00,$A6FFB5F6EDDB8EFC,$3D9B3605767F9F15,$A9E39BC93B758201,
         $9F1CE57816CCA3D5,$5C529E5D5BA4D85B,$B802102B2C9AB964,$38200F0C8C79E1F8,$CE57FB6B6B681F3F,$0D84035663003DF9,
         $B4B4B56E926AC001,$7ABD6E1A5DDB99FC,$501456412E5BD719,$58953CB5A0DC4A49,$CCC2796694D610A0,$FACD61A03EF21F13,
         $8AF3C7A79C5CFA79,$7FC1F57E26630362,$97161616274F4EE0,$B7A3468BDF5B5B5A,$90FAAFF2295DDC01,$BEDF6FB128655914,
         $A354BF2BCAF5383F,$D9DAF117D1F0E7AA,$6E46E8603A70E137,$634C905D46494F5D,$E1CC52824E674AD9,$B58E18FD22518322,
         $FF07C2E1CC081D7A,$B8B0B0B107777B89,$0204097FB5DAED74,$7EEB67D65AF40037,$8D8DA1953EAC8C4A,$D07FA9D4EA7FBF8D,
         $FD381DFAB6ED58B4,$861876DB75B1B7BD,$371549A8AA79C10E,$144C971ACB654AD4,$BF8CFD693C837584,$FA12A50259240085,
         $0A110F85F2E16F7B,$FE7F9F0306081006,$20C01DB060C17BF9,$57263D43FA005180,$1ED6D6D520000004,$B972E17F57D5F57F,
         $7027E3B1C512A79E,$AD303C7A9471D8F4,$CD7DB792081A5A71,$25C5B4FBF0C88166,$C6999B98C9248249,$A61379DDD14FD68D,
         $ADBDA07C7C6C6269,$086003BD5555DFED,$0000346FCA4AF8C0,$1F8FC7DDCE9D3920,$AE20FF767B3DEBFF,$E1791C2ACADE6DC5,
         $78579439E67C1C25,$B3C1084D33008421,$77CC8872A3D92795,$31C1739D4F134201,$BBA2DF8EAE833337,$63468823171626E3,
         $FEFEFE969E9E9EF1,$42C9F94B51F39CCB,$D5B4D60004A3EEE5,$391C8ED7F6FB7DBB,$A186A3CACACA93F2,$B107FD9EC0A9E3C3,
         $DB816DD6D441FF77,$156E7623934A065D,$688574D089D2E930,$E3FBBE1848858632,$A841A19185BDEFE8,$D8D8D8C4C30C22EA,
         $9F9F9A5F6FB7DBAD,$40801EE007C005BF,$D8192002E3D771BE,$EF868686FA90849D,$7AAAAAAB9D353536,$B15E514250AE084E,
         $82DBA9A875B5D509,$DD832D2EE12A9B4D,$2F7E24405EFC48E1,$38208C5858A2C5A0,$3F4CCC7E93078B37,$B8B438CE0C2442C0,
         $FEFEFEBEFE7CF866,$3DACB6E999999DFF,$6EC81987D13A1561,$5B0052E653990014,$EBB5DAEE8F6B6B6B,$4BBB761CB65B2DE5,
         $5A942000154251B6,$30739CAD86A52D3E,$82E0633818C984D3,$4E4D0A143D0DD743,$87744C4C4EF44C4C,$00B69DACAB61A142,
         $EA4009C7F56B1488,$49249376356B5AA9,$555555636F5EBD5B,$EA78F1EEDDEBD7A3,$8422E21087A74E9C,$A2C9A6199EB912D8,
         $60999122442EAAAA,$1617F783060BE830,$8B79800088427C16,$FFDC52850B0001E6,$CB800383E3320027,$0CA4210F00194662,
         $A17FA44A4A02D380,$CE5AD512CC5B955B,$CFF43DF6B258008E,$6284E3CB00371F5C,$ADCA3564F9432D89,$BD2CB74CA9586E28,
         $E9C8012AFDEDBFA1,$3F1FB2053FCD967D,$DB493C00515B2478,$BFF801D27D1CBFD7,$4A327117161C0001,$454900000000CF50
  Data.b $4E,$44,$AE,$42,$60,$82
  PicPakend:
EndDataSection
BERESHEIT
User avatar
einander
Enthusiast
Enthusiast
Posts: 744
Joined: Thu Jun 26, 2003 2:09 am
Location: Spain (Galicia)

Re: PureBasic PNG decoder and UpdateLayeredWindow_()

Post by einander »

Thanks Netmaestro. Nice and useful trick!
Fred
Administrator
Administrator
Posts: 18247
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: PureBasic PNG decoder and UpdateLayeredWindow_()

Post by Fred »

Nice and clever as usual !
User avatar
luis
Addict
Addict
Posts: 3895
Joined: Wed Aug 31, 2005 11:09 pm
Location: Italy

Re: PureBasic PNG decoder and UpdateLayeredWindow_()

Post by luis »

Hi NM,

why all the & $FF ?

Aren't the values from red,blue,green,alpha already in the range 0-255 ?
"Have you tried turning it off and on again ?"
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: PureBasic PNG decoder and UpdateLayeredWindow_()

Post by netmaestro »

Back when I originally wrote the Premultiply procedure I was using a structured pointer on .b values, we didn't have the .a type yet and so the &$FF's were needed. After the image library overhaul of 4.40, which allowed for enough speed to use Point() and Plot() I rewrote it but I didn't spend much time on it at all. In its current form the procedure doesn't need the &$FF's though, you are quite right. They can safely be removed.
BERESHEIT
IdeasVacuum
Always Here
Always Here
Posts: 6426
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

Re: PureBasic PNG decoder and UpdateLayeredWindow_()

Post by IdeasVacuum »

So the &$FF's can be discarded, this works fine:

Code: Select all

OpaqueRed = RGBA(255,000,000,255)
Debug   Red(OpaqueRed) * Alpha(OpaqueRed) / $FF
Debug Green(OpaqueRed) * Alpha(OpaqueRed) / $FF
Debug  Blue(OpaqueRed) * Alpha(OpaqueRed) / $FF
Debug Alpha(OpaqueRed)
Until today, I didn't know about premultiplication, so thanks (yet again) for the education netmaestro! :mrgreen:
It's trickier if the Window gets resized by the User at runtime though, isn't it? The non pre-multiplied image would have to be resized, then premultiplication applied, then the Window updated - I'm thinking that, depending on the image size, the process could be slow using plot().
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
fromVB
User
User
Posts: 82
Joined: Sun Jul 29, 2012 2:27 am

Re: PureBasic PNG decoder and UpdateLayeredWindow_()

Post by fromVB »

I learned a lot from this much earlier example which uses a similar multiplier:

http://www.forums.purebasic.com/english ... w+with+png
Post Reply