Graphic32 filtr

0

Witam potrzebowal bym jakiś informacji ,pomocy przy napisaniu filtra ktory by dzialal na zasadzie odcinania pikseli polaczonych jednego koloru ktorych suma jest mniejsza od stalej wartosci np 200 pikseli tu przyklad

obraz przed filtracja
user image

i po

user image

z gory dziekuje o pomoc

0

Widzę że masz dylemat, to opublikuję instrukcję:
1.Uruchamiasz notatnik/inny edytor
2.Piszesz kod
3.Kompilujesz
4.Uruchamiasz
5.???
6.PROFIT!

0

Dzieki za instrukcje ale lepiej kabys podal jakis przyklad bo na razie utknelem w tym miejscu

 
var
  i,x,y: Integer;
  jednostka : Single;
  SrcPColor: PColor32;
  R, G, B, RO, GO, BO: Cardinal;
begin
  Src.BeginUpdate;
  try
    SrcPColor := @Src.Bits[0];
    for i := 0 to Src.Width * Src.Height - 1 do  begin
      RO := SrcPColor^;
      RO := (RO and $00FF0000) shr 16;
      GO := SrcPColor^;
      GO := (GO and $0000FF00) shr 8;
      BO := SrcPColor^;
      BO := BO and $000000FF;

      if (RO=255) and (RO=255) and (RO=255) then
        begin
        end;

nie mam pomyslu jak obliczacz ilosc nie polaczonych pixeli i zeby to szybko dzialalo

0

myslalem zeby jak znajde pixel o kolorze bialym to uzywam

Src.Canvas.Brush.Color := clred;
Src.Canvas.FloodFill(x,y,ClBlack,fsBorder);

zeby zmienic na czerwony i zliczyc czerwone pixele jezei suma tych pixeli byla my mniejsza niz 20 to bym je na czarno zamalowywal ,ale raczej szybko by to nie dzialalo

0

nie mam pomyslu jak obliczacz ilosc nie polaczonych pixeli i zeby to szybko dzialalo

Najszybciej to chyba będzie rekurencyjnie. I nie wiem po co wyznaczasz wartości wszystkich wartości RGB oddzielnie, skoro zależy tobie na jednym kolorze.

0

Pomalu sie zapentlam mam cos takiego

procedure FloodFill(P: PColor32Array;I ,Max ,Width :Integer);
var
y,yy:integer;
begin

if (I > max) or (I < 0 ) then exit;
if P[I] <> $FFFFFFFF then exit;

   y:=I+Width;
   yy:=I-Width;

 P[I] := $FFFF00FF;

    FloodFill(P,y,max,Width); // wołanie procedury dla punktu powyżej
    FloodFill(P,I+1,max,Width); // dla punktu z prawej strony
    FloodFill(P,yy,max,Width); // dla punktu poniżej
    FloodFill(P, I-1,max,Width); // dla punktu z lewej strony
 
  inc(count);
end;

procedure ColorSubtract1(Src: TBitmap32);
var
  i,x,y: Integer;
  jednostka : Single;
  P: PColor32Array;
  R, G, B, RO, GO, BO: Cardinal;
begin
  Src.BeginUpdate;
  try

    P := Src.Bits;

    for I := 0 to Src.Width * Src.Height - 1 do
      begin
       if P[I] = $FFFFFFFF then
       begin
       count:=0;
       FloodFill(P,I,Src.Width * Src.Height - 1,Src.Width);//4294967295 then
      end;
       end;
  finally
    with Src do begin
      EndUpdate;
      Changed;
    end;
  end;
end; 

i caly czas wywala mi bledy wie ktos dlaczego?

0

i caly czas wywala mi bledy wie ktos dlaczego?

kompilator mści się za nieumiejętność użycia debuggera.

0

juz podejrzewam co jest nie tak a wiec, gdy za duzo razy zostanie wywołana procedura przez samą siebie stos sie przepełnia.czyli przez rekurencje sie wysypuje pytanie jak temu zapobiec?

0

czyli przez rekurencje sie wysypuje pytanie jak temu zapobiec?

Użyj komponentu TBrain, on ci pomoże.
A jak nie dysponujesz TBrain to google.

2

szczerze mowiac to twoje posty malo wnosza i nie sa odpowiedzia na pytanie

0

szczerze mowiac to twoje posty malo wnosza i nie sa odpowiedzia na pytanie

Niestety nie daję niczego na talerzu. Uczę myślenia a nie przepisywania kodu. Jeżeli tobie to nie pasuje, to bardzo mi przykro, ale niestety taki już jestem wymagający względem mojego rozmówcy.

0

No ok rozumeim ale specialnie tu napisalem zeby dostac jakies informacje nie gotowy kod i zeby nie googlowac trzy dni.Za niedlugo moze przerobią to forum ze jak nacisnie sie opublikuj post to mi wyniki wyszukiwania z google wyskocza ale na razie tak nie ma wiec wolal bym uniknac tego googlowania

0

wolal bym uniknac tego googlowania

No to nie rób nic, czekaj aż zrobią za ciebie. Naiwniak.

zeby dostac jakies informacje nie gotowy kod i zeby nie googlowac trzy dni

No to może było googlować 3 dni, skoro twoje pytania są bardzo ogólne i bardzo głupie.

Btw. twoja wcześniejsza wypowiedź:

Dzieki za instrukcje ale lepiej kabys podal jakis przyklad

Na pewno nie chcesz gotowca.

Za niedlugo moze przerobią to forum ze jak nacisnie sie opublikuj post to mi wyniki wyszukiwania z google wyskocza

Twój problem jest banalny i trochę wysiłku z twojej strony go rozwieje. My tutaj rozmawiamy o niebanalnych problemach (przynajmniej w teorii bo częściej odpisujemy nierobom).

Jeżeli chcesz uzyskać jakąś sensowną odpowiedź to radzę tobie zadać pytanie jeszcze raz tylko mądrzej wskazując to co już usiłowałeś zrobić i to że brałeś pod uwagę nasze wskazówki (np. moją o użyciu debuggera). Póki co tylko masz jakieś dziwne oczekiwania, że zastąpimy tobie google, a moim zdaniem na forum się pyta gdy google nie pomaga. Marnujesz głupimi pytaniami (bo nie chce mi się na google) nasz czas i jeszcze się dziwisz że odpisuję tak a nie inaczej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1