Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Ne doofe Frage zu Image / Bitmap / scanline (https://www.delphipraxis.net/153072-ne-doofe-frage-zu-image-bitmap-scanline.html)

Tom K. 19. Jul 2010 19:46

Ne doofe Frage zu Image / Bitmap / scanline
 
Hallo Leute,

es ist mir fast schon peinlich, die vermutlich blöde Frage zu stellen:
Ich hab auf meiner Form ein Image. Wie kann ich darauf mittels scanline zugreifen?

Irgendwie gibt's scanline wohl nur für TBitmap's oder so. Zumindest meckert das Delphi (sicherlich zu Recht) bei Image1.scanline rum.

Mein Problem: Meine selfmade-Wärmebildkamera gibt mir Temperaturen aus, die ich in farbige Kästchen auf dem Image verwandeln will. Hab mir bereits eine Funktion geschrieben, die mir zu gegebenen Temperaturen die drei RGB-Werte ausspuckt. Mit Image1.Canvas.Rectangle dauert mir der ganze Spaß dann aber zu lange, daher wollte ich mit scanline arbeiten. Aber irgendwie stell ich mich grad zu doof, sodass scanline nicht mit mir zusammenarbeiten will.

turboPASCAL 19. Jul 2010 19:50

AW: Ne doofe Frage zu Image / Bitmap / scanline
 
Zitat:

Irgendwie gibt's scanline wohl nur für TBitmap'sIrgendwie gibt's scanline wohl nur für TBitmap's
Jo. Ist ja aber auch nicht schlimm da man alle Formate nach TBitmap's umwandeln kann.


Wo hakts es denn genau ?

mkinzler 19. Jul 2010 19:59

AW: Ne doofe Frage zu Image / Bitmap / scanline
 
Delphi-Quellcode:
 Image1.Picture.Bitmap.ScanLine

Tom K. 19. Jul 2010 20:02

AW: Ne doofe Frage zu Image / Bitmap / scanline
 
Ich wusste, dass es irgendwie einfach wird :wall:

Danke! :-D

Tom K. 19. Jul 2010 20:13

AW: Ne doofe Frage zu Image / Bitmap / scanline
 
Hmmm... zu früh gefreut. Ich hab mal oben genanntes Beispiel genommen und entsprechend mein Image1 eingesetzt. Angeblich soll alles rot werden. Leider tut sich gar nix...
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
type
  PixArray = Array [1..3] of Byte;
var
  p: ^PixArray;
  h,w: Integer;
begin
  for h:=0 to Image1.Picture.Bitmap.Height-1 do
  begin
    p:= Image1.Picture.Bitmap.ScanLine[h];
    for w:=0 to Image1.Picture.Bitmap.Width-1 do
    begin
      p^[3]:=255;
      Inc(p);
    end;
  end;
end;
Wo ist hier jetzt das Problem?

himitsu 19. Jul 2010 20:31

AW: Ne doofe Frage zu Image / Bitmap / scanline
 
Daß es ScanLine "nur" für Bitmaps (eventuell aber auch für ICO und unkomprimiert Einzelbild-GIFs) gibt, ist nicht verwunderlich.

Denn dieses gibt einen direkten Zugriff auf die internen Daten der Pixel
und bei fast allen anderen Grafikformaten gibt es keine Daten für alle einzelnen Pixel, da diese irgendwo komprimiert "versteckt" sind.

Zitat:

Zitat von Tom K. (Beitrag 1036258)
Wo ist hier jetzt das Problem?

Ist auch ein BitMap in dem Image geladen
und welches Pixelformat besitzt dieses Bitmap?
Delphi-Referenz durchsuchenTBitmap.Pixelformat
Das Format (der Aufbau, die bytes/Bits) der Daten hängt natürlich vom Format des Bitmaps ab.

Tom K. 25. Jul 2010 12:56

AW: Ne doofe Frage zu Image / Bitmap / scanline
 
Ich hatte tatsächlich nur vergessen, ein Bild in das Image zu laden :)
Danke himitsu!

rollstuhlfahrer 25. Jul 2010 13:19

AW: Ne doofe Frage zu Image / Bitmap / scanline
 
Ansonsten hättest du jede verfügbare Grafik mit Bitmat.Assign(PNGGrafik) in das Bitmap-format überführen können.

Bernhard


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