Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bild direkt auf Form ausschneiden (https://www.delphipraxis.net/116297-bild-direkt-auf-form-ausschneiden.html)

taktaky 26. Jun 2008 14:03


Bild direkt auf Form ausschneiden
 
Hallo

ich lade ein Bild in TImage in meine Form und wollte ich ohne zusätzliche Software direkt auf Form
ausschneiden und wieder speichern

Kann Delphi oder Ein delphier das machen ?

http://members.lycos.co.uk/forforums...size_image.jpg
http://members.lycos.co.uk/forforums...ize_image3.jpg

Brainshock 26. Jun 2008 14:25

Re: Bild direkt auf Form ausschneiden
 
Nein

_frank_ 26. Jun 2008 15:24

Re: Bild direkt auf Form ausschneiden
 
http://www.delphi-forum.de/viewtopic...=440997#440997

Gruß Frank

Brainshock 26. Jun 2008 15:53

Re: Bild direkt auf Form ausschneiden
 
Sieht für mich eher nach Designtime als nach Runtime aus was er meint. Kann mich aber auch irren, da irgendwie keine genaue Frage (verständliche Frage) gestellt wurde.

_frank_ 26. Jun 2008 16:00

Re: Bild direkt auf Form ausschneiden
 
imho geht das @designtime nicht (wie auch brainshock schon schrieb).
delphi ist ein Programmier-Werkzeug und keins für Bildbearbeitung. demnächst wollen noch farbkanal, helligkeit etc. anpassbar sein :)
welchen sinn soll das haben und warum nicht vorher im paint o.ä. öffnen und da zuschneiden?
hab sowas noch nie gebraucht und bin schon seit knapp 9 Jahren mit delphi unterwegs.

Gruß Frank

Noobinator 26. Jun 2008 18:35

Re: Bild direkt auf Form ausschneiden
 
Wenn ich dich richtig verstanden habe (du willst einen Bildausschnitt ausschneiden) solltest du dich mal mit copyrect beschäftigen.
  • Bereich auswählen
  • Bereich in eine Bitmap im Hintergrund speichern
  • Bitmap mit savetofile speichern

DeddyH 26. Jun 2008 18:36

Re: Bild direkt auf Form ausschneiden
 
Aber nicht zur Designtime.

Noobinator 26. Jun 2008 18:41

Re: Bild direkt auf Form ausschneiden
 
Zitat:

Zitat von DeddyH
Aber nicht zur Designtime.

ja das ist ja klar, aber warum sollte man sowas überhaupt zur Designtime machen wollen?
Ich erstelle mir doch kein zu großes Bild für meine Programme, um diese dann noch umständlich im Programmdesign zu verändern :gruebel:

DeddyH 26. Jun 2008 18:42

Re: Bild direkt auf Form ausschneiden
 
Lies mal den ganzen Thread. Solange niemand die Frage kennt, kann auch niemand die Antwort geben (außer eine vielleicht: 42).

taktaky 26. Jun 2008 19:41

Re: Bild direkt auf Form ausschneiden
 
Hallo Frank

das demo ist genau was ich meine. Mein Problem ist damit gelöst. Danke


Gruß

taaktaak 26. Jun 2008 20:09

Re: Bild direkt auf Form ausschneiden
 
Hallo Brüderchen, schau dir mal den rzMagnifier an. Der macht genau so etwas...

taktaky 27. Jun 2008 00:49

Re: Bild direkt auf Form ausschneiden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von _frank_
http://www.delphi-forum.de/viewtopic.php?p=440997#440997

Gruß Frank


Das Demo funktioniert nur wenn ich die Form nicht skaliere, sonst stimmt nicht mit der Auswahl
Hier ist das kleine Projekt
Wo muss ich ändern, damit die Auswahl mit Mausklick drauf kommt ?

_frank_ 27. Jun 2008 01:44

Re: Bild direkt auf Form ausschneiden
 
Liste der Anhänge anzeigen (Anzahl: 1)
warum zum Geier wollt ihr alle auf vergrößerten TImages malen? das hatten wir doch nun erst...
http://www.delphipraxis.net/internal...t.php?t=136843 :roll:

