Is this feasible?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
AllenCarson
Beiträge: 1
Registriert: Fr 8. Dez 2023, 01:34

Is this feasible?

Beitrag von AllenCarson »

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.

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Is this feasible?

Beitrag von six1 »

viewtopic.php?t=14239
Schau dir dies mal an...
Gruß, Michael

Mathias
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?

Beitrag von Mathias »

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.

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

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: Is this feasible?

Beitrag von wp_xyz »

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.
Dateianhänge
blend_images.zip
(240.9 KiB) 53-mal heruntergeladen

Benutzeravatar
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?

Beitrag von fliegermichl »

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.

Benutzeravatar
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?

Beitrag von corpsman »

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.
--
Just try it

Antworten