J'essaye de recréer la boîte de dialogue d'image de Recolor que Microsoft a malheureusement interrompue dans la transition d'Office 2003 à 2007. C'était très utile pour remplacer des couleurs dans une image (voir http://www.indezine.com/products/powerpoint/learn/picturesandvisuals/recolor-pictures-ppt2003.html pour description complète du dialogue).Rechercher/remplacer des couleurs dans (c.-à-d. Recolorer) une image
Je suis surtout intéressé à faire pour des images dans le métafichier le format (EMF ou WMF), qui ont tendance à avoir moins de couleurs que d'autres formats d'image, dans mon expérience. L'image ci-dessous est un exemple d'une image de métafichier amélioré collé à partir d'Excel dans PowerPoint qui semble contenir seulement 6 couleurs:
Si je pouvais utiliser la boîte de dialogue de bureau existant sur la photo ci-dessus, je verrais ma 6 couleurs sur la gauche dans la colonne "Original", et je pourrais facilement changer la couleur de la police bleue (et de la bordure) en noir. Le problème ici est que si j'utilise GetPixel()
pour l'inventaire par programme les couleurs de l'image, je reçois des dizaines de couleurs dues à l'anti-aliasing des polices, et il n'est pas pratique de montrer à l'utilisateur toutes ces options de recoloration (qui seraient effectivement demander à l'utilisateur de recréer manuellement l'effet anti-aliasing approprié). L'extrait de code ci-dessous illustre comment j'ai essayé d'inventorier les couleurs:
Dim listColors as New List(Of Color)
Dim shp as PowerPoint.Shape = [a metafile picture in PowerPoint]
Dim strTemp as String = Path.Combine(Environ("temp"), "temp_img.emf")
shp.Export(strTemp, PowerPoint.PpShapeFormat.ppShapeFormatEMF, 0, 0)
Using bmp As New Bitmap(strTemp)
For x As Integer = 0 To bmp.Width - 1
For y As Integer = 0 To bmp.Height - 1
listColors.Add(bmp.GetPixel(x, y))
Next
Next
End Using
Je vois qu'il ya une Palette property en option pour métafichiers, que je pensais pouvoir apporter une réponse, mais une exception est levée lorsque je tente de y accéder, donc c'était une impasse. Je vois aussi qu'il y a headers pour les images de métafichiers, mais je ne peux pas déchiffrer quoi faire avec la documentation limitée sur Internet, et je ne suis même pas sûr que cela m'amène à la bonne réponse (c'est-à-dire 6 couleurs). En résumé, la première partie de la question est de savoir comment inventorier (c.-à-d. Identifier) les six couleurs "de base" dans l'image ci-dessus et la deuxième partie comment remplacer une de ces six couleurs par une autre. Les solutions VB.NET sont préférées, bien que je puisse probablement traduire le code C# si ce n'est pas trop complexe.
Si nécessaire, vous pouvez télécharger la version EMF de l'image ci-dessus au https://www.dropbox.com/s/n03ys3dh9pcd0xu/temp_img.emf?dl=0. Pour être clair, je ne suis pas intéressé à "calculer" les six couleurs "de base" dans l'image ci-dessus. Je crois, peut-être à tort, que ces six couleurs sont des propriétés explicites de l'image, et mon premier objectif est de trouver comment y accéder. En effet, si vous dissociez simplement l'image de métafichier deux fois dans PowerPoint, vous pouvez parcourir les formes résultantes pour obtenir ces six couleurs. Cela répondrait à la partie 1 de la question, même si elle semble un peu bâclée, ne fonctionne que pour les métafichiers (ce qui peut être bien, en fait), et je doute que ce soit le cas de l'ancienne boîte de dialogue Recolor. Pour adresser la partie 2, je pourrais regrouper les formes d'image de métafichier après échange de couleurs mais, encore une fois, cela semble bâclé et modifie l'image d'autres manières que prévues. Alors, comment puis-je explicitement récupérer/modifier/définir ces couleurs "de base" dans une image [métafichier]?
Je pense que le problème est les polices anti-aliasées, vous devrez soit modifier l'image avant d'obtenir les pixels, les obtenir tous ou sélectionner toutes les couleurs similaires – TheLethalCoder
Si vous utilisez un verre à l'écran et regardez de près les polices d'écran, vous voyez un halo multicolore autour d'eux, même s'ils sont noirs. – TaW
@TaW Je crois que c'est ce que le problème OP est, ou au moins une partie de celui-ci – TheLethalCoder