2017-06-19 6 views
-1

[Offtopic] S'il vous plaît excusez-moi si je ne suis pas assez précis, c'est ma première question et je suis aussi nouveau à la programmation.Pourquoi existe-t-il une différence entre le composant ARGB que je sauvegarde et celui que je récupère du fichier enregistré?

[Question] Je voulais changer le composant ARGB d'un seul pixel d'un bitmap (photo, fichier jpg) en une valeur exacte en utilisant Bitmap.SetPixel et l'enregistrer dans un nouveau fichier, en utilisant Bitmap.Save. Malheureusement, cela n'a pas fonctionné. Lorsque j'ai rouvert le fichier, le pixel que je voulais changer (0, 0) avait des valeurs ARGB légèrement différentes. Pourquoi cela se passe-t-il? Est-il possible de créer un fichier qui a exactement le composant ARGB que je veux pour un certain pixel?

Voici le code que j'ai:

Bitmap originalMap = new Bitmap("image.jpg"); 

Color current = originalMap.GetPixel(0, 0); 
//This one shows the original ARGB values 
Console.WriteLine(current); 

originalMap.SetPixel(0, 0, Color.FromArgb(255, 100, 100, 100)); 
originalMap.Save("new.jpg"); 
//This one shows the result that I want, but the bitmap is not re-opened 
Console.WriteLine(originalMap.GetPixel(0, 0)); 

Bitmap openTheNewFile = new Bitmap("new.jpg"); 
//The actual result after I open the saved file, A=255, R=108, G=113, B=117 
Console.WriteLine(openTheNewFile.GetPixel(0, 0)); 

Pourquoi est 108, 113 et 117 et non 100, 100, 100? Merci d'avance pour les réponses, je suis sûr que c'est quelque chose de basique (c'est le moins qu'on puisse dire), mais ça m'ennuie vraiment.

+1

_jpg .. la valeur exacte_ est mutuellement exclusive. – TaW

+0

Merci TaW! Je garderai cela à l'esprit la prochaine fois que j'essaierai d'apporter de tels changements à une image. –

Répondre

1

JPEG utilise un algorithme de compression avec perte. Si vous définissez un seul pixel dans l'image d'origine, le pixel correspondant dans l'image compressée n'aura probablement plus exactement les mêmes valeurs de couleur.

Pour préserver les valeurs de couleur exactes, utilisez un format de compression sans perte tel que le format PNG ou utilisez des bitmaps non compressés.

+0

Merci beaucoup! Très bonne réponse! Je pensais que je devrais attendre peut-être un jour ou deux. Merci encore! Bonne chance! –