Hi, I am trying to write a fast edge detection function using LockedPixels. It is all working fine except certain colours are being filled in! It seems that when some colours are Poked it changes surrounding colours to yellow, making the code think there is an edge.
Here is the code and the test image, any help would be great.
http://www.avds12.dsl.pipex.com/Test.bmp
Here is the code and the test image, any help would be great.
http://www.avds12.dsl.pipex.com/Test.bmp
Graphics 800,600,32,2 image=LoadImage("Test.bmp") Width=ImageWidth(image) Height=ImageHeight(image) LockBuffer(ImageBuffer(image)) LBank=LockedPixels(ImageBuffer(image)) LPitch=LockedPitch(ImageBuffer(image)) LFormat=LockedFormat(ImageBuffer(image)) Select LFormat Case 1 Case 2 Case 3,4 For y=0 To Height-1 YPos=y*LPitch For x=0 To Width-1 RGB=PeekInt(LBank,YPos+(x*LFormat)) SrcR=(RGB And $FF0000) Shr 16 SrcG=(RGB And $FF00) Shr 8 SrcB=RGB And $FF If x<(Width-1) RGB=PeekInt(LBank,YPos+((x+1)*LFormat)) x1R=(RGB And $FF0000) Shr 16 x1G=(RGB And $FF00) Shr 8 x1B=RGB And $FF EndIf If x>0 RGB=PeekInt(LBank,YPos+((x-1)*LFormat)) x2R=(RGB And $FF0000) Shr 16 x2G=(RGB And $FF00) Shr 8 x2B=RGB And $FF EndIf If y<(Height-1) RGB=PeekInt(LBank,(y+1)*LPitch+(x*LFormat)) y1R=(RGB And $FF0000) Shr 16 y1G=(RGB And $FF00) Shr 8 y1B=RGB And $FF EndIf If y>0 RGB=PeekInt(LBank,(y-1)*LPitch+(x*LFormat)) y2R=(RGB And $FF0000) Shr 16 y2G=(RGB And $FF00) Shr 8 y2B=RGB And $FF EndIf SrcBright=SrcR+SrcG+SrcB SrcBright=SrcBright/3 x1Bright=x1R+x1G+x1B x1Bright=x1Bright/3 x2Bright=x2R+x2G+x2B x2Bright=x2Bright/3 y1Bright=y1R+y1G+y1B y1Bright=y1Bright/3 y2Bright=y2R+y2G+y2B y2Bright=y2Bright/3 If SrcBright>x1Bright And x<(Width-1) PokeInt LBank,YPos+((x+1)*LFormat),ConvertRGB(0,0,0,LFormat) EndIf If SrcBright>x2Bright And x>0 PokeInt LBank,YPos+((x-1)*LFormat),ConvertRGB(0,0,0,LFormat) EndIf If SrcBright>y1Bright And y<(Height-1) PokeInt LBank,((y+1)*LPitch)+(x*LFormat),ConvertRGB(0,0,0,LFormat) EndIf If SrcBright>y2Bright And y>0 PokeInt LBank,((y-1)*LPitch)+(x*LFormat),ConvertRGB(0,0,0,LFormat) EndIf Next Next End Select UnlockBuffer(ImageBuffer(image)) DrawImage image,0,0 Flip WaitKey End Function ConvertRGB(r,g,b,Mode=0) Select Mode Case 1 Col=((r/8) Shl 11) Or ((g/4) Shl 5) Or (b/8) Return Col Case 2 Col=((r/8) Shl 10) Or ((g/8) Shl 5) Or (b/8) Return Col Default Col=(r Shl 16) Or (g Shl 8) Or b Return Col End Select End Function