begin process at 2008 08 22 05:08:33
1 229 775 membres
46 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Sauvegarder d'une picturebox ... [ Archives Visual Basic / Graphique ] (Cugel)

Sauvegarder d'une picturebox ... le 10/05/2004 12:20:32

Cugel

Bien le bonjour,

J'en appelle ici aux spécialistes des méthodes graphiques sous VB6.

Je voudrais sauvegarder l'image contenue dans une picturebox après que cette image ait été modifiée(conversion en niveaux de gris).

J'ai essayé la méthode Savepicture, mais le résultat est toujours le même, une image en couleur identique à l'originale et redimensionnée.

Comment faire pour sauver cette image en niveaux de gris et sans la redimensionner?

Re : Sauvegarder d'une picturebox ... le 10/05/2004 12:45:57

DARKSIDIOUS
Membre Club
(Admin CS)
Il te faut faire : Picture1.Picture = Picture1.Image AVANT de la sauvegarder, ainsi, tout les tracés ou manipulations que tu as pu faire sur ton image (stockés dans le Image) seront transférés dans le Picture de l'image et seront enregistrés normalement avec un SavePicture.

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer

Re : Sauvegarder d'une picturebox ... le 10/05/2004 20:00:57

Cugel

Ben oui, mais, au risque de passer pour un neuneu, çà marche pas.

Je fais :

PicReview.Picture=PicReview.Image
Savepicture PicReview.Picture, sFileName

et j'obtiens toujours la même image originale.

J'ai aussi essayé en passant pas un second controle PictureBox caché, mais idem.

J'ai aussi essayé en modifiant les propriétés AutoRedraw et ScaleMode mais au mieux j'arrive simplement à ne plus afficher l'image du tout.

Alors je sèche vraiment ...

Re : Sauvegarder d'une picturebox ... le 10/05/2004 20:15:26

DARKSIDIOUS
Membre Club
(Admin CS)
Pourrais-tu nous mettre ton code pour voir la où ca coince stp ?

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer

Re : Sauvegarder d'une picturebox ... le 11/05/2004 18:34:04

Cugel

Okay, sorry, j'avais mal corrigé ma procédure, désolé.

Mais il me reste encore un problème :

Après la mise en niveaux de gris, mon image finale possèdes des pixels gris là où il ne devrait y avoir que du blanc. Je suppose que cela vient du fait que certaines parties de la photos sont surexposées, mais y aurait-il un moyen d'éviter cela?

Voici le code demandé :



Option Explicit
'-----------------------------------------------
' Déclaration des variables et constantes
'-----------------------------------------------
Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Byte
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, _
ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, _
ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long

Dim sLecteur As String
Dim sRep As String
Dim sFileName As String
Private Const sNewExt As String = ".bum"

Private Sub GreyScale()
'---------------------------------------------------------------------------------------
' Procedure : GreyScale
' Projet : Projet1
' Date : 04/05/2004
' Auteur : trouvé sur le net (VBFrance je crois)
' si l'auteur se reconnait, qu'il me fasse
' signe
' Objectif : transforme une image couleur en niveaux de
' gris
' Type de proc. : Sub
'---------------------------------------------------------------------------------------
'
' ------------------------------------------------------
' Variables utilisées pour la mise en niveaux de gris
' ------------------------------------------------------
'
Dim R1, R2, R3, r, g, b As Integer
Dim TCol As Long
Dim Colour As Long
Dim x, y As Integer
R1 = 256
R2 = 256
R3 = 256

' ------------------------------------------------------
' Routine de mise en niveaux de gris
' ------------------------------------------------------

For x = 0 To picTraitement.ScaleWidth
For y = 0 To picTraitement.ScaleHeight
' On récupère la couleur du pixel
TCol = GetPixel(picTraitement.hdc, x, y)
r = TCol Mod R1
g = (TCol / 256) Mod R2
b = TCol / 256 / R3
Colour = r * 0.3 + g * 0.59 + b * 0.11
' Affectation de la nouvelle couleur au pixel
SetPixel picTraitement.hdc, x, y, RGB(Colour, Colour, Colour)
Next
Next


