AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pixelmanipulation

Ein Thema von Hazardos · begonnen am 20. Sep 2004 · letzter Beitrag vom 18. Sep 2005
Antwort Antwort
Seite 2 von 2     12   
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Pixelmanipulation

  Alt 18. Sep 2005, 08:44
Zitat von Gothicware:
Delphi-Quellcode:
procedure _SemiOpaque(src:Tbitmap; Color:TColor);
var x,y:Integer;
    p:PInteger;
begin
  src.PixelFormat:=pf32bit;
  p:= src.Scanline[Pred(src.Height)];
  for y:=1 to src.Height do
  for x:=1 to src.Width do
    begin
      if ((x+0 mod 2) = 0) and ((y mod 2) = 0) then p^:= Color;
      if ((x+1 mod 2) = 0) and ((y mod 2) <> 0) then p^:= Color;
      Inc(p);
    end;
end;
Du weißt aber schon das die Bedingung (x+0 mod 2)=0 immer False ergibt, wenn x>0? Denn das Mod bindet mehr als das + zeichen.

Hier mal eine Variante von mir, ist dank Scanline auch recht schnell:
Delphi-Quellcode:
// Alpha 127 ist Halbtransparent
procedure TAnimation.DrawAlpha(Src, Dest: TBitmap; x, y: Integer; Alpha: Byte);
var
  s, d: PRGBQuad;
  Rect: TRect;
  x1, y1: Integer;
begin
  src.PixelFormat:=pf32bit;
  dest.PixelFormat:=pf32bit;
  if (x>=Dest.Width) or (x+Pred(Src.Width)<0) or
     (y>=Dest.Height) or (y+Pred(Src.Height)<0) then exit;
  with Rect do begin
    Left:=Max(x, 0);
    Top:=Max(y, 0);
    Right:=Min(x+Pred(Src.Width), Pred(Dest.Width));
    Bottom:=Min(y+Pred(Src.Height), Pred(Dest.Height));
  end;
  for y1:=Rect.Top to Rect.Bottom do begin
    d:=Dest.ScanLine[y1]; Inc(d, Rect.Left);
    s:=Src.ScanLine[y1-y]; Inc(s, Rect.Left-x);
    for x1:=Rect.Left to Rect.Right do begin
      d^.rgbRed:=(d^.rgbRed * Alpha + s^.rgbRed * not Alpha) shr 8;
      d^.rgbGreen:=(d^.rgbGreen * Alpha + s^.rgbGreen * not Alpha) shr 8;
      d^.rgbBlue:=(d^.rgbBlue * Alpha + s^.rgbBlue * not Alpha) shr 8;
      Inc(s);
      Inc(d);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Gothicware

Registriert seit: 25. Aug 2005
Ort: Dresden
7 Beiträge
 
#12

Re: Pixelmanipulation

  Alt 18. Sep 2005, 15:30
Danke, ist mir noch nicht aufgefallen, denn bei mir hats 100% unter Delphi 4 funktioniert.
Aber nach dem leitsatz vergangener Tage(schon ein paar Jahre her),
Punktrechnung geht vor Strichrechnung, sei den eine Klammer sagt was anderes.
sollte ich's ändern.

Wenn du noch mehr zum Thema Pixelmanipulation hast, würde ich mich freun was für meine GW_ImagePlus Unit zubekommen.
(Per PM bitte, danke.)
Sometimes i think there must be a dolphin in delphi!?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Pixelmanipulation

  Alt 18. Sep 2005, 15:33
oh, wenn ich das hier alles lese graut es mir. Für sowas gibt es doch die Funktion Alphablend in der unit Windows.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gothicware

Registriert seit: 25. Aug 2005
Ort: Dresden
7 Beiträge
 
#14

Re: Pixelmanipulation

  Alt 18. Sep 2005, 20:23
Meins war ja auch nur gedacht da @fkerber immer Abwechselnd ein Pixel von zwei Bildern nimmt. Was grade bei niedriger Farbauflösung die Bessere Methode sein kann. Ausserdem hat man bei der API keine 100% Gewalt darüber was gemacht wird. Aber AlphaBlend ist sicherlich die einfachere Lösung.
Sometimes i think there must be a dolphin in delphi!?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:44 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