Код:
If OpenWindow(0, 0, 0, 640, 400, "sine plasma!", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 0, 0, 640, 400)
CreateImage(0,640,400)
*m=AllocateMemory(640*400*4)
wdc=GetWindowDC_(WindowID(0))
bdc=CreateCompatibleDC_(wdc)
TemporaryBitmapInfo.BITMAPINFO
GetObject_(ImageID(0), SizeOf(BITMAP), TemporaryBitmap.BITMAP)
TemporaryBitmapInfo\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
TemporaryBitmapInfo\bmiHeader\biWidth = TemporaryBitmap\bmWidth
TemporaryBitmapInfo\bmiHeader\biHeight = -TemporaryBitmap\bmHeight
TemporaryBitmapInfo\bmiHeader\biPlanes = 1
TemporaryBitmapInfo\bmiHeader\biBitCount = 32
;TemporaryBitmapInfo\bmiHeader\biCompression = #BI_RGB
;https://www.purebasic.fr/english/viewtopic.php?t=25276&highlight=copymemorytoimage
AddWindowTimer(0, 0, 10) ; Timeout = 10 ms
a0.a=0
b0.a=0
c0.a=0
d0.a=0
Dim st.a(255)
For i=0 To 255
st(i)=Int( 32+31*Sin(i*#PI/128) )
Next i
Dim sx.a(320)
Dim sy.a(320)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Timer
aa.a=a0
a0+1
bb.a=b0
b0+2
cc.a=c0
c0+3
dd.a=d0
d0+1
For i=0 To 319
sx(i)=st(aa)+st(bb)
sy(i)=st(cc)+st(dd)
aa+1
bb+2
cc+1
dd+4
Next i
*p=*m
For y=0 To 199
For x=0 To 319
c.a=sy(y)+sx(x)
;c.a=(x!y)+t
;r.l=(c<<16)|(c<<8)|c
r.l=PeekL(?pal+c*4)
PokeL(*p,r)
PokeL(*p+4,r)
PokeL(*p+640*4,r)
PokeL(*p+4+640*4,r)
*p+8
Next x
*p+(640*4)
Next y
res=SetDIBits_(bdc, ImageID(0), 0, TemporaryBitmap\bmHeight, *m, TemporaryBitmapInfo, #DIB_RGB_COLORS)
StartDrawing(CanvasOutput(0))
DrawImage(ImageID(0),0,0)
StopDrawing()
EndIf
Until Event = #PB_Event_CloseWindow
FreeMemory(*m)
DeleteDC_(bdc)
ReleaseDC_(WindowID(0),wdc)
EndIf
DataSection
pal:
Data.l $2FD,$6FE,$CFE,$13FE,$118FD,$21FFC,$126FE,$2BFE,$30FE,$35FE,$3BFF,$41FE,$48FE,$4EFD,$154FD,$458FE
Data.l $460FF,$463FF,$36AFF,$171FF,$78FE,$7EFE,$84FD,$88FE,$28EFF,$293FF,$198FF,$29FFF,$A5FE,$ADFD,$B3FE,$B6FF
Data.l $BEFD,$1C3FF,$2CAFF,$2D1FF,$D6FD,$DDFD,$E4FC,$EAFE,$EFFE,$F4FE,$1FAFF,$2FDFC,$1FFF5,$1FEEF,$FFE9,$FEE7
Data.l $2FFDE,$1FDDA,$FDD4,$FECC,$FFC7,$FFC0,$FFB9,$FEB5,$FEAE,$FEAB,$1FDA4,$1FE9D,$FE97,$FF8F,$FE89,$FE86
Data.l $3FE7D,$1FE79,$FD74,$FE6C,$FE67,$FF5F,$FF59,$FE54,$FE50,$1FD4C,$1FC45,$FD3E,$1FE39,$FF31,$FE2C,$FD27
Data.l $1FF1F,$FE1B,$FE14,$FD0D,$FE07,$1FF01,$5FF00,$8FF00,$11FF00,$17FE01,$1CFD01,$24FE00,$2AFE01,$31FE01,$34FE00,$37FF00
Data.l $41FF00,$44FE00,$4AFE00,$50FE00,$58FD01,$5EFE00,$64FD00,$6AFE00,$6FFE01,$74FE00,$7AFE00,$81FE00,$89FE01,$8EFD01,$94FE01,$98FD01
Data.l $A0FE00,$A2FE00,$A8FE00,$B0FD01,$B6FE00,$BDFD00,$C4FD00,$C7FD00,$CFFE01,$D2FE00,$D9FF00,$E0FE00,$E6FE00,$EEFE00,$F4FF00,$F6FE00
Data.l $FEFD01,$FDF900,$FDF200,$FEEB00,$FFE501,$FFDE02,$FFD800,$FFD300,$FECD00,$FCC800,$FDC300,$FCBC00,$FFB600,$FFAF00,$FFA800,$FFA500
Data.l $FB9F00,$FA9B00,$FB9400,$FE8E00,$FF8600,$FF8101,$FF7A01,$FE7600,$FC7000,$FC6B00,$FD6600,$FC5F00,$FF5900,$FF5101,$FF4B00,$FF4800
Data.l $FF4001,$FE3C00,$FC3400,$FD2E00,$FF2801,$FF2202,$FF1A02,$FF1400,$FF0F00,$FF0A00,$FD0400,$FC0102,$FD0009,$FD000F,$FF0015,$FF0017
Data.l $FC0020,$FD0124,$FF022B,$FF0032,$FF0038,$FE003E,$FF0046,$FF0049,$FF0050,$FE0053,$FC0059,$FC0060,$FF0067,$FF006F,$FE0074,$FF0077
Data.l $FB0081,$FC0084,$FF018A,$FF0091,$FF0097,$FE009E,$FF00A5,$FE00A9,$FF00AE,$FD01B2,$FD02B9,$FE01C0,$FD00C5,$FF00CD,$FF00D2,$FF01D7
Data.l $FD00DD,$FF01E2,$FF01E8,$FF01F1,$FF01F6,$FD00FB,$F900FE,$F600FF,$EE00FE,$E700FD,$E201FD,$DA01FC,$D400FD,$CD00FD,$CA00FD,$C700FE
Data.l $BC01FE,$B800FE,$B401FE,$AC01FD,$A601FD,$9E01FC,$9801FE,$9400FE,$8F00FD,$8C00FF,$8600FF,$7D00FE,$7700FE,$7000FE,$6B00FD,$6800FF
Data.l $5D00FE,$5B00FE,$5500FD,$4E01FD,$4800FE,$4000FD,$3900FD,$3600FE,$2F00FD,$2C00FF,$2500FF,$1E00FF,$1800FF,$1000FF,$A00FF,$800FF