GrabImage2

Share your advanced PureBasic knowledge/code with the community.
User avatar
oryaaaaa
Addict
Addict
Posts: 825
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

GrabImage2

Post by oryaaaaa »

I wanted to more fast code, and follows code.

Code: Select all

Procedure GrabImage2(ImageNumber1.l, ImageNumber2.l, dx.l, dy.l, dw.l, dh.l)
  Protected W.l, H.l, *MemoryTarget, *MemoryTemp, Y.l, Target.l, Origin.l
  CreateImage(ImageNumber2, dw, dh, 32)
  IsImage(ImageNumber2)
  StartDrawing(ImageOutput(ImageNumber2))
    *MemoryTarget = DrawingBuffer()
  StopDrawing()
  
  IsImage(ImageNumber1)
  StartDrawing(ImageOutput(ImageNumber1))
    *MemoryTemp = DrawingBuffer()
    W = ImageWidth(ImageNumber1)
    H = ImageHeight(ImageNumber1)
  StopDrawing()
  
  For Y =(dy+dh) To (dy+1) Step -1
    Origin  = ((H-Y)*W+dx)*4
    CopyMemory(*MemoryTemp + Origin, *MemoryTarget+Target, dw*4) 
    Target + dw*4
  Next 
EndProcedure

CreateImage(1, 640, 480, 32)
GrabImage2(1, 2, 20, 40, 600, 400)
Debug Str(Y) + ' > '+ Str(Origin) wrote: 480 > 0
479 > 2560
478 > 5120
477 > 7680
476 > 10240
...
4 > 1218560
3 > 1221120
2 > 1223680
1 > 1226240