AGB  ·  Datenschutz  ·  Impressum  







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

Frage zu ScanLine

Ein Thema von Koller · begonnen am 6. Aug 2006 · letzter Beitrag vom 7. Aug 2006
Antwort Antwort
Koller

Registriert seit: 22. Mär 2005
59 Beiträge
 
#1

Frage zu ScanLine

  Alt 6. Aug 2006, 18:04
Delphi-Quellcode:
 //Farbtiefe der beiden Pictures auf 32 bit setzen
       Picture1.Bitmap.PixelFormat := pf32Bit;
       Picture2.Bitmap.PixelFormat := pf32Bit;
       //in einer Zählschleife Zeile für Zeile durchgehen
       for y := 0 to Picture1.Bitmap.Height - 1 do
       begin
         //per ScanLine die Zeile auslesen
         Line1 := Picture1.Bitmap.ScanLine[y];
         Line2 := Picture2.Bitmap.ScanLine[y];
         Line3 := Target.Bitmap.ScanLine[y];
         //die ausgelesenen Zeilen von links nach rechts durchgehen
         for x := 0 to Picture1.Bitmap.Width - 1 do
         begin
           //die Farbe des aktuellen Pixels von Picture1 berechnen
           tempColor1 := RGB(Line1.rgbRed,Line1.rgbGreen,Line1.rgbBlue);
           //die Farbe des aktuellen Pixels von Picture2 berechnen
           tempColor2 := RGB(Line2.rgbRed,Line2.rgbGreen,Line2.rgbBlue);
           //je nachdem, welches Bild oben ist, die Mischfarbe berechnen
           if (PictureAboveID = 1) then
             tempColor3 := MixColor(tempColor1,tempColor2,AlphaBlendValue)
           else
             tempColor3 := MixColor(tempColor2,tempColor1,AlphaBlendValue);
           //in den aktuellen Pixel des Ziel-Pictures die Mischfarbe schreiben
          //wird durch die folgenden drei Anweisungen die neue Farbe geschrieben?
           Line3.rgbBlue := GetBValue(tempColor3);
           Line3.rgbGreen := GetGValue(tempColor3);
           Line3.rgbRed := GetRValue(tempColor3);
           //die drei Pointer inkrementieren, um zum nächsten Pixel zu gelangen
           inc(Line1);
           inc(Line2);
           inc(Line3);
         end;
Ich berechne die Mischfarbe zweier TColor und will sie in Target.Bitmap schreiben. Wird durch die drei markierten Anweisungen die neue Farbe auch geschrieben, weil ich bei der Ausgabe nur ein weißes Bild erhalte?
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Frage zu ScanLine

  Alt 6. Aug 2006, 19:01
Erstens: Von was für einem Typ sind Line1, 2 und 3? Ist das auch für 32Bit Farbtiefe geeignet? Normalerweise nimmt man da pf24Bit.

Zweitens: Hast du eingentlich mal ausbrobiert Line3.rgbBlue := 255, um zu schauen ob es vieleicht nicht an etwas anderem liegt?
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  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: Frage zu ScanLine

  Alt 6. Aug 2006, 19:19
Zitat von igel457:
Zweitens: Hast du eingentlich mal ausbrobiert Line3.rgbBlue := 255, um zu schauen ob es vieleicht nicht an etwas anderem liegt?
Wenn er ein weißes Bild hat ist rgbBlue bereits 255 Also zu Testzwecken lieber auf 0 setzen damit es auch eine Auswirkung hat.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Frage zu ScanLine

  Alt 6. Aug 2006, 19:27
Zitat von igel457:
Erstens: Von was für einem Typ sind Line1, 2 und 3? Ist das auch für 32Bit Farbtiefe geeignet? Normalerweise nimmt man da pf24Bit.
Warum sollte man? 24 bpp bedeutet, das jeder 2. Pixel an einer ungerade Adresse liegt und erst jeder 4. Pixel aligned ist. Und Aligned bringt viel mehr Vorteile, bei allen anderen müsste der Prozessor bzw. der pre-catch bis zu 2 Lesezyklen machen um den Inhalt zu bekommen. Wenn, dann macht man es mit 32 bpp.
  Mit Zitat antworten Zitat
Koller

Registriert seit: 22. Mär 2005
59 Beiträge
 
#5

Re: Frage zu ScanLine

  Alt 6. Aug 2006, 19:33
Ich stelle gerade fest, es liegt nicht unbedingt an diesem Code
Eine boolean-Variable ist komischerweise false, sodass die if-Abfrage darüber nicht true ist und der Code gar nicht ausgeführt wird. Ich probiere mal den Fehler im gesamten Projekt zu finden.
  Mit Zitat antworten Zitat
Koller

Registriert seit: 22. Mär 2005
59 Beiträge
 
#6

Re: Frage zu ScanLine

  Alt 6. Aug 2006, 20:47
Delphi-Quellcode:
 showmessage('vorher: '+inttostr(Picture1.Height));
 Picture1.Bitmap.PixelFormat := pf32Bit;
 Picture2.Bitmap.PixelFormat := pf32Bit;
 showmessage('nachher: '+inttostr(Picture1.Height));
Die erste Ausgabe ist 557 und danach 0. Warum? Muss das so? Dann wird die for-Schleife danach ja nur einmal ausgeführt.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Frage zu ScanLine

  Alt 7. Aug 2006, 09:07
Picture1.Height und Picture1.Bitmap.Height sind unterschiedliche Dinge.

Grundlegend würde ich dir aber raten mit TBitmaps zu arbeiten die nicht in einem TPicture Objekt gekapselt sind.
  Mit Zitat antworten Zitat
Koller

Registriert seit: 22. Mär 2005
59 Beiträge
 
#8

Re: Frage zu ScanLine

  Alt 7. Aug 2006, 09:16
Kann man denn auch JPEGs in ein TBitmap laden, oder muss man die vorher umwandeln?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Frage zu ScanLine

  Alt 7. Aug 2006, 09:35
Zitat von Koller:
Kann man denn auch JPEGs in ein TBitmap laden, oder muss man die vorher umwandeln?
Ich wüsste nicht, dass man JPEGs in Bitmaps laden kann. TPicture ist bei einem geladenem JPEG vom Typ TJPEGImage und nicht TBitmap. Du musst es entsprechend umwandeln - ob nun du oder TPicture dies macht.
  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 10:16 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