Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi jpg mit png verschmelzen (https://www.delphipraxis.net/38657-jpg-mit-png-verschmelzen.html)

torud 22. Jan 2005 12:24


jpg mit png verschmelzen
 
Hallo Wissende!

Gibt es eine Möglichkeit auf ein vorhandenes jpg-Bild ein png zu legen und beide dann zu verschmelzen und daraus ein jpg zu machen???

Ich habe vor, durch einen automatisierten Vorgang eine Bildliste abzuarbeiten und alle jpg´s mit einem png zu verschmelzen, sozusagen Transparenzen auf eine feste Hintergrundfarbe auf das Jpg zu legen, damit ein Effekt eine Alphakanales entsteht.

Wie könnte ich das realisieren?

Danke Tom

Luckie 22. Jan 2005 12:39

Re: jpg mit png verschmelzen
 
Meines Wissens gar nicht, da das JPEG Format keine Transparenz unterstützt. Entweder wandelst du es in PNG um und legst die transparente Farbe fest oder entwicklest ein eigenes Format.

torud 22. Jan 2005 13:01

Re: jpg mit png verschmelzen
 
Danke für Deine Antwort!

OK, wahrscheinlich habe ich mich falsch oder unverständlich ausgedrückt.

Der Background der HTML-Seite ist gelb.
Ich habe ein Bild. jpg-Format. Darauf ist ein Haus.
Dann habe ich noch ein png-Bild, welches innen volldeckend ist, damit man das Haus sieht und am äusseren Rand ein Verlauf in eine Farbe (gelb) hat, um das Bild mit dem Hintergrund zu verschmelzen.

Nun will ich das png-Bild auf das Jpg Stanzen und ein Jpg erhalten, wo das Haus zu sehen ist und der Verlauf nach aussen hin ins gelbe übergeht.

Geht das?

SirThornberry 22. Jan 2005 13:25

Re: jpg mit png verschmelzen
 
erst das eine bild auf eine canvas malen und dann das andere bild darüber (das drübermalen natürlich mit berücksichtigung welche farbe an der stelle der canvas bereits vorhanden ist). Hast du quelltextmäßig schon angefangen und kommst an irgend einer stelle nicht weiter oder wo liegt derzeit dein problem bei der umsetzung?

torud 22. Jan 2005 13:31

Re: jpg mit png verschmelzen
 
ok, das mit dem malen ist mir klar!

Der Punkt an dem ich nicht weiterkomme, ist der, dass ja das png ein Schwarz-weiss-Bild ist und ich nicht weiss, wie und wo ich festlegen kann, dass da wo das weisse ins schwarze übergeht ein übergang von weiss ins gelbe zum beispiel kommt...

SirThornberry 22. Jan 2005 13:39

Re: jpg mit png verschmelzen
 
ist gar nicht so schwer, du musst dir nur vorher überlegen ob schwarz 100% transparenz darstellt oder weiß. Wenn du jetzt schwarz als Transparenz verwendest so musst du bei einem schwarzen pixel gar nichts machen weil ja 100% transparent. Bei einem weißen pixel malst du dasPixel wie es ist auf die Canvas und ansonstne musst du die Farben im Verhältnis mischen (da gibt dann der grauwert an zu welchen teilen gemicht wird)

hier ne funktion um 2 farben zu mischen
Delphi-Quellcode:
function GetBlendColor(Basecolor: TColor; Blendcolor: TColor; BlendIntensity: Byte=127): TColor;
type
  TMyColor = record
    red: Byte;
    green: Byte;
    blue: Byte;
  end;
var LF1, LF2: TMyColor;
begin
  LF1.red := GetRValue(Basecolor);
  LF1.green := GetGValue(Basecolor);
  LF1.blue := GetBValue(Basecolor);

  LF2.red := (LF1.red * (255-BlendIntensity) + GetRValue(Blendcolor) * BlendIntensity) div 255;
  LF2.green := (LF1.green * (255-BlendIntensity) + GetGValue(Blendcolor) * BlendIntensity) div 255;
  LF2.blue := (LF1.blue * (255-BlendIntensity) + GetBValue(Blendcolor) * BlendIntensity) div 255;
  result := rgb(LF2.red, LF2.green, LF2.blue);
end;
Bei blendintensity gibst du den schwarzweiß-wert des pixels an und für die anderen beiden Farben eben die Farben die gemischt werden sollen

torud 22. Jan 2005 13:45

Re: jpg mit png verschmelzen
 
danke dir für das beispiel.
ich werds mir mal reinzeihen und versuchen zu verstehen, wie ich das zum einsatz bringen kann/muss.

tom

SirThornberry 22. Jan 2005 13:48

Re: jpg mit png verschmelzen
 
naja, du hast ja 2 bilder die du "mischen" willst, und dann noch das dritte was die Transparenz bestimmt. Um das Pixel fürs neue bild zu bekommen würde das so aussehen
Delphi-Quellcode:
  bildneu.canvas.pixels[x,y] := GetBlendColor(bild1.canvas.pixels[x,y], bild2.canvas.pixels[x,y], GetRValue(schwarzweissbild.canvas.pixels[x,y]));

torud 22. Jan 2005 13:52

Re: jpg mit png verschmelzen
 
oh, mit so viel support hätte ich jetzt gar nicht gerechnet.
vielen dank
tom

torud 29. Jan 2005 10:28

Re: jpg mit png verschmelzen
 
Hallo nochmals!

Ich habe da wohl was falsch verstanden oder nicht richtig gemacht.

Jedenfalls habe ich doch arge Probleme mit der Prozedur des Verschmelzens zweier Bilder.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,k,x,y:integer;
begin
  x:=bild1.Width;
  y:=bild1.Height;
  for i:=0 to x do
    begin
      for k:=0 to y do
        begin
          bild3.canvas.pixels[x,y] := GetBlendColor(bild1.canvas.pixels[x,y], bild2.canvas.pixels[x,y], GetRValue(bild2.canvas.pixels[x,y]));
        end;
    end;
end;
Das Programm schimpft immer darüber, dass es wohl kein Bitmap wäre, und dass in Bild3 schon was drin sein müsse, um dort malen zu können. Ich verstehe es einfach nicht. Kanns mir einer nochmal erklären was Sir Thornberry mir da an Code überlassen hat!?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 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