conversion en 256 couleur.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jef
Messages : 11
Inscription : jeu. 29/juil./2004 12:19

conversion en 256 couleur.

Message par jef »

Salut!!


voila, j ai un petit prb, je cherche a convertir les couleurs RGB de n importe kel format en RGB a 256 couleurs...

pour plus de details, je recupere dans un fichier de tracer hpgl/2 les couleurs RGB, puis je voudrai les convertir en RGB 256 couleurs.

Si qq a une solution ou a deja vu ce sujet traiter :?

merci d'avance!!
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

le problème pour la conversion c k'en 256 couleurs tu as une palette...

Dri
jef
Messages : 11
Inscription : jeu. 29/juil./2004 12:19

Message par jef »

oui y a une palette et je l a connais mais comment faire? :?:
sur certain logiciel de dessin, on arrive bien a baisser le nombre de couleur mais ché po comment ca marche :(
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

il faut traiter le prob par ressemblance de couleur, c'est pas simple, il faut regarder combien on a de couleur différentes et les compter.
si on en a plus de 256 couleur, il faut regrouper celle qui sont très proches, et regrouper les couleurs de plus en plus éloignée jusqu'a descendre à 256 couleurs

cela suppose d'avoir une fonction qui permet de comparer 2 couleurs en retournant un niveau de ressemblance, pas evident.
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)]
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Voici une idée de réponse pour transformer l'image en 256 niveaux. L'algorithme rend effectivement un résultat en 256 couleurs.

On peut perfectionner la chose du point de vue de l'algo de transformation.

Reste à ajouter éventuellement la création de la palette correspondante si on veut effectivement créer le fichier image en 256 niveaux.

Code : Tout sélectionner

Enumeration
  #Window_Main
  #Image
  #Gadget_Image
  #Gadget_Button_Select
  #Gadget_Button_Modify
  #Gadget_TrackBar_Text
  #Gadget_TrackBar
EndEnumeration

Procedure SetColor256(Image.l, Brightness.f)
  Beep_(440, 10)
  UseImage(Image)
  StartDrawing(ImageOutput())
    ImageWidth = ImageWidth()
    ImageHeight = ImageHeight()
    Dim Pixels(ImageWidth - 1, ImageHeight - 1)
    For x = 0 To ImageWidth - 1
      For y = 0 To ImageHeight - 1
        ;
        ; Each point corresponds to a $FFFFFF color transformed from $RRGGBB to $RR + $GG + $BB limited to 255
        ; As a result we have finally 0-255 possible values.
        ;
        ; The $FF result is then transformed to $FFFFFF for a grey / white / black colorset
        ;
        ; The brightness variable allows to shadow / enhance the effect
        ;
        Value = Point(x, y)
        Value = Red(Value) * Brightness + Green(Value) * Brightness + Blue(Value) * Brightness
        If Value > 255
            Value = 255
        EndIf
        Value = RGB(Value, Value, Value)
        Pixels(x, y) = Value
      Next
    Next
  StopDrawing()
  ImageID = CreateImage(#Image, ImageWidth, ImageHeight)
  StartDrawing(ImageOutput())
    For x = 0 To ImageWidth - 1
      For y = 0 To ImageHeight - 1
        Plot(x, y, Pixels(x, y))
      Next
    Next
  StopDrawing()
  Beep_(440, 50)
  ProcedureReturn ImageID
EndProcedure

;
;
;
  UseJPEGImageDecoder()
  WindowWidth = 640
  WindowHeight = 480
  ImageWidth = WindowWidth
  ImageHeight = WindowHeight - 40
  If OpenWindow(#Window_Main, 0, 0, WindowWidth, WindowHeight + 20, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "MyWindow")
      AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Escape, #PB_Shortcut_Escape)
      AddKeyboardShortcut(#Window_Main, #PB_Shortcut_F1, #PB_Shortcut_F1)
      If CreateGadgetList(WindowID(#Window_Main))
          ImageGadget(#Gadget_Image, 0, 40, ImageWidth, ImageHeight, CreateImage(#Image, ImageWidth, ImageHeight))
          ButtonGadget(#Gadget_Button_Select, 10, 10, 80, 20, "Select image")
          ButtonGadget(#Gadget_Button_Modify, 100, 10, 80, 20, "Modify image")
          SetGadgetFont(#PB_Any, LoadFont(0, "Verdana", 7, #PB_Font_HighQuality))
          TextGadget(#Gadget_TrackBar_Text, 200, 0, 100, 10, "n = 0.50",#PB_Text_Center)
          TrackBarGadget(#Gadget_TrackBar, 200, 15, 100, 10, 0, 20, #PB_TrackBar_Ticks) ; TrackBar state will be transformed to a 0.0 - 2.0 range value with a 0.1 step.
          SetGadgetState(#Gadget_TrackBar, 6)
      EndIf
      Quit = #FALSE
      Repeat
        Select WaitWindowEvent()
          Case #PB_Event_CloseWindow
            Quit = #TRUE
          Case #PB_Event_Menu
            Select EventMenuID()
              Case #PB_Shortcut_Escape
                Quit = #TRUE
              Case #PB_Shortcut_F1
                Statistics = 1 - Statistics
            EndSelect
          Case #PB_Event_Gadget
            Select EventGadgetID()
              Case #Gadget_Button_Select
                FileName.s = OpenFileRequester("Please choose file to load", "Image.jpg", "Graphical files BMP JPEG|*.bmp;*.jpg;*.jpeg|*.*", Pattern)
                SetGadgetState(#Gadget_Image, LoadImage(#Image, FileName))
              Case #Gadget_Button_Modify
                ImageGadget(#Gadget_Image, 0, 40, ImageWidth, ImageHeight, SetColor256(#Image, (2 * GetGadgetState(#Gadget_TrackBar) / 20)))
              Case #Gadget_TrackBar
                SetGadgetText(#Gadget_TrackBar_Text, "n = " + StrF(2 * GetGadgetState(#Gadget_TrackBar) / 20, 2))
            EndSelect
        EndSelect
      Until Quit
  EndIf
End
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Répondre