Nous avons une composante d'imagerie qui facilite l'application de nombreux « effets », y compris des manipulations simples de couleur - il est beaucoup plus rapide d'appliquer simplement une matrice de transformation de couleur que la marche manuellement pixel par pixel, comme ainsi, par exemple ...
private static ColorMatrix GrayscaleMatrix = new ColorMatrix(
new float[][]
{
new float[] {0.30f, 0.30f, 0.30f, 0, 0},
new float[] {0.59f, 0.59f, 0.59f, 0, 0},
new float[] {0.11f, 0.11f, 0.11f, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}
}
);
public static void ApplyGrayscaleTransformation(string inputPath, string outputPath)
{
using (var image = Bitmap.FromFile(inputPath))
{
using (var graphics = Graphics.FromImage(image))
{
using (var attributes = new ImageAttributes())
{
attributes.SetColorMatrix(GrayscaleMatrix);
graphics.DrawImage(image,
new Rectangle(0,0,image.Width, image.Height),
0, 0, image.Width, image.Height, GraphicsUnit.Pixel,
attributes);
}
}
image.Save(outputPath);
}
}
La vitesse entre ceci et unsafe
méthodes sont souvent négligeables, mais peut varier; il vaut la peine de tester des cas quand cela arrive à ce point - un avantage n'est pas d'avoir à compiler avec /unsafe
.
Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (http://meta.stackexchange.com/q/8259) d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence. –
Seules les réponses sans contexte ou explication sont assez fragiles. Liens pourrir laissant d'autres utilisateurs sans idée de ce qui était à l'autre bout. – Kev
liens non disponibles - il serait bon d'entrer les parties principales du code ici –