lbmaker escreveu
Isso é o que eu temia, ter que criar as máscaras usando funções "pixel a pixel", mais já que é o único jeito vamos usar essa mesmo né...
só tem algumas auterações, pois como uso a cor rosa puro (255, 0, 255) como cor de fundo transparente, tem que fazer uma auteraçãozinha para quando for da cor rosa puro copiar ela, porque sinão cria uma mascara totalmente branca hehe... a auteração seria criar uma variavel maskColor para guardar a cor que será "ignorada" antes do loop :
Color maskColor;
maskColor = new Color(255, 0, 255, 255);
e dentro do loop só fazer um if para checar se a cor não é a cor da máscara :
if (cor != maskColor)
{
cor.R = 255;
cor.G = 255;
cor.B = 255;
}
Bem, resolveu meu problema, mais se souberem de algum meio de criar isso sem ser "pixel a pixel" não esqueçam de avisar.
Até mais e valew... |
Uma solução melhor que essa, seria você fazer todo esse processamento na GPU. Você pode montar um efeito parecido com este:
sampler samplerState;
struct PS_INPUT
{
float2 TexCoord : TEXCOORD0;
};
float4 Flash(PS_INPUT Input) : COLOR0
{
float4 color = tex2D(samplerState, Input.TexCoord.xy);
color.rgb = 1;
return color;
}
technique Technique1
{
pass P0
{
PixelShader = compile ps_1_1 Flash();
}
}
|
O código HLSL acima obtém o mesmo resultado obtido que eu apresentei anteriormente com código C#.
Pra usar isso no XNA vc tem que criar um "Effect File" no projeto "Content" daí copia e cola todo esse código lá no arquivo ".fx".
Tenta rodar isso no XNA, se você não conseguir, avisa ai que estamos por aqui.
abraços @lucianoJoseBr
My Blog: http://lucjose.wordpress.com |
|