comment récupérer la couleur d´un pixel sous windows XP

comment récupérer la couleur d´un pixel sous windows XP - ASM - Programmation

Marsh Posté le 04-05-2005 à 15:13:34    

Bonjour,  
 
J´ai développé en assembleur mirco sous DOS y´a bien longtemps. Je dois parvenir à balayer l´écran le plus rapidement possible sous windows XP, pixel par pixel (reproduire l´écran d´un Pc sur une autre comme une application de remote control en ""LIFE"" ). Existe-il une instruction ou est-il possible de lire directement dans la mémoire vidéo à partir de l´assembleur (le but étant la vitesse). Je ne sais pas si assembleur est la bonne solution, mais je suis à la recherche de toute solution possible.  
 
Merci,
 
thebiche

Reply

Marsh Posté le 04-05-2005 à 15:13:34   

Reply

Marsh Posté le 04-05-2005 à 15:29:09    

Commence parfaire un truc qui marche en C avant de sortir l'assembleur.
Non on peut pas lire directement la mémoire. Mais tu peux récupérer sans problème ce qui est affiché sur le bureau. Voir la manipulation des bitmaps (GetDC( GetDesktopWindow() ), CreateCompatibleDC, CreateCompatibleBitmap, BitBlt...)
 

Citation :

remote control en ""LIFE""


c'est pas en lailleveux plutôt ? ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 04-05-2005 à 15:38:58    

salut,
 
J´ai déjà essayé vers cette solution. Pas en C mais avec VB (getPixel de la lib gdi32). Pour une résolution de 640 X 480, je peux faire au mieux, 10 ballayages par minutes, et le PC ram tant qu´il peut. Maitenant si tu voyais une autre solution plus performant, je suis preneuse.  
 
Voila ce que j ai tenté qui fonctionne bien mais le PC RAM tant qu il peut avec 512 MB RAM et 2.6 ghz
 
Private Sub Command1_Click()
    MakeTopMost (Me.hdc)
     
    update = True
    Dim sx As Integer
    Dim sy As Integer
     
    Dim tPOS As POINTAPI
    Dim sTmp As String
    Dim lColor As Long
    Dim lDC As Long
    lDC = GetWindowDC(0)
    Dim hform As Long
    hform = Me.hdc
 
    While (update)
        sx = sx + 1
        If (sx > 640) Then
            sx = 0
            sy = sy + 1
        End If
        If (sy > 480) Then
            sy = 0
        End If
        lColor = GetPixel(lDC, sx, sy)
        Rem SetPixel hform, sx, sy, vbWhite
        Rem SetPixel hform, sx + 1, sy + 1, vbBlack
         
        DoEvents
    Wend
 
End Sub

Reply

Marsh Posté le 04-05-2005 à 15:39:28    

a vi et bien sure je voudrais tout ca en : lailleveux ;)

Reply

Marsh Posté le 04-05-2005 à 15:42:35    

tu crois que ce serait plus performant en C sinon tant qu on y est ca va me permettre de réouvrir tous les vieux syllabus de mes cours qui pourrissent dans le grenier C c est y a bien longtem ca !!! Enfin entre deux j ai fait du développement COBOL la terre est bien basse pour moi :)

Reply

Marsh Posté le 04-05-2005 à 15:55:40    

En C ce sera plus performant, mais pas énormément certainement.
Ce qui est lent c'est GetPixel. Faut récupérer directement un tableau de bits via GetDIBits.
http://eric.aling.tripod.com/PB/tips/pbtip35.htm
http://www.vb-helper.com/howto_getdibits.html


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed