Page 1 sur 1
demander a la carte graphique qque chose
Publié : dim. 21/août/2005 21:43
par kelly
On est sous PB, ok, mais n'y a t'il pas moyen d'envoyer a la carte graphique un mapping (une image d'une certaine largeur et hauteur) et de lui dire de l'afficher en "3d"; sous entendu de jouer sur les 3 axes de rotations ?
Une autre question mais plus "purebasic" : est il possible sur une image de ne travailler qu'avec la composante ROUGE par exemple ? (malgré que l'image comprenne aussi du V et du B)
Publié : dim. 21/août/2005 22:43
par Oliv
Je ne suis pas sur d'avoir bien compris la deuxième question mais je dirais en utilisant la commande red() ?
Publié : dim. 21/août/2005 22:48
par morukutsu
Il y avait quelqu'un qui avait fait un code ou il y avait des virus R,G,B qui mangeaient seulement une composante de couleur de l'image . Il faut chercher le code sur le forum mais il doit pas etre bien loin ...
Publié : dim. 21/août/2005 22:51
par djes
Sous windows, tu ne peux pas piloter "directement" la carte graphique. Il faut passer par une API. Tu as le choix entre DirectX et OpenGL. Purebasic gère "nativement" le DirectX 7.0. Par le biais de bibliothèques, ou en accédant aux fonctions systèmes, il peut gérer le reste. Tu as de nombreux exemples un peu partout, notamment sur CodeArchiv.
Publié : dim. 21/août/2005 23:00
par kelly
morukutsu a écrit :Il y avait quelqu'un qui avait fait un code ou il y avait des virus R,G,B qui mangeaient seulement une composante de couleur de l'image . Il faut chercher le code sur le forum mais il doit pas etre bien loin ...
C'est moi qui a codé ca

Publié : lun. 22/août/2005 2:30
par kelly
Pour la 2eme question, je veux par exemple faire une copie d'un morceau d'ecran autre part mais ne copier QUE ce qui concerne la composante rouge
Publié : lun. 22/août/2005 3:13
par fweil
@kelly,
Voici un exemple de traitement par canal RVB.
Utilises les touches du clavier :
- Espace pour générer une image aléatoire
- R pour afficher le canal rouge
- G pour afficher le canal vert
- B pour afficher le canal bleu
La procedure Random_Image permet de créer une image bidon. Tu peux remplacer l'appel de Random_Image par un LoadImage ou ce que tu veux.
Le code est basique et pas du tout optimisé, mais le résultat est assez rapide pour se rendre compte.
Code : Tout sélectionner
Enumeration
#Window_Main
#Gadget_Image
#Image
EndEnumeration
;
; Random image.
;
Procedure Random_Image(Width.l, Height.l)
ImageID = CreateImage(#Image, Width, Height)
StartDrawing(ImageOutput())
For i = 1 To 100
Box(Random(Width), Random(Height), Random(Width), Random(Height), Random($FFFFFF))
Next
For i = 1 To 1000
LineXY(Random(Width), Random(Height), Random(Width), Random(Height), Random($FFFFFF))
Next
For i = 1 To 200
DrawingMode(1)
BackColor(0, 0, 0)
FrontColor(Random($FF), Random($FF), Random($FF))
Locate(Random(Width), Random(Height))
DrawText("Text " + Str(i))
Next
StopDrawing()
ProcedureReturn ImageID
EndProcedure
Procedure RGB_Channels(Channel.l)
UseImage(#Image)
ImageHeight = ImageHeight()
ImageWidth = ImageWidth()
StartDrawing(ImageOutput())
For y = 0 To ImageHeight - 1
For x = 0 To ImageWidth - 1
Plot(x, y, Point(x, y) & Channel)
Next
Next
StopDrawing()
SetGadgetState(#Gadget_Image, ImageID())
EndProcedure
WindowWidth = 640
WindowHeight = 480
If OpenWindow(#Window_Main, 0, 0, WindowWidth, WindowHeight, #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) ; Quit
AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Space, #PB_Shortcut_Space) ; Refresh random image
AddKeyboardShortcut(#Window_Main, #PB_Shortcut_R, #PB_Shortcut_R) ; Red channel
AddKeyboardShortcut(#Window_Main, #PB_Shortcut_G, #PB_Shortcut_G) ; Green channel
AddKeyboardShortcut(#Window_Main, #PB_Shortcut_B, #PB_Shortcut_B) ; Blue channel
If CreateGadgetList(WindowID(#Window_Main))
ImageGadget(#Gadget_Image, 10, 10, WindowWidth - 20, WindowHeight - 20, Random_Image(WindowWidth - 20, WindowHeight - 20))
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_Space
SetGadgetState(#Gadget_Image, Random_Image(WindowWidth - 20, WindowHeight - 20))
Case #PB_Shortcut_R
RGB_Channels(#Red)
Case #PB_Shortcut_G
RGB_Channels(#Green)
Case #PB_Shortcut_B
RGB_Channels(#Blue)
EndSelect
EndSelect
Until Quit
EndIf
End
Publié : lun. 22/août/2005 4:03
par kelly
je vais analyser ca =)
thx