Asm/delphi dessiner un pixel en assembleur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 633 fois - Téléchargée 27 fois

Contenu du snippet

Voilà mon tout premier code en assembleur (soyez indulgents ;o) ).
Il permet de dessiner un point aux coordonnées x,y avec la couleur de votre choix sur un canvas par exemple.
Pour l'utiliser : MonSetPixel(canvas.handle,10,10,clred); par exemple.

Source / Exemple :


procedure MonSetPixel(handle : hdc;x,y:integer;couleur:TColor); 
asm
  // sauvegarde des registres
  pushad
  pushfd
  push eax
  push ebx
  mov ebx,eax
  // on dessine le point
  push couleur
  push y
  push x
  push handle
  call SetPixel //appel de la fonction setpixel
  //on recupere les registres
  mov eax,ebx
  pop ebx
  pop eax
  popfd
  popad
end;

Conclusion :


Tous les commentaires sont les bienvenus.
Pour le niveau vu que je débute je mets 1...

A voir également

Ajouter un commentaire

Commentaires

jlmcom
Messages postés
57
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
3 décembre 2004
2
Merci à vous Magic56 et balgrim pour votre contribution!

je vais avoir besoin de me remettre un peu à l'assembleur: travail sur RAM vidéo, car je n'ai pas trouvé de fonction en delphi pour lire les tables du jeu de caractères en réserve.

je suis de la génération Z80, alors vous comprenez ma déroute dans ce monde de vitesse Giga micropro!

mais si passionnant!

merci!

jlmcom
balgrim
Messages postés
52
Date d'inscription
vendredi 26 avril 2002
Statut
Membre
Dernière intervention
28 octobre 2003

Ta source ne dessine pas un pixel, elle appelle l'api windows setpixel, et c'est elle qui le dessine... Bon voila un petit truc que j'ai fait, qui est bcp plus rapide que le pixel[x,y]:

procedure MXPoint(Bitmap:TBitmap;X,Y:dword;color:dword);
var
p1:pointer;
begin
if (X>Bitmap.Height-1) or (Y>Bitmap.Width-1) then exit;
p1:=Bitmap.ScanLine[X-1];
case Bitmap.PixelFormat of
pf32bit:
asm
push edi
mov edi,p1
mov eax,y
shl eax,2
add edi,eax
mov eax,color
mov [edi],eax
pop edi
end;
pf24bit:
asm
push edi
mov edi,p1
mov eax,y
imul eax,3
add edi,eax
mov eax,color
mov ecx,eax
shr ecx,16
mov [edi],ax
mov [edi+2],cl
pop edi
end;
else
bitmap.Canvas.Pixels[X,Y]:=Color;
end;

Elle est pas toute a fait au point, il doit y avoir qque bug :) enfin vala la ça ecrit directement 1 pixel dans le bitmap ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.