End Sub

Private Sub cmdGreyScale_Click()
' ------------------------------------
' Transformation de l'image couleur en
' niveaux de gris et sauvegarde sous
' un nom de fichier temporaire.
' -------------------------------------
MousePointer = vbHourglass

' On passe en niveaux de gris
Call GreyScale

' Affecte l'image en mémoire (traitée) au
' picturebox
picTraitement.Picture = picTraitement.Image
' Sauvegarde de l'image dans un fichier temporaire

MousePointer = vbArrow

SavePicture picTraitement.Picture, App.Path & "\Temp.bmp"
' Ouvre le fichier temporaire dans picPreview
LoadPic App.Path & "\Temp.bmp", picPreview, True
End Sub

Private Function LoadPic(Chemin As String, Destination As PictureBox, Optional Centrage As Boolean = True)
'---------------------------------------------------------------------------------------
' Procedure : ChargeImage
' Projet : Converter
' Date : 04/04/2004
' Auteur : inconnu, trouvé sur VBFrance
' Objectif : Redimensionne une image dans un picturebox sans la déformer.
' Type de proc. : Function
'---------------------------------------------------------------------------------------
'
Dim Pic As StdPicture
Dim x As Long
Dim y As Long
Dim Coeff As Long
Dim NewWidth As Long
Dim NewHeight As Long
Set Pic = LoadPicture(Chemin)
Destination.AutoRedraw = True

' Si la taille est plus petite que le picturebox
If Pic.Width < Destination.Width And Pic.Height < Destination.Height Then
Coeff = 1
x = (Destination.Width - Pic.Width) / 2
y = (Destination.Height - Pic.Height) / 2
GoTo Affiche_Image
End If

' Définition du Coefficient selon l'orientation de l'image
If Pic.Width > Pic.Height Then
Coeff = Pic.Width / Destination.Width
x = 0
y = (Destination.Height - (Pic.Height / Coeff)) / 2
Else
Coeff = Pic.Height / Destination.Height
x = (Destination.Width - (Pic.Width / Coeff)) / 2
y = 0
End If

Affiche_Image:
Destination.Cls
NewWidth = Pic.Width / Coeff
NewHeight = Pic.Height / Coeff
If Centrage = True Then
Destination.PaintPicture Pic, x, y, NewWidth, NewHeight

Else
Destination.PaintPicture Pic, 0, 0, NewWidth, NewHeight
End If

End Function

Private Sub dirRepertoire_Change()
filFichiers.Path = dirRepertoire.Path
sRep = dirRepertoire.Path
End Sub

Private Sub drvDrive_Change()
dirRepertoire.Path = drvDrive.Drive
End Sub

Private Sub filFichiers_Click()
LoadPic sLecteur & sRep & "\" & filFichiers.FileName, picPreview, False
picTraitement.Picture = LoadPicture(sLecteur & sRep & "\" & filFichiers.FileName)

End Sub

Re : Sauvegarder d'une picturebox ... le 11/05/2004 18:48:55

DARKSIDIOUS
Membre Club
(Admin CS)
Qu'entend-tu par "certaines parties de la photos sont surexposées" ? Je ne comprend pas trop ton problèmes, et surtout d'où ca peut venir !

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer

Re : Sauvegarder d'une picturebox ... le 15/05/2004 09:00:58

Cugel
Désolé pour le retard dans ma réponse (petit problème de FAI).

Prenons l'exemple d'une photo représentant un maison par temps clair avec des nuages blancs dans le ciel.

les nuages blancs se retrouveront, sur la photo retraitée, avec ques pixels gris-noirs (alors qu'ils devraient rester noirs).

J'ai poser la question sur un autre forum où on m'a répondu que cela venait de ce que ma carte vidéo était certainemnt paramétrée en 16 bits couleurs lors que l'image finale était en 24 bits. Oui, mais voilà, ma carte est paramétrée en 32 bits ...

Je continue à creuser, mais je pencherais plutôt pour un problème venant de l'algorithme...


Classé sous : image, picturebox, niveaux, sauvegarder, gris

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS