Je suis en train de le port des algorithmes d'interpolation d'image en code HLSL, pour l'instant j'obtenu:HLSL, pixel shader du programme avec différents algorithmes de downscaling de Texture2D
float2 texSize;
float scale;
int method;
sampler TextureSampler : register(s0);
float4 PixelShader(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
{
float2 newTexSize = texSize * scale;
float4 tex2;
if(texCoord[0] * texSize[0] > newTexSize[0] ||
texCoord[1] * texSize[1] > newTexSize[1])
{
tex2 = float4(0, 0, 0, 0);
} else {
if (method == 0) {
tex2 = tex2D(TextureSampler, float2(texCoord[0]/scale, texCoord[1]/scale));
} else {
float2 step = float2(1/texSize[0], 1/texSize[1]);
float4 px1 = tex2D(TextureSampler, float2(texCoord[0]/scale-step[0], texCoord[1]/scale-step[1]));
float4 px2 = tex2D(TextureSampler, float2(texCoord[0]/scale , texCoord[1]/scale-step[1]));
float4 px3 = tex2D(TextureSampler, float2(texCoord[0]/scale+step[0], texCoord[1]/scale-step[1]));
float4 px4 = tex2D(TextureSampler, float2(texCoord[0]/scale-step[0], texCoord[1]/scale ));
float4 px5 = tex2D(TextureSampler, float2(texCoord[0]/scale+step[0], texCoord[1]/scale ));
float4 px6 = tex2D(TextureSampler, float2(texCoord[0]/scale-step[0], texCoord[1]/scale+step[1]));
float4 px7 = tex2D(TextureSampler, float2(texCoord[0]/scale , texCoord[1]/scale+step[1]));
float4 px8 = tex2D(TextureSampler, float2(texCoord[0]/scale+step[0], texCoord[1]/scale+step[1]));
tex2 = (px1+px2+px3+px4+px5+px6+px7+px8)/8;
tex2.a = 1;
}
}
return tex2;
}
technique Resample
{
pass Pass1
{
PixelShader = compile ps_2_0 PixelShader();
}
}
Le problème est que pixel shader de programmation nécessite approche différente parce que nous n'avons pas le contrôle de la position actuelle, seulement la partie "interne" de la boucle réelle à travers les pixels.
J'ai été googling pour environ une journée entière et trouvé aucune bibliothèque open source avec des algorithmes de mise à l'échelle utilisés en boucle. Existe-t-il une bibliothèque de ce genre dans laquelle je pourrais porter des méthodes?
J'ai trouvé http://www.codeproject.com/KB/GDI-plus/imgresizoutperfgdiplus.aspx mais je ne comprends vraiment pas son approche du problème, et le portage sera une douleur dans le ...
Wikipédia raconte une approche matematic. Donc ma question est: Où puis-je trouver la bibliothèque open source graphique facile à utiliser qui inclut des algorithmes de mise à l'échelle simples? Bien sûr, si une telle bibliothèque existe même :)