cs_roro69
Messages postés70Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention29 septembre 2018
-
Modifié par cs_roro69 le 20/06/2015 à 07:44
Zermelo
Messages postés378Date d'inscriptionsamedi 22 septembre 2012StatutMembreDernière intervention13 août 2017
-
22 juin 2015 à 16:50
Bonjour et merci pour votre aide
Voici mon problème:
Dans mon projet ; j'ai une image d'origine juste à deux couleurs que je dois redimensionner ; j'utilise le code ci-après pour le redimensionnement
Dim ImageOrigine As New Bitmap(pic.Image) 'Variable pour déclarer l'image source Dim x As Int32 = CInt(TextBox1.Text) 'variable pour la nouvelle largeur Dim y As Int32 = CInt(TextBox2.Text) 'variable pour la nouvelle hauteur Dim width As Integer = x 'largeur image.
Dim height As Integer = y 'Hauteur image
Dim NouvelleImage As New Bitmap(width, height) 'Variable pour la nouvelle image
Dim g As Graphics = Graphics.FromImage(NouvelleImage) 'JE recrée une image With g 'Utilisation de la classe drawing2D pour recrée l'image .CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality .InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic .PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.None .SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality .CompositingMode = Drawing.Drawing2D.CompositingMode.SourceOver .DrawImage(ImageOrigine, New Rectangle(0, 0, width, height), New Rectangle(0, 0, ImageOrigine.Width, ImageOrigine.Height), GraphicsUnit.Pixel) End With pic.Image = NouvelleImage Catch MsgBox("Impossible de recrée l'image") End Try
Donc mon problème est que lorsque l'image est redimensionner ; plein de pixel se retrouve grisé.
Dans mon projet j'ai besoin que dans mon image les pixels ne soit que de deux couleurs .
Y a t-il un moyen de redimensionner une image sans que la couleurs des pixels se modifient?
Merci de votre aide et du temps consacré et de vos conseils
Bonjour,
La perfection ne saurait exister en matière de redimentionnement d'une image.
C'est en allant aux extrêmes que l'on comprend pourquoi.
Choisissons par exemple comme cas extrême celui, facile à comprendre, d'une image composé de 2 pixels de deux couleurs différentes, que tu veux réduire de moitié ===>> donc à un pixel. Un pixel = 1 seule couleur ... laquelle des deux ?
EDIT : imagine maintenant (oublions même les couleurs) que tu aies à traiter une image de ... disons 363 pixels, dont 11 en hauteur et 33 en largeur et que tu veuilles diviser par 2 tant sa hauteur que sa largeur. Question : combien de pixels contiendra le résultat en hauteur et combien en largeur ?
"conjugues" maintenant tout cela et tu comprendras moins mal ce qui se passe (déformations, etc ...)
Et tout cela : quel que puisse être le mode d'interpolation choisi !
Maintenant : le résultat final pourra être meilleur (ou moins mauvais) lorsque le choix du mode d'interpolation choisi est mieux (ou moins mal) "adapté" à l'image traitée. La détermination de ce choix ne saurait être "universelle" et dépendra toujours, finalement, :
- de l'empirisme et du "coup d'oeil" de celui qui traite l'image.
- de ce que celui qui traite l'image veut mettre préférablement en exergue
- de la priorité qu'il donne soit au respect maximum des couleurs, soit au respect maximum des proportions.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
cs_roro69
Messages postés70Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention29 septembre 2018 20 juin 2015 à 10:40
Bonjour ucfoutu ;
Merci pour votre réponses.
Je n'avais pas vu le problème de cet angle là ; en tout cas sympa de votre part de m'avoir détailler cette vision.
Merci beaucoup
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 20 juin 2015 à 11:18
De rien.
Tiens ===>> je t'ai choisi un petit article à lire :
https://msdn.microsoft.com/en-us/library/windows/desktop/ms533836%28v=vs.85%29.aspx Il est clair que les différences (résultant du choix d'interpolation) auraient été plus visibles si l'image traitée avait été plus petite et plus contrastée (ou de couleurs plus différentes ).
Bon week-end
cs_roro69
Messages postés70Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention29 septembre 2018 20 juin 2015 à 20:01
Bonsoir Ucfoutu ,
Merci pour ce lien qui est très informatif.
Je pense que vu la complexité de la retouche d'image ; je vais retirer cette fonction de mon projet
; en plus je pense que l'outil graphique de vbnet est très limité pour les retouches d'images; par contre j'essaierai peut être plus tard la classe imagemagik qui je pense est plus performante.)
En tout cas merci pour tes conseils constructifs.
Merci du temps consacré et des conseils prodigués
Vous n’avez pas trouvé la réponse que vous recherchez ?
hacker591
Messages postés34Date d'inscriptionmardi 10 juin 2014StatutMembreDernière intervention26 janvier 2022 21 juin 2015 à 10:33
Bonjour,
voici comment Redimensionner l'image avec une compression de la taille de l'image:
voici mon codes :
Imports System.IO
Imports System.Drawing.Imaging
Public Class Form1
Dim RisizedImage As Image
Dim ht As Integer
Dim wt As Integer
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim open As New OpenFileDialog
open.Filter = "Fichier Images(*.bmp;*.png;*.jpeg;*.gif)|*.bmp;*.png;*.gif;*.jpeg;*.jpg"
open.Title = "séléctionner une image"
If open.ShowDialog = Windows.Forms.DialogResult.OK Then
Label1.Text = open.FileName
PictureBox1.Image = Image.FromFile(Label1.Text)
TextBox1.Text = Image.FromFile(Label1.Text).Width
TextBox2.Text = Image.FromFile(Label1.Text).Height
TextBox3.Text = IO.Path.GetFileNameWithoutExtension(Label1.Text)
ht = TextBox1.Text
wt = TextBox2.Text
Dim NewSize As New Size(ht, wt)
RisizedImage = New Bitmap(PictureBox1.Image, NewSize)
PictureBox1.Image = RisizedImage
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Else : Exit Sub
End If
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim save As New SaveFileDialog
save.AddExtension = True
save.DefaultExt = Path.GetExtension(Label1.Text)
save.Filter = "Fichier Images(*.bmp;*.png;*.jpeg;*.gif)|*.bmp;*.png;*.gif;*.jpeg;*.jpg"
save.Title = "Enregistrement l'image"
If save.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim fs As IO.FileStream = CType(save.OpenFile, IO.FileStream)
ht = TextBox1.Text
wt = TextBox2.Text
Dim bmp As Bitmap = New Bitmap(ht, wt)
Using g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(Image.FromFile(Label1.Text), 0, 0, bmp.Width, bmp.Height)
End Using
Dim ext As String = FileIO.FileSystem.GetFileInfo(Label1.Text).Extension
If LCase(ext) = ".jpg" Or LCase(ext) = ".jpeg" Then
Dim Encoder As ImageCodecInfo = GetEncoder(ImageFormat.Jpeg)
Dim compresse As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Compression
Dim Parameters As New EncoderParameters(1)
Dim Parameter As New EncoderParameter(compresse, 100)
Parameters.Param(0) = Parameter
bmp.Save(fs, Encoder, Parameters)
ElseIf LCase(ext) = ".png" Then
Dim Encoder As ImageCodecInfo = GetEncoder(ImageFormat.Png)
Dim compresse As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Compression
Dim Parameters As New EncoderParameters(1)
Dim Parameter As New EncoderParameter(compresse, 100)
Parameters.Param(0) = Parameter
bmp.Save(fs, Encoder, Parameters)
ElseIf LCase(ext) = ".gif" Then
Dim Encoder As ImageCodecInfo = GetEncoder(ImageFormat.Gif)
Dim compresse As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Compression
Dim Parameters As New EncoderParameters(1)
Dim Parameter As New EncoderParameter(compresse, 100)
Parameters.Param(0) = Parameter
bmp.Save(fs, Encoder, Parameters)
ElseIf LCase(ext) = ".bmp" Then
Dim Encoder As ImageCodecInfo = GetEncoder(ImageFormat.Bmp)
Dim compresse As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Compression
Dim Parameters As New EncoderParameters(1)
Dim Parameter As New EncoderParameter(compresse, 100)
Parameters.Param(0) = Parameter
bmp.Save(fs, Encoder, Parameters)
End If
RisizedImage.Dispose()
fs.Close()
MsgBox("Conversion Terminer", MsgBoxStyle.Information, "Convertir l'image")
End If
End Sub
Private Function GetEncoder(ByVal format As ImageFormat) As ImageCodecInfo
Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageDecoders()
Dim codec As ImageCodecInfo
For Each codec In codecs
If codec.FormatID = format.Guid Then
Return codec
End If
Next codec
Return Nothing
End Function
End Class
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 21 juin 2015 à 10:49
Bonjour, hacker591,
Es-tu certain d'avoir bien lu et compris le problème qu'expose cs_roro69 ?
Relis donc. Sa problématique n'est pas de redimensionner, mais d'éviter certaines conséquences de ce redimensionnement.
Le code que tu montres, qui ne définit aucune interpolation, génèrera un résultat encore moins bon.
cs_roro69
Messages postés70Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention29 septembre 2018 22 juin 2015 à 12:34
Bonjour shaw
Merci pour ce lien ma foi fort instructif.
Les informations de ton lien ;ajouté au judicieux commentaires d'ucfoutu ; m'amène à revoir mon projet ; et à ne plus "travailler" sur les image ; car dans mon projet il est impératif que les images ne soit qu'à deux couleurs et dés que l'on veut retoucher l'image çà fausse tout.
En tout cas merci