I have made some tests and here is the code :) i hope help you :)
; Taille :
; Byte = 1
; Word=2
; Float = 4
; Long=4
Graphics 640,480,16,2
SetBuffer BackBuffer()
;OutPut=CreateGridImage(200,200,32)
MyIMage=LoadImage("K:\Blitz3D - Test\TOK Sample\samples/GALVPLAT.JPG")
Output=ApplyImageEffect(MyIMage,1)
While Not KeyHit(1)
Cls
DrawImage Output,10,10
DrawImage Output,MouseX(),MouseY()
Flip
Wend
WaitKey
End
Function CreateGridImage(Width,Height,Size)
MyBank=CreateImageBank(Width,Height)
DLL_CreateGridImage(MyBank,BankSize(MyBank),Size)
Output=BankToImage( MyBank)
FreeBank MyBank
Return Output
End Function
Function ApplyImageEffect(Image,Effect)
MyBank=ImageToBank( Image)
DLL_ApplyImageEffect(MyBank,BankSize(MyBank),Effect)
Output=BankToImage( MyBank)
FreeBank MyBank
Return Output
End Function
Function CreateImageBank(SizeX,SizeY)
bankImage = CreateBank(5)
SizeOfImage =SizeX*SizeY
ResizeBank bankImage, (SizeOfImage*12) + 9 ;(12 bytes per long for the image info + 9 extra bytes for header)
Poke_L bankImage,0,SizeX
Poke_L bankImage,4,SizeY
Return bankImage
End Function
Function ImageToBank( bufferImage)
bankImage = CreateBank(5)
Bank_OldBuffer = GraphicsBuffer();get the handle for the current buffer
SizeOfImage = ImageWidth(bufferImage)*ImageHeight(bufferImage)
ResizeBank bankImage, (SizeOfImage*12) + 9 ;(12 bytes per long for the image info + 9 extra bytes for header)
Poke_L bankImage,0,ImageWidth(bufferImage);store the width in the bank
Poke_L bankImage,4,ImageHeight(bufferImage);store the height
iBankPointer =8 : Steping=4
SetBuffer ImageBuffer(bufferImage)
LockBuffer ImageBuffer(bufferImage)
For iLoopX = 0 To ImageWidth(bufferImage)-1
For iLoopY = 0 To ImageHeight(bufferImage)-1
argb=ReadPixelFast(iLoopX,iLoopY)
col_red = (ARGB Shr 16) And $ff
col_green =(ARGB Shr 8) And $ff
col_blue = ARGB And $ff
Poke_L bankImage,ibankPointer,col_red
iBankPointer = iBankPointer + steping
Poke_L bankImage,ibankPointer,col_green
iBankPointer = iBankPointer + steping
Poke_L bankImage,ibankPointer,col_blue
iBankPointer = iBankPointer + steping
Next
Next
UnlockBuffer ImageBuffer(bufferImage)
SetBuffer Bank_OldBuffer
Return bankImage
End Function
Function BankToImage( bankImage)
Width=Peek_L (bankImage,0)
Height=Peek_L (bankImage,4)
bufferImage=CreateImage(Width,Height)
iBankPointer =8 : Steping=4
Bank_OldBuffer = GraphicsBuffer()
SetBuffer ImageBuffer(bufferImage)
LockBuffer ImageBuffer(bufferImage)
For iLoopX = 0 To ImageWidth(bufferImage)-1
For iLoopY = 0 To ImageHeight(bufferImage)-1
Red=PeekByte (bankImage,ibankPointer)
iBankPointer = iBankPointer + steping
Green=PeekByte (bankImage,ibankPointer)
iBankPointer = iBankPointer + steping
Blue=PeekByte (bankImage,ibankPointer)
iBankPointer = iBankPointer + steping
WritePixelFast(iLoopX,iLoopY,ARGB(Red,Green,Blue))
Next
Next
UnlockBuffer ImageBuffer(bufferImage)
SetBuffer Bank_OldBuffer
Return bufferImage
End Function
Function ARGB(Red,Green,Blue)
Return (blue Or (green Shl 8) Or (red Shl 16) Or ($ff000000))
End Function
;pure code
ProcedureDLL Peek_L(*bank,offset)
ProcedureReturn PeekL(*bank+offset)
EndProcedure
ProcedureDLL.f Peek_F(*bank,offset)
ProcedureReturn PeekF(*bank+offset)
EndProcedure
ProcedureDLL.w Peek_W(*bank,offset)
ProcedureReturn PeekW(*bank+offset)
EndProcedure
ProcedureDLL.b Peek_B(*bank,offset)
ProcedureReturn PeekB(*bank+offset)
EndProcedure
ProcedureDLL.s Peek_S(*bank,offset)
ProcedureReturn PeekS(*bank+offset)
EndProcedure
ProcedureDLL Poke_L(*bank,offset,value.l)
PokeL(*bank+offset,value.l)
EndProcedure
ProcedureDLL Poke_F(*bank,offset,value.f)
PokeF(*bank+offset,value.f)
EndProcedure
ProcedureDLL Poke_W(*bank,offset,value.w)
PokeW(*bank+offset,value.w)
EndProcedure
ProcedureDLL Poke_B(*bank,offset,value.b)
PokeB(*bank+offset,value.b)
EndProcedure
ProcedureDLL Poke_S(*bank,offset,value.s)
PokeS(*bank+offset,value.s)
EndProcedure
ProcedureDLL.l DLL_ApplyImageEffect(*bank,banksize,Effect)
SizeX=PeekL(*bank)
SizeY=PeekL(*bank+4)
TotalSize=(SizeX+SizeY*12)+9
iBankPointer =8
steping=4
If CreateImage(0, SizeX, SizeY)
StartDrawing(ImageOutput())
For x=0 To SizeX-1
For y=0 To SizeY-1
r=PeekL(*bank+iBankPointer)
iBankPointer = iBankPointer + steping
g=PeekL(*bank+iBankPointer)
iBankPointer = iBankPointer + steping
b=PeekL(*bank+iBankPointer)
iBankPointer = iBankPointer + steping
Plot (x,y,RGB(r,g,b))
Next
Next
Select Effect
Case 1
For x=0 To SizeX-1 Step 8
For y=0 To SizeY-1 Step 8
Line(0, y, SizeY*2, 0,RGB(0,0,0))
Line(x, 0, 0, SizeX*2,RGB(0,0,0))
Next
Next
EndSelect
iBankPointer =8
steping=4
For x=0 To SizeX-1
For y=0 To SizeY-1
Col=Point(x,y)
PokeL(*bank+iBankPointer,Red(Col))
iBankPointer = iBankPointer + steping
PokeL(*bank+iBankPointer,Green(Col))
iBankPointer = iBankPointer + steping
PokeL(*bank+iBankPointer,Blue(Col))
iBankPointer = iBankPointer + steping
Next
Next
StopDrawing()
FreeImage(0)
EndIf
EndProcedure
ProcedureDLL.l DLL_CreateGridImage(*bank,banksize,GridSize)
SizeX=PeekL(*bank)
SizeY=PeekL(*bank+4)
TotalSize=(SizeX+SizeY*12)+9
StepX=((SizeX)/GridSize)
StepY=((SizeY)/GridSize)
If CreateImage(0, SizeX , SizeY )
StartDrawing(ImageOutput())
For x=0 To SizeX-1
For y=0 To SizeY-1
Pos_X=Pos_X+StepX
Pos_Y=Pos_Y+StepY
Line(0, Pos_Y , SizeY , 0 ,RGB(255,255,0))
Line(Pos_X , 0 , 0 , SizeX ,RGB(255,255,0))
Next
Next
iBankPointer =8
steping=4
For x=0 To SizeX-1
For y=0 To SizeY-1
Col=Point(x,y)
PokeL(*bank+iBankPointer,Red(Col))
iBankPointer = iBankPointer + steping
PokeL(*bank+iBankPointer,Green(Col))
iBankPointer = iBankPointer + steping
PokeL(*bank+iBankPointer,Blue(Col))
iBankPointer = iBankPointer + steping
Next
Next
StopDrawing()
FreeImage(0)
EndIf
EndProcedure
; Delcs file
.lib "Examples.dll"
Peek_L%(bank*,offset)
Peek_F#(bank*,offset)
Peek_W%(bank*,offset)
Peek_S$(bank*,offset)
Peek_B%(bank*,offset)
Poke_L(bank*,offset,value%)
Poke_F(bank*,offset,value#)
Poke_W(bank*,offset,value%)
Poke_S(bank*,offset,value$)
Poke_B(bank*,offset,value%)
DLL_ApplyImageEffect%(bank*,size,effect)
DLL_CreateGridImage%(bank*,size,step)
GetImageWidth%(bank*)
GetImageHeight%(bank*)