Is this feasible?
-
- Beiträge: 1
- Registriert: Fr 8. Dez 2023, 01:34
Is this feasible?
Grüße, ich bin daran interessiert, in Lazarus eine Diashow zu erstellen, bei der die Bilder nahtlos ineinander übergehen. Mein Plan besteht darin, zwei TImage-Objekte zu stapeln und die Transparenz des oberen Objekts schrittweise zu erhöhen, sodass mit der Zeit das untere Objekt sichtbar wird. Ist das machbar oder haben Sie alternative Vorschläge, wie dieser Effekt erzielt werden kann? Danke schön.
-
- Beiträge: 6209
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Is this feasible?
Wen man es Manuel machen, immer je ein Pixel von jeder Image auslesen und mit mix abarbeiten.
Der Parameter a gibt an wie viel man von jedem Pixel nehmen will. 0.0 ist nur von Pixel 1, 1.0 ist nur von Pixel 2 uns 0.5 ist von jedem Pixel die Hälfte.
Und dies macht von für jede Farbe des Pixels. r, g und b.
Der Parameter a gibt an wie viel man von jedem Pixel nehmen will. 0.0 ist nur von Pixel 1, 1.0 ist nur von Pixel 2 uns 0.5 ist von jedem Pixel die Hälfte.
Und dies macht von für jede Farbe des Pixels. r, g und b.
Code: Alles auswählen
function mix(val0, val1, a: single): single;
begin
Result := (1 - a) * val0 + val1 * a;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Is this feasible?
Das beigefügte Projekt macht eine Überblendung zwischen zwei Bildern mit Bordmitteln, d.h. keine zusätzlichen Bibliotheken nötig. Es ist etwas grenzwertig, denn die Überblendung ruckelt noch leicht, d.h. man bräuchte noch mehr Zwischenschritte, aber damit dauert die Überblendung noch länger (ich finde, sie ist eh schon zu langsam). Und den Timer bräuchte man wahrscheinlich gar nicht, weil die Ausgabe eines Bildes länger dauert als ein Timer-Intervall.
Mit speziellen Graphik-Bibliotheken wie BGRABitmap oder RGBGraphics (beide im OPM) oder theo's OPBitmap kriegt man das wahrscheinlich etwas schöner hin, weil da vermutlichdie Ausgabe der Einzelbilder schneller erfolgt.
Mit speziellen Graphik-Bibliotheken wie BGRABitmap oder RGBGraphics (beide im OPM) oder theo's OPBitmap kriegt man das wahrscheinlich etwas schöner hin, weil da vermutlichdie Ausgabe der Einzelbilder schneller erfolgt.
- Dateianhänge
-
- blend_images.zip
- (240.9 KiB) 53-mal heruntergeladen
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1436
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Is this feasible?
Ich hab das spasseshalber auch mal probiert. Da TImage keine Eigenschaft AlphaBlend bzw. AlphablendValue hat, hab ich einfach zwei Formulare genommen und das funktioniert sogar.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Label1: TLabel;
Timer1: TTimer;
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
runup : boolean;
public
end;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormShow(Sender: TObject);
begin
form2.visible := True;
form2.Left := Left;
Form2.Top := Top;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if runup then
begin
AlphaBlendValue := AlphaBlendValue + 1;
if AlphaBlendValue = 255 then runup := not RunUp;
end
else
begin
AlphaBlendValue := AlphaBlendValue - 1;
if AlphaBlendValue = 0 then runup := not RunUp;
end;
end;
end.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Is this feasible?
Ich hab das damals mittels OpenGL gemacht,
da der RenderingContext 3D Kann, sind dann auch gleich jede Menge andere Effekte möglich (wie Farbkanal weißes blenden, rotieren ...)
ggf schaust dir das mal an. Mit z.B. uopengl_graphikengine.pas geht das recht leicht.
da der RenderingContext 3D Kann, sind dann auch gleich jede Menge andere Effekte möglich (wie Farbkanal weißes blenden, rotieren ...)
ggf schaust dir das mal an. Mit z.B. uopengl_graphikengine.pas geht das recht leicht.
--
Just try it
Just try it