AGB  ·  Datenschutz  ·  Impressum  







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

Bitmap in Array einlesen

Ein Thema von daniel738 · begonnen am 24. Mär 2005 · letzter Beitrag vom 26. Mär 2005
Antwort Antwort
daniel738

Registriert seit: 24. Mär 2005
3 Beiträge
 
#1

Re: Bitmap segmentieren

  Alt 24. Mär 2005, 22:03
Hi,
ich wuerde gerne wissen wie ich ein komplettes Mitmap in ein (zwei-)dimensionalen Array einlesen kann?
Danke,
Daniel
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Bitmap segmentieren

  Alt 24. Mär 2005, 22:12
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
  Mit Zitat antworten Zitat
daniel738

Registriert seit: 24. Mär 2005
3 Beiträge
 
#3

Re: Bitmap segmentieren

  Alt 24. Mär 2005, 23:52
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
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Bitmap segmentieren

  Alt 25. Mär 2005, 10:10
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 .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: Bitmap segmentieren

  Alt 25. Mär 2005, 11:24
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.
Wir sind heute die, vor denen uns unsere Eltern immer gewarnt haben!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Bitmap segmentieren

  Alt 25. Mär 2005, 11:43
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

[edit]Mist, gestern hatte es mich doch schon gewundert .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
daniel738

Registriert seit: 24. Mär 2005
3 Beiträge
 
#7

Re: Bitmap segmentieren

  Alt 25. Mär 2005, 12:45
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;
  Mit Zitat antworten Zitat
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Bitmap in Array einlesen

  Alt 25. Mär 2005, 21:38
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.
Wir sind heute die, vor denen uns unsere Eltern immer gewarnt haben!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Bitmap in Array einlesen

  Alt 26. Mär 2005, 09:01
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).
Sebastian
Moderator in der EE
  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 19:34 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