![]() |
TBitmap nur zusammenhängende Pixel kopieren
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:
zusätzlich habe ich auch schon mit einem zweiten pointer experimentiert,
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; 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 |
Re: TBitmap nur zusammenhängende Pixel kopieren
Das riecht für mich nach einer Rekursion. In etwa so: (Pseudocode)
Delphi-Quellcode:
So in etwa müsstest du an alle zusammenhängenden Pixel einer Farbe ausgehend vom Startpixel heran kommen.
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; Gruss, Fabian |
Re: TBitmap nur zusammenhängende Pixel kopieren
Kuck mal da:
![]() da kriegst du mehr als du eigentlich wolltest. :???: [edit]vielleicht doch nicht, denn du wolltest ja nur zusammenhängende Flächen [/edit] |
Re: TBitmap nur zusammenhängende Pixel kopieren
über eine art landkarte hab ich auch schon nachgedacht,
fehlt mir leider die erfahrung für :( trotzdem danke euch beiden |
Re: TBitmap nur zusammenhängende Pixel kopieren
Das Thema hier klingt
![]() |
DP-Maintenance
Dieses Thema wurde von "sakura" von "Object-Pascal / Delphi-Language" nach "Multimedia" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 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-2025 by Thomas Breitkreuz