- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 

Övertoning med Assembler Kategori: Grafik
Inlagt: 2005-02-10
Läst: 1423
Inlagt av: Staffan Berg
Beskrivning
Skapa en grafisk övertoning i delphi med hjälp av Assemblerkod. 
Kod
function BlendColor(ColorA, ColorB, Size: Integer{0-256}): Integer; 
var R: Integer; 
asm //ColorA->EAX ColorB->EDX Size->ECX 
//red 
PUSH EAX //save ColorA value 
AND EAX,255 //get red channel only 
PUSH EDX //save ColorB 
MUL ECX //EAX:=EAX*Size 
POP EDX //open ColorB 
AND EDX,255 //get red channel only 
MOV R,EAX //R:=EAX 
MOV EAX,EDX //EAX:=ColorB 
PUSH EDX //save ColorB 
MOV EDX,256 //EDX:=256 
SUB EDX,ECX //EDX:=EDX-Size 
MUL EDX //EAX:=EAX*EDX 
ADD EAX,R //EAX:=EAX+R 
SHR EAX,8 //EAX:=EAX div 256 
MOV @Result,EAX //Result:=Result+EAX 
POP EDX //open ColorB 
POP EAX //open ColorA 
//green 
PUSH EAX //save ColorA value 
SHR EAX,8 //get green channel only 
AND EAX,255 
PUSH EDX //save ColorB 
MUL ECX //EAX:=EAX*Size 
POP EDX //open ColorB 
SHR EDX,8 //get green channel only 
AND EDX,255 
MOV R,EAX //R:=EAX 
MOV EAX,EDX //EAX:=ColorB 
PUSH EDX //save ColorB 
MOV EDX,256 //EDX:=256 
SUB EDX,ECX //EDX:=EDX-Size 
MUL EDX //EAX:=EAX*EDX 
ADD EAX,R //EAX:=EAX+R 
SHR EAX,8 //EAX:=EAX div 256 
SHL EAX,8 //EAX:=EAX*256 
ADD @Result,EAX //Result:=Result+EAX 
POP EDX //open ColorB 
POP EAX //open ColorA 
//blue 
PUSH EAX //save ColorA value 
SHR EAX,16 //get blue channel only 
PUSH EDX //save ColorB 
MUL ECX //EAX:=EAX*Size 
POP EDX //open ColorB 
SHR EDX,16 //get blue channel only 
MOV R,EAX //R:=EAX 
MOV EAX,EDX //EAX:=ColorB 
PUSH EDX //save ColorB 
MOV EDX,256 //EDX:=256 
SUB EDX,ECX //EDX:=EDX-Size 
MUL EDX //EAX:=EAX*EDX 
ADD EAX,R //EAX:=EAX+R 
SHR EAX,8 //EAX:=EAX div 256 
SHL EAX,16 //EAX:=EAX*256*256 
ADD @Result,EAX //Result:=Result+EAX 
POP EDX //open ColorB 
POP EAX //open ColorA 
end; 
 
 
 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -