Код:
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