Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Gdi+: Wie Bitmap-Objekt mit Image-Bild verbinden? (https://www.delphipraxis.net/160614-gdi-wie-bitmap-objekt-mit-image-bild-verbinden.html)

Jazzman_Marburg 22. Mai 2011 20:27

Gdi+: Wie Bitmap-Objekt mit Image-Bild verbinden?
 
Hallo Gemeinde!

Schon wieder ich :oops: -- aber ich bin mal wieder im GDI+ Gestrüpp hängengeblieben und hoffe wieder auf eure Hilfe.
In einem TImage habe ich ein Bild von dem ich gern ein Farb-Histogramm (RGB Kanäle) erstellen möchte. Erik van Bilsen hat in seinem GDI+ 1.1 Demo-Programm sogar ein solches Beispiel (s.u.). Dieses Beispiel geht nun davon aus, dass man ein Bitmap-Objekt mit "Bitmap := TGPBitmap.Create('ImageFileSmall.jpg')" erzeugt indem man das File als Parameter übergibt. Und genau hier ist mein Problem: Wie geh ich vor, wenn ich das Bildchen bereits in einer TImage-Komponente habe -- es also zur Laufzeit erzeugt habe, und deshalb kein File als Parameter übergeben kann?
Wie kann ich mein bereits bestehendes Image mit Bitmap vom Typ IGPBitmap verheiraten?
Hier das angesprochene Beispiel -- eigentlich geht es nur um die erste Zeile nach dem Begin:
Delphi-Quellcode:
procedure TDemoHistogram.Run;
var
  Bitmap: IGPBitmap;
  Histogram: IGPHistogram;
  I, J, X, Y, MaxVal: Integer;
  Scale: Double;
  Pen: IGPPen;
begin
 
  Bitmap := TGPBitmap.Create('ImageFileSmall.jpg'); // <-- Hier drum geht es !
 
  Graphics.DrawImage(Bitmap, 10, 10, Bitmap.Width, Bitmap.Height);

  // Retrieve RGB histogram of bitmap
  Histogram := Bitmap.GetHistogram(HistogramFormatRGB);

  // Determine the maximum value in the histogram
  MaxVal := 0;
  for J := 0 to Histogram.ChannelCount - 1 do
    for I := 0 to Histogram.EntryCount - 1 do
      MaxVal := Max(MaxVal, Histogram[J, I]);

  // Scale maximum value so it displays as the height of the bitmap
  Scale := Bitmap.Height / MaxVal;

  // Draw the histogram next to the bitmap
  Pen := TGPPen.Create(0);
  X := 10 + Bitmap.Width + 10;
  Y := 10 + Bitmap.Height;
  for I := 0 to Histogram.ChannelCount - 1 do
  begin
    if (I = 0) then
      Pen.Color := TGPColor.Create(128, 255, 0, 0)
    else if (I = 1) then
      Pen.Color := TGPColor.Create(128, 0, 255, 0)
    else
      Pen.Color := TGPColor.Create(128, 0, 0, 255);

    for J := 0 to Histogram.EntryCount - 1 do
      Graphics.DrawLine(Pen, X + J, Y, X + J, Y - Scale * Histogram[I, J]);
  end;
end;
Habt ihr wohl eine Idee für mich?

Dankeschön & Gruß
Jazzman

Jazzman_Marburg 23. Mai 2011 21:13

AW: Gdi+: Wie Bitmap-Objekt mit Image-Bild verbinden?
 
Ok, das Problem habe ich nun mit Streams gelöst :-D
Guckst Du hier: http://www.computerbase.de/forum/sho...=886663&page=2

Trotzdem vielen Dank!

Gruß an alle!
Jazzman


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