![]() |
Image 50% Transparent?
hi @ all
geht dat irgednwie. Ich habe zwei Images mit verschiedenen Inhalten übereinander liegen, und nun soll das obere (alles aus dem bild) nicht ganz transparent, sondern nut 50, 60 oder sonstwas prozent durchsichtig sein! thÄnxX fcg |
Ja das geht. Du nimmst ein drittes Image für die Anzeige.
Dann kannst Du die Pixel so in der Logik füllen:
Delphi-Quellcode:
Das ganze ist natürlich nur eine Skizze vom Prinzip. Du musst es auf die RGB-Werte anwenden.
Schleife in X-Richtung
Schleife in Y-Richtung Bitmap3.Pixel := Bitmap1.Pixel + 0.5 * Bitmap2.Pixel [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
hi das Prinzig habe ich verstanden. Leider mache ich das erste mal was mit Canvas. Kannst du vielliecht nen Code posten?
|
Ich suche heute im Laufe des Tages mal einen DemoSource dazu raus. Aber eine Frage. Wie liegen Deine Source-Bilder vor und wo soll das überblendete erscheinen? Jeweils als TPicture?
|
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe Dir mal ein Beispiel gemacht. Allerdings bin ich mir nicht sicher, ob man die Werte subtrahieren oder addieren muss. Schaue es Dir einfach mal an...
|
hi
danke. man muss Addieren) aber dann (und das nur nach elend langem warten) wird das erste bild richitg dargestellt, das zweite aber n igrnedwelchen total falschen farben darüber gemalt... fcg |
Mit dem Addieren bin ich mir nicht so ganz sicher (mit dem Subtrahieren aber auch nicht).
Gedankenspiel: Sourcebild reines Rot. Drübermalbild: Weiß mit roten Fleck. Die Frage ist, wass würdest Du hier als Ergebnis erwarten? Zur Geschwindigkeit: Ich habe keineswegs die Optimallösung gepostet. Es sollte nur mal zeigen, wie man auf Pixel zugreifen kann. Bedeutend schneller sollte es gehen, wenn man während dem Zeichnen die Bilder auf
Code:
schaltet.
Visible := False;
In der Tat aber ein interessantes Problem (grade die Überlagerung). Aber leider bin ich da kein Spezi... |
habe was gefunden, was mit hilft:
Delphi-Quellcode:
fcg
procedure TForm1.Blend(FromBit, ToBit, NewBit: TBitmap);
var pt, pf, pn: PByteArray; h, w: Integer; begin for h:=0 to ToBit.Height-1 do begin pt:= ToBit.ScanLine[h]; pf:= FromBit.ScanLine[h]; pn:= NewBit.ScanLine[h]; for w:=0 to (ToBit.Width *3)-1 do pn^[w]:= round(pf^[w] - ((pf^[w]-pt^[w]) / 100 * TrackBar1.Position)); end; end; [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
ähm, hab jetzt das ganze zuvor gepostete nicht gelesen, aber:
Bei einem Image kann man eine transparente Farbe festlegen. Soll jetzt das Bild also 50% transparent sein malst du in das Image jedes 2. Pixel in der transparenten Farbe. Dabei muss natürlich die 2. Zeile zur 1. Zeile versetzt gemalt werden. Mit der Anzahl der in transparent gemahlten Pixel kannst du dann auch den Grad der Transparenz festlegen. Grüßerle Minz |
DanielJ
Hi,
du musst aus beiden RGB-Werten den Durchschnitt errechnen, z.B.:
Code:
RGB(ceil((GetRValue(oldColor) + GetRValue(aColor))/2),...,...);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz