Can anybody help
BlitzMax Forums/BlitzMax Programming/Can anybody help| 
 | ||
| I want to automate the maskcolor setting for my App 
For Local i:Int = 0 Until 4
	Local pic:TImage = LoadImage("pic.png")
	Local pm:TPixmap = LockImage(pic) 
	Local px:Int = ReadPixel(pm,ImageWidth(pic)-1,1)
	Local r:Byte = px Shr 16
	Local g:Byte = px Shr 8
	Local b:Byte = px
	
	SetMaskColor(r,g,b)
	Print r
	Print g
	Print b
Next
This only work everyother time.. ? Can anybody help me | 
| 
 | ||
| Mask colors only impact pixmaps / images loaded afterwards. stuff loaded before will not be affected. | 
| 
 | ||
| Thanks a lot for the respond. However I already knew that. I think I need to explain a little better. What I want to do is the same as what game-maker does. I want to first analyze the image to find its maskcolor, and then load it - again. In this way I don’t always have to set the maskcolor, it will automatically be read (maskcolors can be tricky, and require a lot of trial and error). Maybe the problem is reading a pixel value after the image has been masked. It seems that the first time it reads the pixel its fine, and sets that maskcolor to the color of this pixel. The next time the image is already masked so it just reads r=0, g=0 and b=0. As this new value is now set to a maskcolor it can now read the pixel again. So it works every other time. Moral of the story: You cant read a masked pixel!... I guess | 
| 
 | ||
| VinceA, You're right. Loading with setmaskcolor 255,0,0 will change all pixels to 0,0,0. 
Graphics 800,600
'uncomment to see the affect of setmaskcolor
'SetMaskColor 255,0,0
Local image:timage=LoadImage("red.png")
Local mypixmap:TPixmap=LockImage(image)
For Local x:Int=0 To ImageWidth(image)-1
	For Local y:Int=0 To ImageHeight(image)-1
		Print ReadPixel(mypixmap,x,y)
	Next
Next
 | 
| 
 | ||
| This will work as long as none of the color parameters are set to - 0. It kind of a workaround, but it seems to work 
Graphics 640, 480, 0
'Loading an Masked Image, where the top right pixel
'will be set as the maske color
'!! Mask colors must be from 1-255 for each channel 
Local maskImg:TImage = LoadImageMasked("DarkRed.png")
Local maskImg1:TImage = LoadImageMasked("DarkRed.png")
Local maskImg2:TImage = LoadImageMasked("DarkRed.png")
While Not KeyDown(KEY_ESCAPE)
	Cls
	SetBlend MASKEBLEND
	DrawImage maskImg,0,0
	DrawImage maskImg1,0,64
	DrawImage maskImg2,0,128
	Flip
Wend
End
Function LoadImageMasked:TImage(imgName:String)
	Local img:TImage = LoadImage(imgName)
	Local pm:TPixmap = LockImage(img) 
	Local px:Int = ReadPixel(pm,ImageWidth(img)-1,1)
	Local r:Byte = px Shr 16
	Local g:Byte = px Shr 8
	Local b:Byte = px
	
	'If The mask color is the same then skip SetMaskColor
	'With out this only every other img if same mask color
	'will work
	If r<>0 And g<>0 And b<>0 Then
		SetMaskColor(r,g,b)
	End If
	
	'Clean Up
	img = Null
	pm = Null
	px = Null
	r = Null
	g = Null
	b = Null
	GCCollect
	Return LoadImage(imgName,MASKEDIMAGE)
End Function
 |