Inverse de rgb

Contenu du snippet

2 procedure
donne les couleur RGB a partir d'un TColor ou un dword (en asm=+rapide, en pascal=+comprehensible)
mais ce code n'est pas optimizé (pas dutout :-s)

Source / Exemple :


//creer les variables au debut du prog
var
rouge,vert,bleu:Byte;

//(...)
Procedure RGBFromLongASM(Couleur:TColor); //version asm
begin

asm
 push eax
 push ebx

 //bleu
 mov eax,couleur
 shr eax,16
 mov bleu,al

 //vert
 xor ebx,ebx
 mov eax,couleur //eax=couleur
 mov bl,bleu   //ebx=bleu
 imul ebx,65536//ebx=ebx*2^16
 sub eax,ebx   //eax=eax-ebx
 shr eax,8     //eax=eax/2^8
 mov vert,al
 
 //rouge
 xor ebx,ebx
 mov eax,couleur
 mov bl,bleu
 imul ebx,65536
 sub eax,ebx
 mov rouge,al

 pop ebx
 pop eax
 end;
end;

Procedure RGBFromLongPascal(Couleur:TColor); //d'apres le code de fabiin sur un forum vb :)
var
begin
Bleu:=Byte(Trunc(Couleur / 65536));
Vert:=Byte(Trunc(Couleur - Bleu * 65536) / 256));
Rouge = Byte(Trunc(Couleur - Bleu * 65536 - Vert* 256));
end;

Conclusion :


j'aimerai l'amelioré en creeant un type contenant les 3 variables mais je c pas le faire :-\
d'avance merci.
Pliz des commentaires, meme pour m'insulter :)!!!

A voir également

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.