Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Bitmap in Array einlesen (https://www.delphipraxis.net/42890-bitmap-array-einlesen.html)

daniel738 24. Mär 2005 22:03


Re: Bitmap segmentieren
 
Hi,
ich wuerde gerne wissen wie ich ein komplettes Mitmap in ein (zwei-)dimensionalen Array einlesen kann?
Danke,
Daniel

Muetze1 24. Mär 2005 22:12

Re: Bitmap segmentieren
 
Moin!

Wie sieht denn das Array aus, also ein 2 dimensionales Array welchen Datentyps und vor allem: was für Informationen sollen dadrinne stehen? Bei palettenbasierten Bitmaps der Index in der Farbpalette oder direkt die RGB Werte? Oder willst du nur den Helligkeitswert jedes Pixels speichern in den Array oder vielleicht nur den Graustufenwert? Was denn?

MfG
Muetze1

daniel738 24. Mär 2005 23:52

Re: Bitmap segmentieren
 
Hallo,
hmm also die Infos habe ich zu meinem Bitmaps:

Breite: 240 Pixel
Höhe: 210 Pixel
Horizontale und vertikale Auflösung je 96dpi
Bildtiefe: 8

Das Bitmap wird in Graustufen dargestellt.

Ich möchte den Farbwert an an der Stelle x,y in dem dazugeigneten Dateiformat (Byte ?) auslesen, und eventuell in einen zweidimensionalen Array einlesen um dann die Farbunterschiede von Pixel zu Pixel zu analysieren. Auf dem Bildern ist vereinfacht gesagt, in der Mitte ein schwarzer Balken dessen Position ich bestimmen möchte. Deshalb werde ich mir den Array auch eventuell sparen und die Punkte gleich miteinander vergleichen, mein Problem ist vorallem das auslesen der Farbwerte aus dem Bitmap.

Vielen Dank!
Daniel

Khabarakh 25. Mär 2005 10:10

Re: Bitmap segmentieren
 
Schau mal in der OH nach Delphi-Referenz durchsuchenTBitmap.Scanline oder auch hier in der DP. Nimm aber auf keinen Fall TCanvas.Pixels (was zwar leichter zu bedienen ist), wenn dir Performance nicht ganz egal ist.
Oder natürlich die GR32-Lib :angel2: .

steppo 25. Mär 2005 11:24

Re: Bitmap segmentieren
 
Hi Leute, ich finde etwas mekwürdig, dass einfach Themen einem bestehenden Thema hinzugefügt werden.
Noch merkwürdiger ist es allerdings, das die zweite Frage beantwortet wird, die erste jedoch in Vergessenheit gerät.

Khabarakh 25. Mär 2005 11:43

Re: Bitmap segmentieren
 
Zitat:

Zitat von steppo
Hi Leute, ich finde etwas mekwürdig, dass einfach Themen einem bestehenden Thema hinzugefügt werden.
Noch merkwürdiger ist es allerdings, das die zweite Frage beantwortet wird, die erste jedoch in Vergessenheit gerät.

Jetzt wo du es sagst :wall:

[edit]Mist, gestern hatte es mich doch schon gewundert :stupid: .

daniel738 25. Mär 2005 12:45

Re: Bitmap segmentieren
 
Hey,
entschuldigung werde in Zukunft mich bessern!

Ich frage jetzt noch mal hier was, zum gleichen Thema da meine Frage teils ja schon beantwortet wurde.
Habe das erstmal mit canvas "gemacht", bzw. aus einem anderen Frage hier im Forum rauskopiert.
Es kommmt aber immer zu einer Exception der Klasse EAccessViolation Zugriffsverletzung...
in der Zeile

Image1.Picture.Bitmap.Assign(BMP);

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
  var               //Hier wird das Bild in Image1 eingelesen
  BMP : TBitmap;
  farben:array of integer;
  i,j,k:integer;

begin
    BMP := TBitmap.Create;
 try
    BMP.LoadFromFile('C:\test.bmp');
    Image1.Picture.Bitmap.Assign(BMP);
  finally
    BMP.Free;
     //Hier werden die Farbwerte ausgelesen

  for i:= 0 to Image1.Picture.Bitmap.Width - 1 do
    for j:= 0 to Image1.Picture.Bitmap.Height - 1 do
    begin
       farben[k]:=image1.canvas.pixels[i,j];
       Inc(k);
    end;

  end;
end;

steppo 25. Mär 2005 21:38

Re: Bitmap in Array einlesen
 
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
  var               //Hier wird das Bild in Image1 eingelesen
  BMP : TBitmap;
  farben:array of integer;
  i,j,k:integer;
begin
//
end;
Hier wird kein Image eingelesen, sondern lediglich Variablen deklariert.

Delphi-Quellcode:
    BMP := TBitmap.Create;
try
    BMP.LoadFromFile('C:\test.bmp');
    Image1.Picture.Bitmap.Assign(BMP);
  finally
    BMP.Free;
     //Hier werden die Farbwerte ausgelesen

  for i:= 0 to Image1.Picture.Bitmap.Width - 1 do
    for j:= 0 to Image1.Picture.Bitmap.Height - 1 do
    begin
       farben[k]:=image1.canvas.pixels[i,j];
       Inc(k);

    end;

  end;
Der zweite Punkt ist, bevor du die Werte ausliest, gibst du das Bitmap wieder frei!
Deine Schleife gehört in den Try - Teil deiner Procedure.

Khabarakh 26. Mär 2005 09:01

Re: Bitmap in Array einlesen
 
Zitat:

Zitat von steppo
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
  var               //Hier wird das Bild in Image1 eingelesen
  BMP : TBitmap;
  farben:array of integer;
  i,j,k:integer;
begin
//
end;
Hier wird kein Image eingelesen, sondern lediglich Variablen deklariert.

Der Kommentar gehört wohl eher zur gesamten Prozedur.
Zitat:

Delphi-Quellcode:
    BMP := TBitmap.Create;
try
    BMP.LoadFromFile('C:\test.bmp');
    Image1.Picture.Bitmap.Assign(BMP);
  finally
    BMP.Free;
     //Hier werden die Farbwerte ausgelesen

  for i:= 0 to Image1.Picture.Bitmap.Width - 1 do
    for j:= 0 to Image1.Picture.Bitmap.Height - 1 do
    begin
       farben[k]:=image1.canvas.pixels[i,j];
       Inc(k);

    end;

  end;
Der zweite Punkt ist, bevor du die Werte ausliest, gibst du das Bitmap wieder frei!
Deine Schleife gehört in den Try - Teil deiner Procedure.
Er lädt ein Bild ins Bitmap, weist dies dem Image zu, gibt das Bitmap dann frei und greift dann auf die Pixel des Images zu. Dazu braucht er ja das Bitmap nicht mehr (auch wenn es natürlich nicht der beste Weg ist).


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