Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi aus TImage Pixelwerte auslesen (https://www.delphipraxis.net/111209-aus-timage-pixelwerte-auslesen.html)

EccoBravo 31. Mär 2008 17:05


aus TImage Pixelwerte auslesen
 
Hallo,

kann ich aus einem TImage Pixelwerte auslesen (zB. Pixelwert für x=7 und y=9 ...)?
Wenn ich ein Bild im TImage habe, will ich die Pixelwerte entlang der 9 Pixelzeile auslesen.
Ebenfalls will ich die Stretch Funktion (Image1.stretch:=true;) nutzen, um große Bildmatrizen in kleine Bildmatrizen umzurechnen.
Falls es mit dem TImage nicht gehen sollte, womit kann ich dieses sonst machen?

Grüße

E. B.

Fussball-Robby 31. Mär 2008 17:36

Re: aus TImage Pixelwerte auslesen
 
Zitat:

Zitat von EccoBravo
kann ich aus einem TImage Pixelwerte auslesen (zB. Pixelwert für x=7 und y=9 ...)?

Guck dir mal TCanvas.Pixels[x,y] an.

Mfg

elundril 31. Mär 2008 17:45

Re: aus TImage Pixelwerte auslesen
 
wobei scanline die schnellere methode ist wenn man viele pixel auslesen will.

lg elundril

Muetze1 31. Mär 2008 18:40

Re: aus TImage Pixelwerte auslesen
 
Zitat:

Zitat von elundril
wobei scanline die schnellere methode ist wenn man viele pixel auslesen will.

Welche aber nur bei einem TBitmap vorhanden ist und da nach TImage gefragt wurde, kann dies von einem TMetafile bis zu einem TPingObject alles mögliche sein...

elundril 31. Mär 2008 23:42

Re: aus TImage Pixelwerte auslesen
 
ja aber bei TImage gibt ne property TBitmap mit der man auf das bild zugreifen kann soweit ich weiß.

lg elundril

Muetze1 1. Apr 2008 03:04

Re: aus TImage Pixelwerte auslesen
 
Zitat:

Zitat von elundril
ja aber bei TImage gibt ne property TBitmap mit der man auf das bild zugreifen kann soweit ich weiß.

Nur, wenn auch eine TBitmap Instanz drinne ist...

Somit: nur wenn es ein Bitmap ist.

Matze 1. Apr 2008 07:44

Re: aus TImage Pixelwerte auslesen
 
Hallo,

da man hier, wie erwähnt, ohne weiteres nicht direkt mit dem TImage arbeiten kann, würde ich das Bild in ein TBitmap einlesen und damit weiterarbeiten. Das hat auch den positiven Nebeneffekt, dass es schneller gehen müsste, da der Zugriff auf die VCL relativ langsam ist, vor allem, wenn man hunderte bzw. tausende Zugriffe hat, was bei großen Bildern der Fall wäre:

Delphi-Quellcode:
var
  Bmp: TBitMap;
begin
  Bmp := TBitMap.Create;
  try
    Bmp.Assign(Image1.Picture.Graphic);

    // nun enthält das TBitmap die Grafik aus dem TImage und du
    // kannst hier mittels "Bmp.Canvas.Pixels[]" auf die einzelnen
    // Farbwerte der Pixel zugreifen
  finally
    FreeAndNil(Bmp);
  end;
end;
Grüße

EccoBravo 1. Apr 2008 10:37

Re: aus TImage Pixelwerte auslesen
 
Ja, prima,

der vorgeschlagene Code funktioniert wunderbar.

Danke

E. B.

PS.:
die von Fussball-Robby in der Signatur angehangene Antimonie ist genial.

EccoBravo 1. Apr 2008 18:06

Re: aus TImage Pixelwerte auslesen
 
Danke Matze,

Habe nun ein Bild im TImage dem BMP zugewiesen.
Nun will ich über TCanvas.Pixels einzelne Pixel Farbwerte auslesen.
Dabei wundere ich mich, denn die ausgelesenen Farbwerten entsprechen nicht dem angezeigten Bildinhalt.

(Bevor ich das Bild über den TCanvas.Pixels untersuchte, habe ich es mit Image1.Width und Image1.Height in der Größe verändert.)
(Warum dieser Zirkus?
Ich will ein 800x800 Pixelbild in ein 512x512 Pixelbild zur weiteren Verarbeitung umwandeln, da ich nicht unbedingt eine bikubische Bildtransformation programmieren will.)


Nun meine Frage:
Welcher Fokus.Cursor ist mit X und Y in TCanvas.Pixels[x,y] zum Farbauslesen des Bildes gemeint, der des aktuell angezeigten Bildes (512x512) oder der des Originalbildes (800x800), das ich ursprünglich in das TImage.Picture eingelesen habe?

Danke für Hilfe, Ideen und Tips

E. B.

PS.:
Und wie mache ich das, wenn ich in dem TImage (welches ich hier gerade knete) einen Bildpunkt zur Markierung/Kontrolle hinein setzten will?

Matze 1. Apr 2008 18:55

Re: aus TImage Pixelwerte auslesen
 
Hallo,

möchtest du manuell eine Funktion programmieren um die Bildgröße zu ändern?
Das kannst du beispielsweise mit Delphi-Referenz durchsuchenBitBlt recht einfach machen.

Grüße

Muetze1 1. Apr 2008 19:22

Re: aus TImage Pixelwerte auslesen
 
Auch möchte ich hier nochmal darauf hinweisen, dass Delphi-Referenz durchsuchenTImage.Width und Delphi-Referenz durchsuchenTImage.Height ist die Grösse der Komponente, nicht des Bildes!. Wenn Delphi-Referenz durchsuchenAutoSize auf true steht, dann passt sich das TImage immer der Grösse des Bildes an, aber das ist eine Ausnahme. Wenn du also die Bildgrösse haben bzw. verändern willst, dann nutze Delphi-Referenz durchsuchenTImage.Picture.Width und Delphi-Referenz durchsuchenTImage.Picture.Height!

EccoBravo 3. Apr 2008 09:45

Re: aus TImage Pixelwerte auslesen
 
Danke Muetze,

so tragt Ihr successive zu meinem Wissen bei, ich danke Euch.
Hatte nämlich in der Vergangenheit die Bildgrößen mit einem eigenen bilinearen Formalismus transformiert. Dieser hatte hier und da so seine Probleme. Und so suchte ich nach bereits vorhandenen Mitteln.

Also nochmals Danke

E. B.

EccoBravo 3. Apr 2008 13:50

Re: aus TImage Pixelwerte auslesen
 
Danke und

Schiete, Kommando zurück,

TImage.Picture.Width und TImage.Picture.Height haben Nur-Lesen-Eigenschaft.
Schade - war mal ne Idee - geht aber nicht.

Gibt es nicht irgend eine andere Komponente / Tool zur (bikubischen) Bild-Transformation
(AAAxBBB --> 512x512)?

Danke usw. E. B.

DeddyH 3. Apr 2008 14:03

Re: aus TImage Pixelwerte auslesen
 
StretchBlt?

Muetze1 3. Apr 2008 17:25

Re: aus TImage Pixelwerte auslesen
 
Zitat:

Zitat von EccoBravo
TImage.Picture.Width und TImage.Picture.Height haben Nur-Lesen-Eigenschaft.
Schade - war mal ne Idee - geht aber nicht.

Och mein Gott, ein Blick in die Hilfe und die Sache wäre auch gegessen. Wodran es liegt wurde gesagt, somit sollte die Lösung doch nicht so schwer zu finden sein.

Mit anderen Worten: Füge noch ein Graphic. vor dem Width und Height ein.

EccoBravo 10. Apr 2008 09:58

Re: aus TImage Pixelwerte auslesen
 
Hallo Muetze1,

Danke, Dein Vorschlag (musste erst 2x hingucken) ist genial. I'll do it!
Bin eben kein professioneller Informatiker sondern nur ein "Freizeitprogrammierer"
(-Ammatör-).

Nochmals vielen Dank und Grüsse
E. B.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz