AGB  ·  Datenschutz  ·  Impressum  







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

Image Map generator

Ein Thema von franktron · begonnen am 25. Aug 2009 · letzter Beitrag vom 28. Aug 2009
Antwort Antwort
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Image Map generator

  Alt 25. Aug 2009, 14:56
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.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Image Map generator

  Alt 25. Aug 2009, 15:16
Kuck mal hier, hab ich über die Suche gefunden: Thread in der DP. Vor allem der Pseudocode aus Beitrag #2 scheint interessant, du müsstest ihn lediglich in "richtigen" Delphi-Quellcode übersetzen.

Vielleicht hilft dir das ja schonmal weiter oder gibt dir zumindest einen kleinen Denkanstoß.

mfG
Patti
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

Re: Image Map generator

  Alt 26. Aug 2009, 12:48
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
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#4

Re: Image Map generator

  Alt 27. Aug 2009, 13:09
Entferne alles aus der Menge der markierten Objekte/Pixel/was auch immer, was nicht Teil des Randes ist.
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: Image Map generator

  Alt 27. Aug 2009, 13:32
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;
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#6

Re: Image Map generator

  Alt 28. Aug 2009, 09:16
Wenn mit einer Liste gearbeitet wird, so würde ich diese sortieren.
Delphi-Quellcode:
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);
Dadurch lässt sich die Anzahl der Zugriffe auf die Elemente drastisch reduzieren.
Delphi-Quellcode:
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;
Zugriffe auf Pixels sind so ziemlich das langsamste was es gibt bei Bitmaps.
Wenn das Speicherformat bekannt ist, kann man die Bitmap direkt über Scannline ändern.

Hier noch ein Link zum Thema allgemein:
http://www.codeproject.com/KB/GDI/Qu...select=1306625
  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 23:12 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