Je cherche =E0 changer le contraste de figures (cr=E9=E9es avec les
fonctions line et ellipse) contenues dans une form..
J'ai utiliser les fonctions getpixel et setpixel (cf PS) mais je rame
beaucoup trop!
Comment est ce que je peux modifier le contraste de ces =E9lements sans
les fontion get et Set pixel ????
Cordiallement,
Pierre
PS: voici la partie du code issue d'un exe sur le contraste que
j'utilisais en remplacant la picture par la form
Private Sub CmdContrast_Click()
'variables for contrast, color calculation, positioning
Dim Contrast As Integer
Dim NewColor As Long
Dim x As Integer, y As Integer
Dim r As Integer, g As Integer, b As Integer
Contrast =3D Val(TxtContrast)
'run a loop through the picture to change every pixel
For x =3D 0 To Picture1.ScaleWidth
For y =3D 0 To Picture1.ScaleHeight
'get the current color value
NewColor =3D GetPixel(Picture1.hDC, x, y)
'extract the R,G,B values from the long returned by GetPixel
r =3D ExtractR(NewColor)
g =3D ExtractG(NewColor)
b =3D ExtractB(NewColor)
'change the RGB settings to their appropriate contrast
r =3D r + (((r - 127) * Contrast) \ 100)
g =3D g + (((g - 127) * Contrast) \ 100)
b =3D b + (((b - 127) * Contrast) \ 100)
'make sure the new variables aren't too high or too low
ByteMe r
ByteMe g
ByteMe b
'set the new pixel
SetPixelV Picture1.hDC, x, y, RGB(r, g, b)
'continue through the loop
Next y
'refresh the picture box every 10 lines (a nice progress bar
effect)
If x Mod 10 =3D 0 Then Picture1.Refresh
Next x
Il y a un exemple sur le site de Mike D. Sutton qui devrait te permettre de réaliser ce genre d'opérations à base de GDI:http://ed ais.mvps.org/> Files > Demo applications + source code > Edge detection / Edge snap / Filter kernel: <quote>Perform many image adjustment filters to an image including Blur, Sharpen, Edge finding, Invert, Brightness, Contrast, Greyscale etc</quote>
François Picalausa
Merci mais bon vu que je suis nul en anglais il va falloir que je traduise ca .... neammoins je n'arrive pas a faire fonctionner son code :s A par l'effet noir blanc avec la barre d'espace....??...
cordiallement, Pierre
> Hello,
Il y a un exemple sur le site de Mike D. Sutton qui devrait te
permettre de réaliser ce genre d'opérations à base de GDI:http://ed ais.mvps.org/> Files > Demo applications + source code >
Edge detection / Edge snap / Filter kernel:
<quote>Perform many image adjustment filters to an image including
Blur, Sharpen, Edge finding, Invert, Brightness, Contrast, Greyscale
etc</quote>
François Picalausa
Merci
mais bon vu que je suis nul en anglais il va falloir que je traduise
ca ....
neammoins je n'arrive pas a faire fonctionner son code :s
A par l'effet noir blanc avec la barre d'espace....??...
Il y a un exemple sur le site de Mike D. Sutton qui devrait te permettre de réaliser ce genre d'opérations à base de GDI:http://ed ais.mvps.org/> Files > Demo applications + source code > Edge detection / Edge snap / Filter kernel: <quote>Perform many image adjustment filters to an image including Blur, Sharpen, Edge finding, Invert, Brightness, Contrast, Greyscale etc</quote>
François Picalausa
Merci mais bon vu que je suis nul en anglais il va falloir que je traduise ca .... neammoins je n'arrive pas a faire fonctionner son code :s A par l'effet noir blanc avec la barre d'espace....??...
cordiallement, Pierre
François Picalausa
On 4æ16æ¥, åå¾4:59, "PierreVal" uf.fr> wrote:
Merci mais bon vu que je suis nul en anglais il va falloir que je traduise ca .... neammoins je n'arrive pas a faire fonctionner son code :s A par l'effet noir blanc avec la barre d'espace....??...
Pour charger l'image interne, il faut probablement utiliser l'une des fonctions ' Create() - Creates a new image at the desired size and depth ' CreateFromDC() - Creates a new image based on the Bitmap currently selected into the given DC ' CreateFromWindow() - Creates a new image using the DC associated with the given window ' CreateFromBitmap() - Creates a new image from the given HBITMAP ' CreateFromPicture() - Creates a new image from the given StdPicture (Must be of type vbPicTypeBitmap) ' CreateFromPictureBox() - Creates a new image from the given picture box's window
Merci
mais bon vu que je suis nul en anglais il va falloir que je traduise
ca ....
neammoins je n'arrive pas a faire fonctionner son code :s
A par l'effet noir blanc avec la barre d'espace....??...
Pour charger l'image interne, il faut probablement utiliser l'une des
fonctions
' Create() - Creates a new image at the desired size
and depth
' CreateFromDC() - Creates a new image based on the Bitmap
currently selected into the given DC
' CreateFromWindow() - Creates a new image using the DC
associated with the given window
' CreateFromBitmap() - Creates a new image from the given
HBITMAP
' CreateFromPicture() - Creates a new image from the given
StdPicture (Must be of type vbPicTypeBitmap)
' CreateFromPictureBox() - Creates a new image from the given
picture box's window
Merci mais bon vu que je suis nul en anglais il va falloir que je traduise ca .... neammoins je n'arrive pas a faire fonctionner son code :s A par l'effet noir blanc avec la barre d'espace....??...
Pour charger l'image interne, il faut probablement utiliser l'une des fonctions ' Create() - Creates a new image at the desired size and depth ' CreateFromDC() - Creates a new image based on the Bitmap currently selected into the given DC ' CreateFromWindow() - Creates a new image using the DC associated with the given window ' CreateFromBitmap() - Creates a new image from the given HBITMAP ' CreateFromPicture() - Creates a new image from the given StdPicture (Must be of type vbPicTypeBitmap) ' CreateFromPictureBox() - Creates a new image from the given picture box's window
Bonjour François Picalausa, François Picalausa a écrit :
On 4月16日, 午後4:27, "PierreVal" wrote:
Bonjour,
Depuis le 5 avril, j'ai des caractères "sud asiatiques" dans l'en tête de tes réponses. Cela semble du à un passage de codage iso-8859 à utf-8 Qu'en penses tu ?
-- Cordialement,
Jacques.
Bonjour François Picalausa,
François Picalausa a écrit :
On 4月16日, 午後4:27, "PierreVal" <Pierre...@neuf.fr> wrote:
Bonjour,
Depuis le 5 avril, j'ai des caractères "sud asiatiques" dans l'en tête
de tes réponses. Cela semble du à un passage de codage iso-8859 à utf-8
Qu'en penses tu ?
Bonjour François Picalausa, François Picalausa a écrit :
On 4月16日, 午後4:27, "PierreVal" wrote:
Bonjour,
Depuis le 5 avril, j'ai des caractères "sud asiatiques" dans l'en tête de tes réponses. Cela semble du à un passage de codage iso-8859 à utf-8 Qu'en penses tu ?
> Pour récupérer l'image, faudra sans doutes appeler DrawImage. Je n'ai pas le temps pour l moment d'en dire plus...
François Picalausa
Merci c'est sympa de m'expliquer le déroulement du code car sinon je galèrerais à fond!!! Donc si j'ai bien compris on peut pas changer le contraste avec ce programme car il n'y a rien pour activer le code "Constrat(ByVal inNewRange As Long)"....
Par contre je ne trouve pas où il trouve les valeurs :"m_BMInfo.bmiHeader.biHeight"et "m_ScanLine" (ou alors il n'y a pas besoin de les chercher car ce sont des variables connues?)
En fait je comprends qu'il : _il déclenche l'évènement "Filterbegin" (issue de je ne sais ou) -vérifie que c'est bien une image valide - il utilise une boucle For ou il prend en compte toute les valeur de la fenêtre et où il modifie la gamme(=range) (ce qui doit être équivalent au contraste) -il déclenche "FilterProgress" (où il change les valeur du contraste) - et il réécrit l'image..
Mais après je me perd dans le détail de ces actions!
Si tu veux bien continuer à m'expliquer, je serais bien aidé! Cordiallement PierreVal
> Pour récupérer l'image, faudra sans doutes appeler DrawImage.
Je n'ai pas le temps pour l moment d'en dire plus...
François Picalausa
Merci
c'est sympa de m'expliquer le déroulement du code car sinon je
galèrerais à fond!!!
Donc si j'ai bien compris on peut pas changer le contraste avec ce
programme car il n'y a rien pour activer le code "Constrat(ByVal
inNewRange As Long)"....
Par contre je ne trouve pas où il trouve les
valeurs :"m_BMInfo.bmiHeader.biHeight"et "m_ScanLine"
(ou alors il n'y a pas besoin de les chercher car ce sont des
variables connues?)
En fait je comprends qu'il :
_il déclenche l'évènement "Filterbegin" (issue de je ne sais ou)
-vérifie que c'est bien une image valide
- il utilise une boucle For ou il prend en compte toute les valeur de
la fenêtre et où il modifie la gamme(=range) (ce qui doit être
équivalent au contraste)
-il déclenche "FilterProgress" (où il change les valeur du contraste)
- et il réécrit l'image..
Mais après je me perd dans le détail de ces actions!
Si tu veux bien continuer à m'expliquer, je serais bien aidé!
Cordiallement
PierreVal
> Pour récupérer l'image, faudra sans doutes appeler DrawImage. Je n'ai pas le temps pour l moment d'en dire plus...
François Picalausa
Merci c'est sympa de m'expliquer le déroulement du code car sinon je galèrerais à fond!!! Donc si j'ai bien compris on peut pas changer le contraste avec ce programme car il n'y a rien pour activer le code "Constrat(ByVal inNewRange As Long)"....
Par contre je ne trouve pas où il trouve les valeurs :"m_BMInfo.bmiHeader.biHeight"et "m_ScanLine" (ou alors il n'y a pas besoin de les chercher car ce sont des variables connues?)
En fait je comprends qu'il : _il déclenche l'évènement "Filterbegin" (issue de je ne sais ou) -vérifie que c'est bien une image valide - il utilise une boucle For ou il prend en compte toute les valeur de la fenêtre et où il modifie la gamme(=range) (ce qui doit être équivalent au contraste) -il déclenche "FilterProgress" (où il change les valeur du contraste) - et il réécrit l'image..
Mais après je me perd dans le détail de ces actions!
Si tu veux bien continuer à m'expliquer, je serais bien aidé! Cordiallement PierreVal
François Picalausa
On 16 avr, 23:57, "PierreVal" wrote:
> Pour récupérer l'image, faudra sans doutes appeler DrawImage. > Je n'ai pas le temps pour l moment d'en dire plus...
> François Picalausa
Merci c'est sympa de m'expliquer le déroulement du code car sinon je galèrerais à fond!!! Donc si j'ai bien compris on peut pas changer le contraste avec ce programme car il n'y a rien pour activer le code "Constrat(ByVal inNewRange As Long)"....
Par contre je ne trouve pas où il trouve les valeurs :"m_BMInfo.bmiHeader.biHeight"et "m_ScanLine" (ou alors il n'y a pas besoin de les chercher car ce sont des variables connues?)
En fait je comprends qu'il : _il déclenche l'évènement "Filterbegin" (issue de je ne sais ou) -vérifie que c'est bien une image valide - il utilise une boucle For ou il prend en compte toute les valeur de la fenêtre et où il modifie la gamme(=range) (ce qui doit être équivalent au contraste) -il déclenche "FilterProgress" (où il change les valeur du contraste) - et il réécrit l'image..
Mais après je me perd dans le détail de ces actions!
Si tu veux bien continuer à m'expliquer, je serais bien aidé! Cordiallement PierreVal
Hello,
Lévénement FilterBegin est issu de Private WithEvents EdgeMap As clsDIBFx et plus particulièrement de: EdgeMap.ApplyKernel(TempFilter)
Normalement, le code pour contrast devrait se rapprocher (non testé) de ceci: Private ContrastImage As clsDIBFx
Private Sub Form_Load() 'Crée une nouvelle "boite à outils" pour images Set ContrastImage = New clsDIBFx
'Lui affecte une nouvelle image à partir de l'image 'contenue dans le picturebox Call ContrastImage.CreateFromPicture(picImage.Picture, , , , , idRGB)
if ContrastImage.Constrat(320) then Call MsgBox("contrast OK") end if End Sub
Private Sub Form_Resize() Call picImage.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight) End Sub
Private Sub Form_Unload(ByRef Cancel As Integer) Set ContrastImage = Nothing End Sub
Private Sub picImage_Paint() ' Should we draw the edge map? Call ContrastImage.DrawImage(picImage.hDC()) End Sub
En ajoutant le WithEvents, et en gérant les événements il sera possible de déterminer à quel moment l'opération commence et se termine.
François Picalausa
On 16 avr, 23:57, "PierreVal" <Pierre...@neuf.fr> wrote:
> Pour récupérer l'image, faudra sans doutes appeler DrawImage.
> Je n'ai pas le temps pour l moment d'en dire plus...
> François Picalausa
Merci
c'est sympa de m'expliquer le déroulement du code car sinon je
galèrerais à fond!!!
Donc si j'ai bien compris on peut pas changer le contraste avec ce
programme car il n'y a rien pour activer le code "Constrat(ByVal
inNewRange As Long)"....
Par contre je ne trouve pas où il trouve les
valeurs :"m_BMInfo.bmiHeader.biHeight"et "m_ScanLine"
(ou alors il n'y a pas besoin de les chercher car ce sont des
variables connues?)
En fait je comprends qu'il :
_il déclenche l'évènement "Filterbegin" (issue de je ne sais ou)
-vérifie que c'est bien une image valide
- il utilise une boucle For ou il prend en compte toute les valeur de
la fenêtre et où il modifie la gamme(=range) (ce qui doit être
équivalent au contraste)
-il déclenche "FilterProgress" (où il change les valeur du contraste)
- et il réécrit l'image..
Mais après je me perd dans le détail de ces actions!
Si tu veux bien continuer à m'expliquer, je serais bien aidé!
Cordiallement
PierreVal
Hello,
Lévénement FilterBegin est issu de
Private WithEvents EdgeMap As clsDIBFx
et plus particulièrement de:
EdgeMap.ApplyKernel(TempFilter)
Normalement, le code pour contrast devrait se rapprocher (non testé)
de ceci:
Private ContrastImage As clsDIBFx
Private Sub Form_Load()
'Crée une nouvelle "boite à outils" pour images
Set ContrastImage = New clsDIBFx
'Lui affecte une nouvelle image à partir de l'image
'contenue dans le picturebox
Call ContrastImage.CreateFromPicture(picImage.Picture, , , , ,
idRGB)
if ContrastImage.Constrat(320) then
Call MsgBox("contrast OK")
end if
End Sub
Private Sub Form_Resize()
Call picImage.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight)
End Sub
Private Sub Form_Unload(ByRef Cancel As Integer)
Set ContrastImage = Nothing
End Sub
Private Sub picImage_Paint() ' Should we draw the edge map?
Call ContrastImage.DrawImage(picImage.hDC())
End Sub
En ajoutant le WithEvents, et en gérant les événements il sera
possible de déterminer à quel moment l'opération commence et se
termine.
> Pour récupérer l'image, faudra sans doutes appeler DrawImage. > Je n'ai pas le temps pour l moment d'en dire plus...
> François Picalausa
Merci c'est sympa de m'expliquer le déroulement du code car sinon je galèrerais à fond!!! Donc si j'ai bien compris on peut pas changer le contraste avec ce programme car il n'y a rien pour activer le code "Constrat(ByVal inNewRange As Long)"....
Par contre je ne trouve pas où il trouve les valeurs :"m_BMInfo.bmiHeader.biHeight"et "m_ScanLine" (ou alors il n'y a pas besoin de les chercher car ce sont des variables connues?)
En fait je comprends qu'il : _il déclenche l'évènement "Filterbegin" (issue de je ne sais ou) -vérifie que c'est bien une image valide - il utilise une boucle For ou il prend en compte toute les valeur de la fenêtre et où il modifie la gamme(=range) (ce qui doit être équivalent au contraste) -il déclenche "FilterProgress" (où il change les valeur du contraste) - et il réécrit l'image..
Mais après je me perd dans le détail de ces actions!
Si tu veux bien continuer à m'expliquer, je serais bien aidé! Cordiallement PierreVal
Hello,
Lévénement FilterBegin est issu de Private WithEvents EdgeMap As clsDIBFx et plus particulièrement de: EdgeMap.ApplyKernel(TempFilter)
Normalement, le code pour contrast devrait se rapprocher (non testé) de ceci: Private ContrastImage As clsDIBFx
Private Sub Form_Load() 'Crée une nouvelle "boite à outils" pour images Set ContrastImage = New clsDIBFx
'Lui affecte une nouvelle image à partir de l'image 'contenue dans le picturebox Call ContrastImage.CreateFromPicture(picImage.Picture, , , , , idRGB)
if ContrastImage.Constrat(320) then Call MsgBox("contrast OK") end if End Sub
Private Sub Form_Resize() Call picImage.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight) End Sub
Private Sub Form_Unload(ByRef Cancel As Integer) Set ContrastImage = Nothing End Sub
Private Sub picImage_Paint() ' Should we draw the edge map? Call ContrastImage.DrawImage(picImage.hDC()) End Sub
En ajoutant le WithEvents, et en gérant les événements il sera possible de déterminer à quel moment l'opération commence et se termine.
François Picalausa
PierreVal
Salut,
euh je lis et relie ton dernier message mais je ne vois pas comment il peut m'aider à résoudre mon problème (on est newbee ou on l'est pas ;)) En fait je ne vois pas comment on modifie le contraste quand l'application est lancé. Du coup je ne comprend pas son raisonnement...
Sinon on m'a conseillé d'utiliser les fonctions de classes mise en place dans ce code pour amélioré ma rapidité (http://www.vbfrance.com/ codes/DKS_GESTION_IMAGE-ACCELERER-TRAITEMENT-IMAGES-30-FOIS-PLUS- RAPIDE_22490.aspx) mais je n'arrive pas même à trouver comment retoucher au valeur des pixels, j'ai pourtant essayé avec une commande et une textbox masi ca n' a pas fonctionné.....
Public Sub Command1_Click() Dim Contrast As Integer Dim x As Integer, y As Integer Dim r As Integer, g As Integer, b As Integer Dim r1 As Integer, g1 As Integer, b1 As Integer Contrast = Val(TxtContrast)
For x = 0 To PCT_TEST.ScaleWidth For y = 0 To PCT_TEST.ScaleHeight Let BYT_ImageByts_Image(pixR, LNG_X + 1, LNG_Y + 1) = r Let BYT_ImageByts_Image(pixG, LNG_X + 1, LNG_Y + 1) = g Let BYT_ImageByts_Image(pixB, LNG_X + 1, LNG_Y + 1) = b
BYT_Red = r1 BYT_Green = g1 BYT_Blue = b1 'relancer la nouvelle valeur Next y 'relancer la nouvelle valeur Next x End Function
Cordiallement, Pierreval
Salut,
euh je lis et relie ton dernier message mais je ne vois pas comment il
peut m'aider à résoudre mon problème (on est newbee ou on l'est
pas ;))
En fait je ne vois pas comment on modifie le contraste quand
l'application est lancé. Du coup je ne comprend pas son
raisonnement...
Sinon on m'a conseillé d'utiliser les fonctions de classes mise en
place dans ce code pour amélioré ma rapidité (http://www.vbfrance.com/
codes/DKS_GESTION_IMAGE-ACCELERER-TRAITEMENT-IMAGES-30-FOIS-PLUS-
RAPIDE_22490.aspx) mais je n'arrive pas même à trouver comment
retoucher au valeur des pixels, j'ai pourtant essayé avec une commande
et une textbox masi ca n' a pas fonctionné.....
Public Sub Command1_Click()
Dim Contrast As Integer
Dim x As Integer, y As Integer
Dim r As Integer, g As Integer, b As Integer
Dim r1 As Integer, g1 As Integer, b1 As Integer
Contrast = Val(TxtContrast)
For x = 0 To PCT_TEST.ScaleWidth
For y = 0 To PCT_TEST.ScaleHeight
Let BYT_ImageByts_Image(pixR, LNG_X + 1, LNG_Y + 1) = r
Let BYT_ImageByts_Image(pixG, LNG_X + 1, LNG_Y + 1) = g
Let BYT_ImageByts_Image(pixB, LNG_X + 1, LNG_Y + 1) = b
euh je lis et relie ton dernier message mais je ne vois pas comment il peut m'aider à résoudre mon problème (on est newbee ou on l'est pas ;)) En fait je ne vois pas comment on modifie le contraste quand l'application est lancé. Du coup je ne comprend pas son raisonnement...
Sinon on m'a conseillé d'utiliser les fonctions de classes mise en place dans ce code pour amélioré ma rapidité (http://www.vbfrance.com/ codes/DKS_GESTION_IMAGE-ACCELERER-TRAITEMENT-IMAGES-30-FOIS-PLUS- RAPIDE_22490.aspx) mais je n'arrive pas même à trouver comment retoucher au valeur des pixels, j'ai pourtant essayé avec une commande et une textbox masi ca n' a pas fonctionné.....
Public Sub Command1_Click() Dim Contrast As Integer Dim x As Integer, y As Integer Dim r As Integer, g As Integer, b As Integer Dim r1 As Integer, g1 As Integer, b1 As Integer Contrast = Val(TxtContrast)
For x = 0 To PCT_TEST.ScaleWidth For y = 0 To PCT_TEST.ScaleHeight Let BYT_ImageByts_Image(pixR, LNG_X + 1, LNG_Y + 1) = r Let BYT_ImageByts_Image(pixG, LNG_X + 1, LNG_Y + 1) = g Let BYT_ImageByts_Image(pixB, LNG_X + 1, LNG_Y + 1) = b