bei solchen spielereien baut euch ne eigene klasse, die das stretch handelt und in dem fall das selection-Rect.dann habt ihr die kontrolle über alle zeichenroutinen und könnt diese in der richtigen Reihenfolge und performant durchführen.
zoom-funktionalitäten mittels TImage.Stretch zu realisieren bringt mehr Probleme als es löst, besonders, wenn noch zusätzliche Zeichen-Routinen ins Spiel kommen.
Entweder zeichnen oder TImage. TImage ist ein reiner Grafikcontainer und nicht fürs Zeichnen konzipiert.
die Demo soll nur veranschaulichen, wie es unter normalen Bedingungen funktioniert (mousedown/mousemove/mouseup/pmXor). TImage hab ich an dem Punkt nur genommen, um nicht mit einer eigenen Klasse gleich zu verwirren. dafür gibts den download im lezten Posting des verlinkten Threads :)

im Anhang mal das Grundgerüst einer solchen Zeichenkomponente.da das schon öfters gefragt wurde, hab ichs mal fix zusammengetippt...aber nicht einfach nur kopieren, sondern verstehen!

Gruß Frank

taktaky 27. Jun 2008 10:12

Re: Bild direkt auf Form ausschneiden
 
Fine :)
Mit dem vorherigen Demo habe ich genauso gemacht um die Koordinaten vom Rectangle zu zeigen und hat geklappt
mit diesem Demo klappt nicht :

Delphi-Quellcode:
...
  private
    fSelRect:TRect; //declared
...
procedure TForm1.Timer2Timer(Sender: TObject);
begin
      Edit1.Text:= intToStr(fselRect.left); // undeclared fselRect !
      Edit2.Text:= intToStr(FselRect.Top); // ...
      Edit3.Text:= intToStr(FselRect.right);
      Edit4.Text:= intToStr(FselRect.bottom);

Showmessage(Edit1.Text+',' + Edit2.Text+',' +Edit3.Text+',' +Edit4.Text);
end;

Daniel 27. Jun 2008 10:22

Re: Bild direkt auf Form ausschneiden
 
taktaky, Du hast genau zwei Möglichkeiten:

Entweder Du fängst schleunigst an, vollständige Beiträge zu schreiben - dazu gehört unter Anderem die Beschreibung dessen, was Du getan hast und auch die genaue Beschreiubng, was nicht klappt und auch irgendeine konkrete Frage. Wenn Du weiter damit fortfahren willst, uns Beiträge mit dem Satz "geht nicht" hinzurotzen, dann suche Dir dafür ein anderes DelphiForum. Ich habe die Faxen echt satt.

taktaky 27. Jun 2008 10:32

Re: Bild direkt auf Form ausschneiden
 
Das Problem ist nur hier :

Delphi-Quellcode:
procedure TDrawControl.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin


  fSelecting:=false;
  clipcursor(nil);
  inherited;
 // showmessage(intToStr(fselRect.left));// so klappt. Ich kann alle Werte anzeigen
  Edit1.Text:=intToStr(fselRect.left); // aber so nicht !
// Debugg sagt : Undeclard Edit1 ! Als keine Edit1 auf meine Form wäre !

end;
Ich kann die Koordinaten vom Rectange in eine Message zeigen aber in Edit nicht
Warum ?

_frank_ 27. Jun 2008 10:40

Re: Bild direkt auf Form ausschneiden
 
naja, was nicht geht steh ja im Quelltext..."undeclared"
in TForm1 gibt es keine Variable fSelRect...
FSelRect ist eine private-Deklaration innerhalb TDrawControl ist ist somit nicht in TForm1 verfügbar.
genauso wie TDrawControl Edit1 nicht kennt ;) woher soll der compiler das wissen, dass Edit1 auf Form1 zu finden ist? das musst du ihm schon sagen, wobei statische, instanzübergreifende Abhängigkeiten dringends zu vermeiden sind.

um Private-Felder von außerhalb zu setzen, erstellt man Properties (am besten mit Setter, damit man nch dem setzen gleich redraw aufrufen kann). die Properties kommen dann entweder nach published (später im OI sichtbar) oder public (nur vom Quelltext aus ereichbar).und zugriff dann natürlich mittels <instanzvariable>.<property>:=<Wert>;

Und nicht auf die Idee kommen "Dann mach ich die Variable halt public"...

warum fragst du eigentlich nicht mal dein Brüderchen oder hat taaktaak das nur so gesagt? (vielleicht ist er auch schon verzweifelt *g*). ich denke mal, er kann dir auch einige Tips geben, auch was das Posten hier betrifft.

Gruß Frank

taktaky 27. Jun 2008 16:29

Re: Bild direkt auf Form ausschneiden
 
Du hast Recht :wink:
Ich habe das Problem gelöst nachdem ich Variable als global definiert habe

