Also Pixels solltest du besser lassen, denn das geht immer über die Window API und das sind alles Funktionsaufrufe. Das ist einfach nur Langsam. Ich muss aber gestehen, dass ich nicht genau weiß was du schreiben musst. Und Code in Delphi wird dir sicher nicht viel helfen. Den gibt aber auch zu hauf im Delphi Forum.
Ich habe aber folgenden Code im Netz gefunden der das eigentlich verdeutlichen sollte.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Byte *ptr; for (int y = 0; y < radio_grand->Picture->Bitmap->Height; y++) { ptr = (Byte *)radio_grand->Picture->Bitmap->ScanLine[y];
for (int x = 0; x < 4*radio_grand->Picture->Bitmap->Width-2; x+=4) { ptr[x]=0xff; ptr[x+1]=0xcc; ptr[x+2]=0xaa; } } |
Dort wird der Pointer aus Scanline genommen und ihm Daten zugewiesen. Du hast in der Deklarationen aber bereits einen Datenbereich erstellt und bei
static_cast<TColor *> vermute ich einfach mal stark, dass du nicht nur den Pointer benutzt sondern ihn dereferenzierst und die Daten kopierst. Wobei ich bei
TColor* sogar fast vermute, dass du nur
ein einziges Pixel kopierst.
Zum Verrechnen des Alphas würde ich die Optimierungen erst mal weglassen und es funktional hinbekommen.
Quelltext
1: 2: 3:
| ptrZiel[x]= ptrBild1[x] * Alpha + ptrBild2[x] * (1-Alpha); ptrZiel[x+1]= ptrBild1[x+1] * Alpha + ptrBild2[x+1] * (1-Alpha); ptrZiel[x+2]= ptrBild1[x+2] * Alpha + ptrBild2[x+2] * (1-Alpha); |
Die
ptr... Variablen sind nur pseudo. Also da musst du natürlich deine benutzen. Alpha ist dabei ein Floatwert im Bereich von 0-1. Die Konvertierung zwischen Float und Byte sollte der Compiler hoffentlich alleine hinbekommen. Kenne mich wie gesagt damit nicht wirklich gut aus. Deswegen möge man es mir verzeihen, wenn ich blödsinn laber.
PS: Ich weiß, dass ich codetags benutzt habe. Aber ich kenne die csharp tags nicht und meine JavaScript ist gerade etwas defekt. Also keine Chance es über die Buttons auszuwählen. 
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.