PureBasic

Forums PureBasic
Nous sommes le Sam 25/Mai/2013 8:09

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 111 messages ]  Aller à la page 1, 2, 3, 4, 5 ... 8  Suivante
Auteur Message
 Sujet du message: Librairie Effect
MessagePosté: Ven 06/Aoû/2004 13:47 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
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/

_________________
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)]


Dernière édition par Le Soldat Inconnu le Sam 12/Fév/2005 16:48, édité 1 fois.

Haut
 Profil  
 
 Sujet du message:
MessagePosté: Ven 06/Aoû/2004 14:50 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
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.

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Ven 06/Aoû/2004 14:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
Citation:
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.

pas saisi :roll:
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:
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

_________________
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)]


Dernière édition par Le Soldat Inconnu le Ven 06/Aoû/2004 15:02, édité 1 fois.

Haut
 Profil  
 
 Sujet du message:
MessagePosté: Ven 06/Aoû/2004 15:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
Je viens de faire des essais avec colorgrey

La nuance de gris varie en fonction de la couleur de base et ca ne donne rien avec le noir ou le blanc.

Donc sur ce point, j'ai dit une connerie :oops:
Mais bon, ça sera pas la dernière :mrgreen:

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Ven 06/Aoû/2004 15:03 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
A la base, ColorGrey est pour transformer une image en couleur en image en nuance de gris par exemple

_________________
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)]


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Dim 08/Aoû/2004 14:14 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
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

_________________
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)]


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Sam 04/Sep/2004 15:16 
Hors ligne

Inscription: Jeu 29/Jan/2004 0:26
Messages: 2309
n'est il pas possible d'intégrer les fonctions de dégradé (voir le post sur le prog de defrag) dans ta lib, regis ?


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Sam 04/Sep/2004 18:13 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
Pour une fonction de dégradé :

Code:
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


Et dans un résident :

Code:
Enumeration
    #Vertical
    #Horizontal
EndEnumeration


A+
Guimauve


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Sam 04/Sep/2004 23:01 
Hors ligne

Inscription: Jeu 29/Jan/2004 0:26
Messages: 2309
c'est pas la meme routine que regis, çà :)
elle marche nickel, a toi de jouer regis


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Dim 05/Sep/2004 2:41 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
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

Code:
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


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 06/Sep/2004 15:07 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
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 ?

_________________
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)]


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 07/Sep/2004 6:01 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
Bien moi j'ai mis une procédure de "symétrie" MirrorImage() dans le code précédent. J'en ai eu besoin dans un de mes programmes. Pour la rotation, et je n'ai pas pris le temps de coder une procédure pour faire ça.

Oui je trouve que ça pourrait être intéressant.

A+
Guimauve


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 07/Sep/2004 18:59 
Hors ligne

Inscription: Jeu 29/Jan/2004 0:26
Messages: 2309
moi oui regis :wink:
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/userlibs/effects.zip
lib "rotation" http://www.purearea.net/pb/download/userlibs/Rotations.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


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 07/Sep/2004 22:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
question bête, en asm ou avec PB, ça change quoi vu que PB compile en ASM

_________________
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)]


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 07/Sep/2004 22:31 
Hors ligne

Inscription: Jeu 29/Jan/2004 0:26
Messages: 2309
ca change presque rien...
juste une question d'optimisation du code assembleur.
et donc de la rapidité et/ou de la taille de l'exe


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 111 messages ]  Aller à la page 1, 2, 3, 4, 5 ... 8  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye