Autor Beitrag
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Mo 03.10.05 00:09 
Hallo!

Ich hatte imho ein ähnliches Thema schonmal gelesen, durch Suchhen aber keine gescheiten Ergebnisse bekommen: Wie bekomme ich es hin, dass ich ein Image Alpha-Blende, sprich es halb-transparent machen kann. Gibts dafür evtl schöne Components?

Alstar
Coder
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Mo 03.10.05 00:14 
Eine möglichkeit wäre dir PNGImage zu installieren und transparente PNGs zu verwenden.
Alstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Mo 03.10.05 00:16 
Nein. Ich meine nicht, dass die Bilder in den Images transparent werden sollen, sondern die Images an sich.
Also genau wie AlphaBlend und AlphaBlendValue bei Formularen, nur halt für Images.

Alstar
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 03.10.05 08:07 
Du könntest theoretisch DelphiX dafür verwenden.
DelphiX hat eine AlphaBlend-Funktion.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Alstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Mo 03.10.05 11:37 
Nein. Bitte kein DirectX oder OpenGL. Ich möchte ganz einfach nur eine Art TImage mit Alphablending :wink:

Alstar
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mo 03.10.05 11:55 
Was liegt unter dem Image? was einfarbiges oder nochmal z.B. ein Bild?
Ich hab z.B. mal sowas geschrieben, das macht mir genau das mit nem Image auf weißem Hintergrund. Theoretisch solltest du aber mit allen beliebigen einfarbigen untergründen (:?: deutsches wort) machen können:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure DrawAlphaBlend(var Bitmap: TBitmap; Percent: integer);
var
  bmpTemp             : TBitmap;
  r,
  g,
  b,
  x,
  y                   : integer;
  RGB                 : longint;
begin
  x := 0;
  while (x < Bitmap.Width) do
  begin
    y := 0;
    while (y < Bitmap.Height) do
    begin
      RGB := ColorToRGB(Bitmap.Canvas.Pixels[x, y]);
      // der RGB Wert ist "umgedreht"
      r := (RGB and $0000FF);
      g := (RGB and $00FF00shr 8;
      b := (RGB and $FF0000shr 16;

      r := r + (($FF - r) * Percent div 100);
      g := g + (($FF - g) * Percent div 100);
      b := b + (($FF - b) * Percent div 100);

      Bitmap.Canvas.Pixels[x, y] := r + (g shl 8) + (b shl 16);

      inc(y);
    end;
    inc(x);
  end;
end;


Wenn du in den Zeilen 23, 24 und 25 die $FFs in die Werte deiner Untergrund-Farbe tauschst, sollte das funktionieren... Oder du machst gleich nen Parameter der Procedure draus..




MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Alstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Mo 03.10.05 12:01 
Das was die Sache ja kompliziert macht, ist das ein weiteres Image drunterliegt. Außerdem weiß ich nicht wie schnell dein Code ist, da es sozusagen eine Art Animation werden soll.
Das untere Bild bleibt stehen und das obere wird drübergeblendet.

Alstar
Alstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Mo 03.10.05 13:28 
Also ich hab mein Problem mit der Animation jetzt komplett anders gelöst.
Wäre aber dennoch nett, wenn jemand wüsste, ob es ein AlphaBlend-fähiges TImage gibt, damit ich mir beim nächsten Mal die Arbeit ersparen kann :wink:

Alstar
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Mo 03.10.05 22:23 
Hallo
Mit einem TImage kann ich zwar nicht dienen, aber was hältst du davon:
msdn.microsoft.com/l...gdi/bitmaps_0fzo.asp

einfach die Parameter zusammensuchen, oder - bei ausreichenden Englisch Kenntnissen der MSDN-Seite entnehmen (gibts bestimmt in Tutorials) und losblenden

Die Methode oben dürfte übrigens nicht besonders schnell sein, da sie Canvas.pixels benutzt, was mehr als langsam für große Bilder ist. Wenn du es von Hand machen willst empfehle ich dir "Scanline".

Mathiash

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
Alstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Mo 03.10.05 23:05 
Wie gesagt: Das Blenden muss (da es eine Animation sein soll) sehr schnell, also in Echtzeit passieren

Alstar
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 04.10.05 09:14 
Sofern die Bilder noch klein genug sind sollte es problemlos per Software gehen. Wenn sie aber größer sind solltest du tunlichst auf eine Hardwarebeschleunigung zurückgreifen.

Wenn per hand, dann ich dir auch nur raten das Ganze mittels Scanline zu machen. Quellcode beispiele dazu solltest du hier im Forum genügend finden. Ich kann dir aber nur raten achte nicht zu sehr auf den Speicherverbrauch Geschwindigkeit ist dabei wichtiger. Also scheue dich nicht so viel wie Möglich zu puffern. Das spart imens Rechenzeit.

Evtl. solltest du auch auf das TImage verzichten und die Bilder lieber per Hand auf dein Formular zeichnen. Und zwar so, dass du dir ein temporäres Bild erstellst in dem du deinen Hintergrund ganz normal zeichnest und dann das andere Bild mittels Scanlines hineinblendest. Also nur einen bestimmten Bereich berechnen. Und dieses Bild kannst du dann auf dein Formular zeichnen. Achte aber darauf, dass du es nur neu berechnest, wenn sich auch etwas getan hat.

Für den Fall, dass du es nicht selber machen möchtest solltest du dir mal die Graphics32 anschauen. Ich denke mal, dass du die auch benutzen könntest. Weiß es nicht mehr 100%tig. Wobei ich sagen muss, dass die für deinen simplen Fall wohl ein wenig überfrachtet sind.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 04.10.05 10:39 
wenn dahinter eh noch ein Timage liegt, warum zeichnest du dann nicht beide bilder in ein Timage ?
Alstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Di 04.10.05 12:24 
Könnte ich machen, allerdings müsste ich mir dafür selbst Code für das Blenden zusammenfriemeln 8)

Alstar
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Di 04.10.05 15:57 
Mit den GDI/GDI+ Funktionen musst du das nicht selbst machen und einigermaßen schnell sind sie auch (natürlich ist OpenGL etc noch schneller).

Handgemacht ist es aber auch nicht so schwierig, mit Scanline das Bild durchgehen (muss nichtmal TImage sein, hauptsache TBitmap und dann einfach in die Zielbitmap (vorzugsweise ein anderes) übertragen. 50% Transparenz heißt z.B.
ausblenden Quelltext
1:
 ZPixel.rot = (APixel.rot + BPixel.rot)/2; // Pseudocode					


fertig eigentlich net so schwer, oder?

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche