Librairie Effect
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Librairie Effect
Une petite lib pour faire des transformation sur les couleurs.
Les effets disponibles sont les suivants :
- Eclaicir et foncer une couleur (Changer la luminosité)
- Augmenter ou diminure le contraste d'une couleur
- Transformer la couleur en nuance de gris
- Changer l'intensité de la composante rouge, verte ou bleu d'une couleur
- Changer la teinte d'une couleur
vous la trouverez sur mon site
http://perso.wanadoo.fr/lesoldatinconnu/
Les effets disponibles sont les suivants :
- Eclaicir et foncer une couleur (Changer la luminosité)
- Augmenter ou diminure le contraste d'une couleur
- Transformer la couleur en nuance de gris
- Changer l'intensité de la composante rouge, verte ou bleu d'une couleur
- Changer la teinte d'une couleur
vous la trouverez sur mon site
http://perso.wanadoo.fr/lesoldatinconnu/
Dernière modification par Le Soldat Inconnu le sam. 12/févr./2005 16:48, modifié 1 fois.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Tu pourrais indiquer les limites des paramètres
ColorLuminosity
ColorContrast
ColorRedIntensity
ColorGreenIntensity
ColorBlueIntensity
ColorTint
Pour ColorGrey, tu pourrais aussi passer un 2eme paramètre qui serait la référence de gris vers lesquelles la couleur devrait tendre (ce qui permettrait de faire varier le rendu des gris) et donc de la couleur RVB finale.
ColorLuminosity
ColorContrast
ColorRedIntensity
ColorGreenIntensity
ColorBlueIntensity
ColorTint
Pour ColorGrey, tu pourrais aussi passer un 2eme paramètre qui serait la référence de gris vers lesquelles la couleur devrait tendre (ce qui permettrait de faire varier le rendu des gris) et donc de la couleur RVB finale.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
pas saisiPour ColorGrey, tu pourrais aussi passer un 2eme paramètre qui serait la référence de gris vers lesquelles la couleur devrait tendre (ce qui permettrait de faire varier le rendu des gris) et donc de la couleur RVB finale.

