AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Überblendung zweier Bitmaps
Thema durchsuchen
Ansicht
Themen-Optionen

Überblendung zweier Bitmaps

Ein Thema von gmarts · begonnen am 13. Sep 2004 · letzter Beitrag vom 13. Sep 2004
Antwort Antwort
Benutzerbild von gmarts
gmarts

Registriert seit: 4. Apr 2004
Ort: Templin
290 Beiträge
 
Delphi 6 Enterprise
 
#1

Überblendung zweier Bitmaps

  Alt 13. Sep 2004, 15:49
Hallo!

Ich möchte zwei Bitmaps ineinander überblenden.

Momentan realisiere ich das mit zwei Image-Komponenten in zwei unterschiedlichen Forms und ändere einfach den
AlphaBlendValue des obenliegenden Forms.
Das erscheint mir aber nicht unbedingt elegant.

Gibt es eine andere und ebendso schnelle Möglichkeit?

MfG

GM
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Click;
end;
  Mit Zitat antworten Zitat
mcjoin

Registriert seit: 14. Jul 2003
7 Beiträge
 
#2

Re: Überblendung zweier Bitmaps

  Alt 13. Sep 2004, 17:40
du kannst die bilder in tbitmap lesen und pixel per pixel die Farbkanäle mischen.
kleines Beispiel:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
type
  TRGBArray = array[0..32767] of TRGBTriple;
  PRGBArray = ^TRGBArray;
var
  x, y: Integer;
  RowA,RowB: PRGBArray;
  bmp1,bmp2 : tbitmap;
begin
  bmp1 := image2.Picture.Bitmap;
  bmp2 := image3.Picture.Bitmap;

  try
  bmp1.PixelFormat := pf24bit;
  for y := 0 to bmp1.Height -1 do
  begin
    rowA := bmp1.ScanLine[y];
    rowB := bmp2.ScanLine[y];
    for x := 0 to bmp1.Width - 1 do
    begin
      rowA[x].rgbtRed := (rowA[x].rgbtRed + rowB[x].rgbtRed) div 2;
      rowA[x].rgbtGreen := (rowA[x].rgbtGreen + rowB[x].rgbtGreen) div 2;
      rowA[x].rgbtBlue := (rowA[x].rgbtBlue + rowB[x].rgbtBlue) div 2;
    end;
  end;
  finally
   image1.Picture.Bitmap := bmp1;
  end;
P.S. : vergiss nicht dass es bloß ein beispiel ist. Anpassungen und SchnickSchnack wie skalieren und prozentuales Mischen habe ich nicht reingebaut. Das zweite Bild wird jedes mal OnClick um 50 % mit dem ersten gemischt.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Überblendung zweier Bitmaps

  Alt 13. Sep 2004, 17:50
Unter welchem Windows soll das ganze funktionieren? Bei XP geht folgendes (ab 2000 glaub ich)
Delphi-Quellcode:
procedure BlendBitmap(Dest: TBitmap; ABlendColor: TColor; ABlendIntensity: Byte = 127; GammaCorrection: Integer = 0);
var LSource: TBitmap;
    LBlendstruct: TBlendFunction;
begin
  LBlendstruct.BlendOp := AC_SRC_OVER;
  LBlendstruct.BlendFlags := 0;
  LBlendstruct.SourceConstantAlpha := ABlendIntensity;// trunc(APercentBlendColor * 255 / 100);
  LBlendstruct.AlphaFormat := 0; //AC_SRC_ALPHA;
  LSource := TBitmap.Create;
  LSource.Width := 1; LSource.Height := 1;
  LSource.Canvas.Pixels[0,0] := ABlendColor;
  AlphaBlend(Dest.canvas.handle, 0, 0, Dest.width, Dest.height, LSource.canvas.Handle, 0, 0, 1, 1, LBlendstruct);

  if GammaCorrection <> 0 then
  begin
    LSource.Canvas.Pixels[0,0] := clWhite;
    LBlendstruct.SourceConstantAlpha := GammaCorrection;
    AlphaBlend(Dest.canvas.handle, 0, 0, Dest.width, Dest.height, LSource.canvas.Handle, 0, 0, 1, 1, LBlendstruct);
  end;
  LSource.Free;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Überblendung zweier Bitmaps

  Alt 13. Sep 2004, 17:57
is das mit scanline nicht schneller ?!

//ups das is ja mit scanline *g*
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#5

Re: Überblendung zweier Bitmaps

  Alt 13. Sep 2004, 18:08
http://www.efg2.com/Lab/
Da dürftest du fündig werden.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Überblendung zweier Bitmaps

  Alt 13. Sep 2004, 18:22
oder einfach mal ins msdn unter MSDN-Library durchsuchenalphablend schauen. Beispiel zur Anwendung dessen hab ich ja schon gepostet
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz