Page 1 sur 1

conversion en 256 couleur.

Publié : sam. 11/juin/2005 12:43
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!!

Publié : sam. 11/juin/2005 13:29
par Dr. Dri
le problème pour la conversion c k'en 256 couleurs tu as une palette...

Dri

Publié : mer. 15/juin/2005 15:32
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 :(

Publié : mer. 15/juin/2005 20:55
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.

Publié : jeu. 16/juin/2005 6:19
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