tu peux combiner avec ColorLuminosity si c'est ça que tu cherches
sinon, j'ai rajouté les limites des variables d'échelle de chaque fonction dans l'exemple
voici le code de la lib pour ceux que ça intéresse
Code : Tout sélectionner
ProcedureDLL.l ColorLuminosity(Couleur, Echelle.f) ; Eclaicir ou foncer une couleur
Protected Rouge, Vert, Bleu
Rouge = Red(Couleur) * Echelle
Vert = Green(Couleur) * Echelle
Bleu = Blue(Couleur) * Echelle
If Rouge > 255 : Rouge = 255 : EndIf
If Vert > 255 : Vert = 255 : EndIf
If Bleu > 255 : Bleu = 255 : EndIf
ProcedureReturn RGB(Rouge, Vert, Bleu)
EndProcedure
ProcedureDLL.l ColorContrast(Couleur, Echelle.f) ; Constrater la couleur, échelle négative pour diminuer et positive pour augmenter.
Protected Rouge, Vert, Bleu
Rouge = Int(Red(Couleur) * Echelle + 127 * (1 - Echelle))
Vert = Int(Green(Couleur) * Echelle + 127 * (1 - Echelle))
Bleu = Int(Blue(Couleur) * Echelle + 127 * (1 - Echelle))
If Rouge > 255 : Rouge = 255
ElseIf Rouge < 0 : Rouge = 0 : EndIf
If Vert > 255 : Vert = 255
ElseIf Vert < 0 : Vert = 0 : EndIf
If Bleu > 255 : Bleu = 255
ElseIf Bleu < 0 : Bleu = 0 : EndIf
ProcedureReturn RGB(Rouge, Vert, Bleu)
EndProcedure
ProcedureDLL.l ColorGrey(Couleur.l) ; Rendre la couleur en nuance de gris
Couleur = (Red(Couleur) + Green(Couleur) + Blue(Couleur)) / 3
ProcedureReturn RGB(Couleur, Couleur, Couleur)
EndProcedure
ProcedureDLL.l ColorRedIntensity(Couleur, Echelle.f) ; Eclaicir ou foncer la composante rouge d'une couleur
Protected Rouge, Vert, Bleu
Rouge = Red(Couleur) * Echelle
Vert = Green(Couleur)
Bleu = Blue(Couleur)
If Rouge > 255 : Rouge = 255 : EndIf
ProcedureReturn RGB(Rouge, Vert, Bleu)
EndProcedure
ProcedureDLL.l ColorGreenIntensity(Couleur, Echelle.f) ; Eclaicir ou foncer la composante verte d'une couleur
Protected Rouge, Vert, Bleu
Rouge = Red(Couleur)
Vert = Green(Couleur) * Echelle
Bleu = Blue(Couleur)
If Vert > 255 : Vert = 255 : EndIf
ProcedureReturn RGB(Rouge, Vert, Bleu)
EndProcedure
ProcedureDLL.l ColorBlueIntensity(Couleur, Echelle.f) ; Eclaicir ou foncer la composante bleu d'une couleur
Protected Rouge, Vert, Bleu
Rouge = Red(Couleur)
Vert = Green(Couleur)
Bleu = Blue(Couleur) * Echelle
If Bleu > 255 : Bleu = 255 : EndIf
ProcedureReturn RGB(Rouge, Vert, Bleu)
EndProcedure
ProcedureDLL.l ColorTint(Couleur, Echelle.f) ; Changer la teinte d'une couleur (Echelle comprise entre -1 et 1)
Protected Rouge, Vert, Bleu
Rouge = Red(Couleur)
Vert = Green(Couleur)
Bleu = Blue(Couleur)
If Echelle > 0
Rouge = Rouge * (1 - Echelle) + Bleu * Echelle
Vert = Vert * (1 - Echelle) + Rouge * Echelle
Bleu = Bleu * (1 - Echelle) + Vert * Echelle
Else
Rouge = Rouge * (1 + Echelle) - Vert * Echelle
Vert = Vert * (1 + Echelle) - Bleu * Echelle
Bleu = Bleu * (1 + Echelle) - Rouge * Echelle
EndIf
ProcedureReturn RGB(Rouge, Vert, Bleu)
EndProcedure
Dernière modification par Le Soldat Inconnu le ven. 06/août/2004 15:02, modifié 1 fois.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Bon, j'ai ajouté de nouveau effet et fait une correction sur ColorTint
j'ai également ajouté un exemple d'étideur d'image qui permet d'essayer chaque effet de la lib sur une image. c'est plus parlant.
c'est ici : (7 ko)
http://perso.wanadoo.fr/lesoldatinconnu ... Effect.zip
j'ai également ajouté un exemple d'étideur d'image qui permet d'essayer chaque effet de la lib sur une image. c'est plus parlant.
c'est ici : (7 ko)
http://perso.wanadoo.fr/lesoldatinconnu ... Effect.zip
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Pour une fonction de dégradé :
Et dans un résident :
A+
Guimauve
Code : Tout sélectionner
ProcedureDLL DrawGradient(Color1.l, Color2.l, NbColor.l, largeur.l, hauteur.l, OutputID.l, Orientation.b)
rt = Red(Color1)
rd = Red(Color2) - rt
gt = Green(Color1)
gd = Green(Color2) - gt
bt = Blue(Color1)
bd = Blue(Color2) - bt
StartDrawing(OutputID)
If Orientation = #Vertical
While i < NbColor
r = MulDiv_(i, rd, NbColor) + rt
g = MulDiv_(i, gd, NbColor) + gt
b = MulDiv_(i, bd, NbColor) + bt
y = MulDiv_(i, hauteur, Nbcolor)
h = MulDiv_(i + 2, hauteur, NbColor)
Box( 0, y, largeur, h, RGB(r, g, b))
i + 1
Wend
ElseIf Orientation = #Horizontal
While i < NbColor
r = MulDiv_(i, rd, NbColor) + rt
g = MulDiv_(i, gd, NbColor) + gt
b = MulDiv_(i, bd, NbColor) + bt
x = MulDiv_(i, largeur, Nbcolor)
l = MulDiv_(i + 2, largeur, NbColor)
Box(x, 0, l, hauteur, RGB(r, g, b))
i + 1
Wend
EndIf
StopDrawing()
EndProcedure
Code : Tout sélectionner
Enumeration
#Vertical
#Horizontal
EndEnumeration
Guimauve
Je sais plus où je l'ai reprise. Mais je pense qu'elle vient de CodeArchive. Mais je suis pas sûr. Faudrait peut-être que je prenne l'habitude de le noter en commentaire dans le début du source.
Il y a ces deux autres procédures pour les images :
Faire un renversement de l'image. Voir sur code archive
Charger un image avec une transparence. Un code de Danilo (Merçi)
N.B. MirrorImage() s'effectue sur l'image en cours. Donc un UseImage(),Createimage(), ou un LoadImage() juste avant l'appel de cette procédure pour que la transformation fonctionne. Les mêmes Constantes que pour la fonction de dégradé : #Vertical et #Horizontal.
A+
Guimauve
Il y a ces deux autres procédures pour les images :
Faire un renversement de l'image. Voir sur code archive
Charger un image avec une transparence. Un code de Danilo (Merçi)
N.B. MirrorImage() s'effectue sur l'image en cours. Donc un UseImage(),Createimage(), ou un LoadImage() juste avant l'appel de cette procédure pour que la transformation fonctionne. Les mêmes Constantes que pour la fonction de dégradé : #Vertical et #Horizontal.
A+
Guimauve
Code : Tout sélectionner
ProcedureDLL MirrorImage(Orientation.b)
Width.l = ImageWidth()
Height.l = ImageHeight()
If Orientation = #Vertical
hDC = StartDrawing(ImageOutput())
StretchBlt_(hDC, 0, Height, Width, -Height, hDC, 0, 0, Width, Height, #SRCCOPY)
StopDrawing()
ElseIf Orientation = #Horizontal
hDC = StartDrawing(ImageOutput())
StretchBlt_(hDC, Width, 0, -Width, Height, hDC, 0, 0, Width, Height, #SRCCOPY)
StopDrawing()
EndIf
EndProcedure
ProcedureDLL LoadTransparentImage(Number, FileName$, TransColor, NewColor)
; >
; > Number = ImageNumber
; > FileName$ = File Name
; > TransColor = RGB: Transparent Color, -1 = First Color in Picture
; > NewColor = RGB: New Color for TransColor, -1 = System Window Background
; >
Structure _LTI_BITMAPINFO
bmiHeader.BITMAPINFOHEADER
bmiColors.RGBQUAD[1]
EndStructure
Structure _LTI_LONG
l.l
EndStructure
hBmp = LoadImage(Number, FileName$)
If hBmp
hDC = StartDrawing(ImageOutput())
If hDC
ImageWidth = ImageWidth()
ImageHeight = ImageHeight()
mem = GlobalAlloc_(#GMEM_FIXED | #GMEM_ZEROINIT, ImageWidth * ImageHeight * 4)
If mem
bmi._LTI_BITMAPINFO
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiheader\biWidth = ImageWidth
bmi\bmiheader\biHeight = ImageHeight
bmi\bmiheader\biPlanes = 1
bmi\bmiheader\biBitCount = 32
bmi\bmiheader\biCompression = #BI_RGB
If GetDIBits_(hDC, hBmp, 0, ImageHeight(), mem, bmi, #DIB_RGB_COLORS) <> 0
If TransColor = -1
*pixels._LTI_LONG = mem + ((ImageHeight - 1) * ImageWidth * 4)
TransColor = *pixels\l
Else
TransColor = RGB(Blue(TransColor), Green(TransColor), Red(TransColor))
EndIf
If NewColor = -1
NewColor = GetSysColor_(#COLOR_3DFACE)
EndIf
NewColor = RGB(Blue(NewColor), Green(NewColor), Red(NewColor))
*pixels._LTI_LONG = mem
For a = 1 To ImageWidth * ImageHeight
If * pixels\l = TransColor
*pixels\l = NewColor
EndIf
*pixels + 4
Next a
If SetDIBits_(hDC, hBmp, 0, ImageHeight(), mem, bmi, #DIB_RGB_COLORS) <> 0
Result = hBmp
EndIf
EndIf
GlobalFree_(mem)
EndIf
EndIf
StopDrawing()
EndIf
ProcedureReturn Result
EndProcedure
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
si j'ajoute des transformations sur les images dans ma lib, genre rotation à droite ou a gauche, symétrie, négatif
ça intéresserait du monde ou pas ?
ça intéresserait du monde ou pas ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
moi oui regis
ceci dit peut etre rentrerais tu en "concurrence" avec d'autres userlib existentes faite en ASM
il me semble bien qu'il en existe... je v voir...
vu sur purearea.net :
lib "effects" http://www.purearea.net/pb/download/use ... ffects.zip
lib "rotation" http://www.purearea.net/pb/download/use ... ations.zip
lib "X2D" http://www.purearea.net/pb/download/userlibs/X2D.zip
essaye et juge par toi meme
ta lib resterais cohérente en y rajoutant du traitement d'images

ceci dit peut etre rentrerais tu en "concurrence" avec d'autres userlib existentes faite en ASM
il me semble bien qu'il en existe... je v voir...
vu sur purearea.net :
lib "effects" http://www.purearea.net/pb/download/use ... ffects.zip
lib "rotation" http://www.purearea.net/pb/download/use ... ations.zip
lib "X2D" http://www.purearea.net/pb/download/userlibs/X2D.zip
essaye et juge par toi meme
ta lib resterais cohérente en y rajoutant du traitement d'images
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :