![]() |
Image Map generator
Ich möchte mir eine Imagemap Generator bauen.
Es gibt zwar welche aber keine mit einem Zauberstab. Jetzt zu meiner Frage wie kann ich einen Zauberstab Programmieren, also ich Klicke auf einen z.b. Blauen Bereich und er markiert alles in diesem Bereich. |
Re: Image Map generator
Kuck mal hier, hab ich über die Suche gefunden:
![]() Vielleicht hilft dir das ja schonmal weiter oder gibt dir zumindest einen kleinen Denkanstoß. mfG Patti |
Re: Image Map generator
Also ich kann jetzt meine Markierung machen aber nur den ganzen Bereich, ich möchte aber nur den Rand haben wie kann ich das machen
|
Re: Image Map generator
Entferne alles aus der Menge der markierten Objekte/Pixel/was auch immer, was nicht Teil des Randes ist.
|
Re: Image Map generator
Ich was gemacht ist aber nicht besonders schnell
Delphi-Quellcode:
procedure TDataList.PaintRand(C: TCanvas);
Var i : Longint; Item : TData; Function IsRand1(Const X,Y : Longint;Const IsX : Boolean): Boolean; Var i : Longint; item: TData; Begin i:=0; Result:=False; While i<FList.Count do Begin Item:=Get(i); If (item.X=X) AND (item.Y=Y) then Result:=True; If Result then i:=FList.Count; Inc(i); End; End; Function IsRand(Const X,Y : Longint): Boolean; Var i : Byte; Begin i:=0; If IsRand1(X-1,Y,True) then Inc(i); If IsRand1(X+1,Y,True) then Inc(i); If IsRand1(X,Y-1,False) then Inc(i); If IsRand1(X,Y+1,False) then Inc(i); Result:=i<4; End; begin For i:=0 To FList.Count-1 do Begin Item:=Get(i); If IsRand(Item.X,Item.Y) then C.Pixels[Item.X-FMinX,Item.Y-FMinY]:=clRed; End; end; |
Re: Image Map generator
Wenn mit einer Liste gearbeitet wird, so würde ich diese sortieren.
Delphi-Quellcode:
Dadurch lässt sich die Anzahl der Zugriffe auf die Elemente drastisch reduzieren.
function CompareData(AItem1, AItem2: Pointer): Integer;
begin Result := TData(AItem1^).y - TData(AItem2^).y; if Result = 0 then Result := TData(AItem1^).x - TData(AItem2^).x; end; FList.Sort(CompareData);
Delphi-Quellcode:
Zugriffe auf Pixels sind so ziemlich das langsamste was es gibt bei Bitmaps.
function ComparePoint(AItem: TData; X, Y: Integer): Integer;
begin Result := AItem.Y - Y; if Result = 0 then Result := AItem.X - X; end; function FindPointDown(idx: Integer; X, Y: Integer): Boolean; var iComp: Integer; begin for i := idx - 1 downto 0 do begin iComp := ComparePoint(Get(idx), x, y); if iComp = 0 then begin Result := True; Exit; end; if iComp < 0 then begin Result := False; Exit; end; end; Result := False; end; function FindPointUp(idx: Integer; X, Y: Integer): Boolean; var iComp: Integer; begin for i := idx + 1 to FList.COunt - 1 do begin iComp := ComparePoint(Get(idx), x, y); if iComp = 0 then begin Result := True; Exit; end; if iComp > 0 then begin Result := False; Exit; end; end; Result := False; end; Function IsRand(idx: Integer): Boolean; var Item: TData; begin with Get(idx) do begin Result := FindPointDown(idx, x - 1, Y) and FindPointUp(idx, x + 1, Y) and FindPointDown(idx, x, Y - 1) and FindPointUp(idx, x, Y + 1); end; end; Wenn das Speicherformat bekannt ist, kann man die Bitmap direkt über Scannline ändern. Hier noch ein Link zum Thema allgemein: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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