Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

contraste sans get et set pixel c'est possible?

8 réponses
Avatar
PierreVal
Bonjour,

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


'final picture refresh
Picture1.Refresh

End Sub

8 réponses

Avatar
François Picalausa
On 4月16日, 午後4:27, "PierreVal" uf.fr> wrote:
Bonjour,

Comment est ce que je peux modifier le contraste de ces élements sans
les fontion get et Set pixel ????



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://edais.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
Avatar
PierreVal
> 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....??...

cordiallement,
Pierre
Avatar
François Picalausa
On 4月16日, 午後4:59, "PierreVal" uf.fr> wrote:
> 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 GD I:http://edais.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



L'application de démonstration ne montre que comment réaliser la
fonction "edge detection" (détection des bordures - avec la touche
Ctrl, le curseur de la souris colle à cette bordure).
Dans la classe clsDIBFx.cls, il y a une fonction Constrat appliquant
un effet de contraste:
Public Function Constrat(ByVal inNewRange As Long) As Boolean
' Basic image filter to adjust the contrast of the internal image
to the new range
' File d'image permettant d'ajuster le contraste de l'image
interne à la nouvelle plage
' < 255 = Less contrast (contraste moindre)
' 255 = No change (sans changement)
' > 255 = More contrast (contraste plus élevé)

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

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
Avatar
Jacques93
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.
Avatar
François Picalausa
On 16 avr, 17:13, Jacques93 wrote:
Bonjour François Picalausa,
François Picalausa a écrit :

> On 4月16日, 午後4:27, "PierreVal" <Pierre.. 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 ?



Hello,

A tout hazard, je pense que c'est du japonais, et ça signifie
- 4月 : Avril
- 16日 : 16 ème jour du mois
- 午後 : Après-midi
Plus sérieusement, c'est un problème quand la moitier des applica tions
sont configurées sur une langue étrangère (pour aider à
l'apprentissage de la langue en question dans mon cas) on en oublie
l'impact :-)
Cela étant, ça devrait être réglé...

François
Avatar
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
Avatar
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
Avatar
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

r1 = (r + (((r - 127) * Contrast) 100))
g1 = (g + (((g - 127) * Contrast) 100))
b1 = (b + (((b - 127) * Contrast) 100))

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