AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TBitmap nur zusammenhängende Pixel kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

TBitmap nur zusammenhängende Pixel kopieren

Ein Thema von endeffects · begonnen am 28. Apr 2005 · letzter Beitrag vom 3. Mai 2005
Antwort Antwort
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#1

TBitmap nur zusammenhängende Pixel kopieren

  Alt 28. Apr 2005, 11:27
Hallo,

ich möchte aus einem TBitmap nur Pixel einer Farbe kopieren
die zum selben Objekt gehören, was allerdings gar nicht so einfach ist.
ähnlich dem photoshop werkezug "zauberstab" mit der option "benachbart".

angefangen hab ich nun mit einer methode die das bild von links nach recht
spaltenweise (!) einliest und alle pixel der selben farbe in ein zweites
bitmap kopiert:

Delphi-Quellcode:
  x:= 0;
  while x < CacheBitmap.Width - 1 do
  begin
    for y := 0 to CacheBitmap.Height - 1 do
    begin
      P := CacheBitmap.ScanLine[y];
      for i:= 0 to x do
        inc(P);
      if (P^.rgbRed = 0) and (P^.rgbGreen = 0) and (P^.rgbBlue = 0) then
      begin
        MyRect:= Rect(x, y, SmartBitmap.Height-1, SmartBitmap.Width-1);
        MyOther:= Rect(x,y,SmartBitmap.Height-1, SmartBitmap.Width-1);
        SmartBitmap.Canvas.CopyRect(MyOther,CacheBitmap.Canvas,MyRect);
      end;
    end;
    inc(x);
  end;
zusätzlich habe ich auch schon mit einem zweiten pointer experimentiert,
der den nächst liegenden rechten pixel mit dem aktuellen vergleicht.
mein problem allerdings bleibt bestehen, wie erkenne ich wann welcher
pixel zur selben form gehört. hat da jemand vielleicht eine idee?

ein gutes beispiel um das zu veranschaulichen wäre z.B. das 'E' und die '3'.
von links nach recht gelesen fällt es besonders bei der '3' schwer die pixel zu zuordnen.

mfg
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TBitmap nur zusammenhängende Pixel kopieren

  Alt 28. Apr 2005, 11:43
Das riecht für mich nach einer Rekursion. In etwa so: (Pseudocode)
Delphi-Quellcode:
var
  Pixelliste: TList (oder ähnliches);

procedure MakePixellist(x, y: Integer {Startpunkt}; c: TColor);
begin
  if PixelIstNichtInListe then
  begin
    if FabeAtXY = c then
    begin
      PackeXYinDieListe;
      MakePixellist(x+1, y , c);
      MakePixellist(x , y+1, c);
      MakePixellist(x-1, y , c);
      MakePixellist(x , y-1, c);
    end;
  end;
end;
So in etwa müsstest du an alle zusammenhängenden Pixel einer Farbe ausgehend vom Startpixel heran kommen.

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: TBitmap nur zusammenhängende Pixel kopieren

  Alt 28. Apr 2005, 12:32
Kuck mal da:
http://www.efg2.com/Lab/Graphics/Colors/ColorRange.htm
da kriegst du mehr als du eigentlich wolltest.
[edit]vielleicht doch nicht, denn du wolltest ja nur zusammenhängende Flächen [/edit]
Andreas
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#4

Re: TBitmap nur zusammenhängende Pixel kopieren

  Alt 28. Apr 2005, 12:48
über eine art landkarte hab ich auch schon nachgedacht,
fehlt mir leider die erfahrung für

trotzdem danke euch beiden
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: TBitmap nur zusammenhängende Pixel kopieren

  Alt 3. Mai 2005, 10:21
Das Thema hier klingt diesem doch recht ähnlich .
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
3. Mai 2005, 10:28
Dieses Thema wurde von "sakura" von "Object-Pascal / Delphi-Language" nach "Multimedia" verschoben.
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 11: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