Redimensionnement d'image

Signaler
Messages postés
70
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
29 septembre 2018
-
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
-
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

--

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
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.
Messages postés
70
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
29 septembre 2018

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
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
Messages postés
70
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
29 septembre 2018

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
Messages postés
31
Date d'inscription
mardi 10 juin 2014
Statut
Membre
Dernière intervention
14 août 2017

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


cordialement,
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
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.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour

vector graphic ou Image vectorielle traite le sujet
https://fr.wikipedia.org/wiki/Image_vectorielle
Messages postés
70
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
29 septembre 2018

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
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
14
Bonsoir.
Avez-vous essayé le code source
http://codes-sources.commentcamarche.net/source/54845-etirement-d-une-image ?
Cordialement