Ich möchte die Pen-Breite ändern aber sie bleibt immer dünn und egal was für einen Wert ich eingebe !
Delphi-Quellcode:
procedure TDrawControl.DrawSelRect;
begin
  fbmp.Canvas.Pen.Color:=clBlue;
  fbmp.Canvas.Pen.Mode:=pmNotXor;
  fbmp.Canvas.Pen.Style:=psDot;
  fbmp.Canvas.Rectangle(fSelRect.left,fSelRect.top,fSelRect.right,fSelRect.bottom);
  fbmp.Canvas.Pen.Style:=psSolid;
  fbmp.Canvas.Pen.Mode:=pmCopy;
  fbmp.Canvas.Pen.Color:=clBlack;
  fbmp.Canvas.Pen.width:=5; // Bleibt immer sie selbe !
end;

DeddyH 27. Jun 2008 16:49

Re: Bild direkt auf Form ausschneiden
 
Wie wäre es denn, wenn Du die Stiftbreite setzt, bevor Du zeichnest?

_frank_ 27. Jun 2008 17:26

Re: Bild direkt auf Form ausschneiden
 
Zitat:

Zitat von taktaky
Ich habe das Problem gelöst nachdem ich Variable als global definiert habe

genau das solltest du nicht machen! :wall: du solltest ein property definieren.

Delphi-Quellcode:
protected
  procedure SetSelRect(r:TRect);
published
  property SelRect:TRect read fSelRect write SetSelRect;

..

procedure TDrawControl.SetSelRect(r:TRect);
begin
  fSelRect:=r;
  redraw;
end;
und dann von form1 aus über die instanzvariable setzen:

Delphi-Quellcode:
dc.SelRect:=Rect(0,0,100,50);
richtig lesen, mitdenken und ein bisschen mehr Eigeninitiative wären sehr wünschenswert...

HTH Frank

taktaky 27. Jun 2008 19:50

Re: Bild direkt auf Form ausschneiden
 
Ich habe die Breite-Eigenschaft nach oben, wie deddy vorgeschlagen hat :P

Delphi-Quellcode:
procedure TDrawControl.DrawSelRect;
begin
  fbmp.Canvas.Pen.width:=5;
  fbmp.Canvas.Pen.Color:=clBlue;
...

end;
Danke beide

Gruß

Brainshock 27. Jun 2008 21:47

Re: Bild direkt auf Form ausschneiden
 
Respekt an _frank_, du bist scheinbar der Einzige der einigermaßen versteht, was der taktaky will.

dominikkv 27. Jun 2008 21:50

Re: Bild direkt auf Form ausschneiden
 
Zitat:

Zitat von Brainshock
Respekt an _frank_, du bist scheinbar der Einzige der einigermaßen versteht, was der taktaky will.

leider vergebene Liebesmühe...

_frank_ 27. Jun 2008 23:03

Re: Bild direkt auf Form ausschneiden
 
Zitat:

Zitat von Brainshock
Respekt an _frank_, du bist scheinbar der Einzige der einigermaßen versteht, was der taktaky will.

danke, da ich auf Arbeit relativ vielen leuten viel zeug (meist doppelt und dreifach) nebenbei erklären muss, hab ich auch die Geduld dazu...
Nach meinem Demolink hat doch taktaky gesagt, dass es das war, was er gesucht hat...und mit dem Thema grafische Komponenten (in dem Stil) hab ich mich schon intensiver beschäftigt (siehe die TSelImage-Klasse,Circuitboard,...). also nichts, wo ich groß nachdenken muss :)

Zitat:

Zitat von dominikkv
leider vergebene Liebesmühe...

die Mühe, die ich mir in dem Thread gemacht habe, ist weniger für taktaky...wie oben schon geschrieben, ist das schon häufiger ein Thema gewesen, dass TImage zum Malen missbraucht wird und oft in Verbindung mit TImage.Stretch. spätestens dann gehts schief :)
Daher wollte ich das als so ne Art Muster-Thread aufziehen, um solche Versuche zumindest in Grenzen zu halten.
und letztendlich habe ich auch schon des öfteren Hilfe hier gefunden, so kann ich auch meinen Beitrag leisten.
vielleicht bereite ich die Klasse auch noch bisschen auf für die Codelib (Kommentare,eigene Unit, etc.), wenn Bedarf besteht. Vielleicht gibts noch irgendwelche Kritik/Erweiterungspunkte...

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 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