Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeichnen auf Image mit zoom (https://www.delphipraxis.net/160149-zeichnen-auf-image-mit-zoom.html)

thomas2009 29. Apr 2011 18:04

Zeichnen auf Image mit zoom
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich suche eine Lösung, wie man die Image zoomt und dann drauf zeichnet
Das ist meine erste Idee um einen Zoom Faktor zu berechnen
Vielleicht hat jemand noch eine bessere Idee

Meine Frage ist folgendes :
Ist die Berechnung mit Trunc oder Round nicht so gefährlich und nicht genauer, wenn ich beim Zeichnen den berechneten Faktor verwende ?
Delphi-Quellcode:
var
  Form1: TForm1;
  zoom: Real;

implementation

{$R *.dfm}

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if Trackbar1.Position > 10 then begin
zoom:=Trackbar1.Position-10; end;

if Trackbar1.Position = 10 then begin
zoom:=1; end;

if Trackbar1.Position < 10 then begin
zoom:=Trackbar1.Position/10; end;

Edit1.Text:= FloatToStr(zoom);

//Image1.Stretch:=True;
//Image1.autosize:=False;


end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Trackbar1.Position:=Trackbar1.Position+2;
Image1.Width:=Round(Image1.Picture.Width*zoom);
Image1.Height:=Round(Image1.Picture.Height*zoom);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Trackbar1.Position:=Trackbar1.Position-2;
Image1.Width:=Round(Image1.Picture.Width*zoom);
Image1.Height:=Round(Image1.Picture.Height*zoom);
end;

end.

DeddyH 29. Apr 2011 18:09

AW: Zeichnen auf Image mit zoom
 
Prozentrechnung und die Grafik skalieren, ist das so schwer?

s.h.a.r.k 29. Apr 2011 18:13

AW: Zeichnen auf Image mit zoom
 
Das kann hier echt nicht dein Ernst sein?! Deine Threads sollte man zunächst alle auf geschlossen setzen und erst deren Inhalt auf Sinn prüfen...

Delphi-Quellcode:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if Trackbar1.Position > 10 then begin
zoom:=Trackbar1.Position-10; end;

if Trackbar1.Position = 10 then begin
zoom:=1; end;

if Trackbar1.Position < 10 then begin
zoom:=Trackbar1.Position/10; end;

Edit1.Text:= FloatToStr(zoom);

Image1.Stretch:=True;
Image1.autosize:=False;


end;
Wie oft willst du Stretch und Autosize denn setzen?!

thomas2009 29. Apr 2011 18:15

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von DeddyH (Beitrag 1097698)
Prozentrechnung und die Grafik skalieren, ist das so schwer?

Meinst Du besser die Bitmap skalieren statt das Strecke zu verwenden ?
Aber das ständige skalieren von Bitmap geht die Qualität verloren :(
Oder habe ich falsch verstanden ?

Zitat:

Zitat von s.h.a.r.k (Beitrag 1097699)
Wie oft willst du Stretch und Autosize denn setzen?!

man kann die 2. Zeilen wegnehmen. ok

DeddyH 29. Apr 2011 18:17

AW: Zeichnen auf Image mit zoom
 
Meine Güte :wall: Behalt die Originalgrafik im Speicher, erstelle beim Zoomen eine neue aus dem Original, skaliere diese und lade sie ins Image. Wird der Zoomfaktor geändert, wiederholst Du das Ganze. Mit ein bisschen Hirnschmalz kann man darauf kommen, oder?

thomas2009 29. Apr 2011 18:29

AW: Zeichnen auf Image mit zoom
 
Wenn man die Bitmap 10x skaliert und dann drauf Texte, Grafiken, ... zeichnet und wieder 10x verkleinert, bleibt die Qualität 100% die selbe ?

DeddyH 29. Apr 2011 18:30

AW: Zeichnen auf Image mit zoom
 
Du hast schon gelesen, was ich geschrieben habe? Wenn ja, hast Du es auch verstanden?

mkinzler 29. Apr 2011 18:31

AW: Zeichnen auf Image mit zoom
 
Das Quellimage ist ja immer das Selbe.
Wenn du natürlich im das Ergebnis als Quelle der nächsten Skalierung verwendest natürlich nicht.

DeddyH 29. Apr 2011 18:33

AW: Zeichnen auf Image mit zoom
 
Siehste, Markus hat es gleich kapiert. Manchmal habe ich das Gefühl, ich poste hier in Suaheli :?

mkinzler 29. Apr 2011 18:35

AW: Zeichnen auf Image mit zoom
 
Zitat:

Siehste, Markus hat es gleich kapiert. Manchmal habe ich das Gefühl, ich poste hier in Suaheli
Vielleicht würde er das ja verstehen :stupid:

DeddyH 29. Apr 2011 18:36

AW: Zeichnen auf Image mit zoom
 
Möglicherweise, er lässt sich ja selbst auf Anfrage nicht auf Einzelheiten zu seiner Person aus, obwohl das unter Umständen zumindest ein bisschen zum Verständnis beitragen könnte.

Bjoerk 29. Apr 2011 18:57

AW: Zeichnen auf Image mit zoom
 
Google "delphi grafik skalieren"

1. Suchergebnis: :)

http://www.swissdelphicenter.ch/de/showcode.php?id=1806

DeddyH 29. Apr 2011 19:00

AW: Zeichnen auf Image mit zoom
 
Oder man rechnet die prozentuale Größe vorher aus und nimmt dann z.B. mein StretchGraphic.

Deep-Sea 29. Apr 2011 19:01

AW: Zeichnen auf Image mit zoom
 
@Bjoerk:
Wie kannst du nur so etwas kompliziertes, wie mit Google suchen, verlangen :P


@DeddyH:
Das Wort Suaheli ist veraltet, damit du modern bleibst, musst du jetzt Swahili nutzen :wink:

DeddyH 29. Apr 2011 19:03

AW: Zeichnen auf Image mit zoom
 
Dann nehm ich halt Mandarin-Chinesisch, ändert aber am Kern nix :roll:

Bummi 29. Apr 2011 23:21

AW: Zeichnen auf Image mit zoom
 
Gäbe es eigentlich für die Forenbetreiber eine Möglichkeit automatisiert Threads direkt bei der Erstellung in einen anderen Bereich zu verschieben?

thomas2009 30. Apr 2011 00:02

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von DeddyH (Beitrag 1097711)
Oder man rechnet die prozentuale Größe vorher aus und nimmt dann z.B. mein StretchGraphic.

Schon getestet. es ist OK
Der Code aber kann nur vergrössern, da du Integer verwendest für desWidth, desHeight
Ich versuche nun deinen Code zu ändern, so dass ich auch den Grafik verkleinern kann
Delphi-Quellcode:
StretchGraphic(Image2.Picture.Graphic,Image1.Picture.Graphic, w*zoom, h*zoom);

himitsu 30. Apr 2011 00:08

AW: Zeichnen auf Image mit zoom
 
Falsch, sein Code kann auch verkleinern.
Der Typ hat hier rein garnichts mit dem Vergrößerungs-/Verkleinerungsfaktor zu tun, da dort nicht der Faktor angegeben wird, aber egal...

Wenn man den wichtigen Teil aus seinem Code rausnimmt, die Berechnung des Faktors übergeht und seinen Faktor direkt verwendet, dann ist es schon richtig so.

thomas2009 30. Apr 2011 00:50

AW: Zeichnen auf Image mit zoom
 
Ich muss die neue Breite und die neue Höhe vorher je nach dem angegeben Faktor berechnen

Ich habe folgendes gemacht :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
NewWidth, NewHeight : Integer;
begin
zoom:=StrToFloat(Edit1.Text);
NewWidth:=Round(zoom*Image2.Picture.Width);
NewHeight:=Round(zoom*Image2.Picture.Height);
//StretchGraphic(Image2.Picture.Bitmap,Image1.Picture.Graphic, 300, 300);
StretchGraphic(Image2.Picture.Graphic,Image1.Picture.Graphic, NewWidth, NewHeight);
end;
Also mit dem skalieren ist nun kein Problem
Nun möchte ich auf dem skalierten Image zeichnen
d.h. ich muss auch beim zeichnen alles * zoom multiplizieren
zum Beispiel : Image2.canvas.pen.Width:=1*zoom
Beim Vergrössern ist kein Problem aber was wäre beim Verkleinern ? Wenn ich das Image 2 mal verkleinern wie breit soll Image.canvas.pen.Width sein ?

himitsu 30. Apr 2011 00:53

AW: Zeichnen auf Image mit zoom
 
Zitat:

Wenn ich das Image 2 mal verkleinern wie breit soll Image.canvas.pen.Width sein ?
Halbsobreit?


Wie wäre es, wenn du vor einfach dem verkleiner alles darauf zeichnest?

Originalbild > neues Bild mit Draufgezeichnetem > gezoomtes Bild

thomas2009 30. Apr 2011 01:02

AW: Zeichnen auf Image mit zoom
 
Noch ein mal
beim zoom 100% (kein Zoom) ist beim Zeichnen die canvas.pen.width :=1; also 1 Pixel

Nun möchte ich das Bild 50% verkleinern (Faktor=0,5)
bei diesem zoom möchte auf das Image zeichnen
wie kann ich eine pen.Width von 0,5 pixel eingeben !:-D

Beim Vergrössern ist ja kein Problem

wicht 30. Apr 2011 01:07

AW: Zeichnen auf Image mit zoom
 
Was meinst du denn, wie ein halber Pixel so aussieht?

Aber das ist am Ende Kinderkram. Ich manipuliere halbe Bits, das ist Hard-Mode für echte Profis!

thomas2009 30. Apr 2011 01:25

AW: Zeichnen auf Image mit zoom
 
Liste der Anhänge anzeigen (Anzahl: 1)
Darum ist das Zoomen bei MS Paint beschränkt
nur vergrössern erlaubt

wicht 30. Apr 2011 01:32

AW: Zeichnen auf Image mit zoom
 
Zoomen ist beschränkt, aber Vergrößern erlaubt? Schließt sich das nicht irgendwie aus? Naja, ich habe leider schon ein paar Bier getrunken. Vielleicht kann ich diese komplizierten Zusammenhänge nicht mehr fassen :-D

thomas2009 30. Apr 2011 01:42

AW: Zeichnen auf Image mit zoom
 
zoom besteht aus zoom out und zoom in auf Deutsch (verk./verg.)
Zoom out ist bei mspaint nicht möglich. was ist nun nicht klar

wicht 30. Apr 2011 02:04

AW: Zeichnen auf Image mit zoom
 
Wenn du zuweit heraus zoomst, muss der Pixel unsichtbar werden. Wenn er immer angezeigt werden soll musst du eben etwas rechnen und ihn auf dem verkleinerten Bild malen. Er passt dann zwar nicht ganz zu den Abmessungen des Bildes, aber malen kann man ihn trotzdem.
Sorry, habe gerade leider gerade keine Zeit, dir hier ein Programm im Anhang zu Posten, was dein Problem löst.

Verdammt. Ich lasse mich hier schon wieder drauf ein. Ich bin erstmal wieder raus.

s.h.a.r.k 30. Apr 2011 02:41

AW: Zeichnen auf Image mit zoom
 
Sorry, aber hier sollte echt erst mal überlegt werden, was denn überhaupt gewollt wird. Vor allem, was Zoom In bzw. Zoom Out in gewissen Situationen bedeutet, ebenso was dann eben der Zustand des Bildes vorher und nachher ist.

Zitat:

wie kann ich eine pen.Width von 0,5 pixel eingeben !
Geht nicht! Punkt.

Zitat:

Beim Vergrössern ist ja kein Problem
Die Aussage zeigt schon mal wieder, dass du nicht wirklich darüber nachgedacht hast. Was passiert denn, wenn jemand einen Ansicht von 125% haben will? Wie rechnest du das dann?

Es gibt nur ganze Pixel, außer du benutzt Subpixelrendering, wobei ich dir nicht zumute, dass du das umsetzen kannst.

Lass das ganze doch einfach TImage für dich umrechnen und geb dich mit dem Ergebnis zufrieden. Wie mkinzler schon erwähnt hat: du hälst ein Original-Image im Speicher und ein anderes zeigst du entsprechend geändert an. Das im Speicher hat immer die "Zoom-Stufe 1" und du kannst dort dann auch mit einer Pen-Width von 1 zeichnen. Danach machst du ein Assign und fertig ist die Welt. Aber frag jetzt um Gottes will nicht nach Code...

DeddyH 30. Apr 2011 07:05

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von thomas2009 (Beitrag 1097756)
Der Code aber kann nur vergrössern, da du Integer verwendest für desWidth, desHeight

Nur mal so nebenbei: ich hatte den Code ursprünglich geschrieben, weil ich Grafiken verkleinern wollte :stupid:

thomas2009 30. Apr 2011 15:01

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1097783)
Was passiert denn, wenn jemand einen Ansicht von 125% haben will? Wie rechnest du das dann?

Wer erlaubt dem Anwender einen beliebigen Skalierfaktor zu verwenden ?
die Antwort: Ich nur :-D
Bei MS Paint wie ich geschildert habe macht genauso
Ich gebe die Möglichkeit bei Zoom nur : 2x, 4x, 6x, 8x, 10x

Beim Verkleinern habe ich auch den Trick gefunden um das Image zu verkleinern. Den Code habe ich schon hingelegt.
Was aber nicht gelöst ist das Zeichnen auf das Image mit einem Skalierfaktor kleiner als 1

Zitat:

Zitat von DeddyH (Beitrag 1097792)
Nur mal so nebenbei: ich hatte den Code ursprünglich geschrieben, weil ich Grafiken verkleinern wollte :stupid:

Wir sind aber eine Schritt weiter @deddyH.
Und zwar das Zeichnen auf das Image mit einem kleinen Skalierfaktor. Ich meine wie wird cancas,pen.width dargestellt ?
Meine Idee, was ich gerade tue:
Aber Faktor <1 bleibt canvas.pen.width:=1
Und aber Zoom (Faktor) > 1 then
Delphi-Quellcode:
canvas.pen.width:=canvas.pen.width*zoom

rollstuhlfahrer 30. Apr 2011 15:36

AW: Zeichnen auf Image mit zoom
 
Mal ne Frage: Wie meinst du, macht Paint das mit dem Malen, während du das Bild vergrößert hast? - In irgendeinem Tutorial dafür steht:
Zitat:

Male nicht auf das vergrößerte Bild, sondern rechne die Koordinaten um und male auf das Ursprungsbild.
So hast du auch nicht das Problem, welches auftritt, wenn du dein Bild auf 50% der Fläche reduzierst und dann wieder vergrößerst.

Kleiner Hinweis: Wenn du ein skaliertes Bild zurück in die Ausgangsgröße skalierst, dann ist es nicht mehr das selbe Bild!

Bernhard

s.h.a.r.k 30. Apr 2011 15:47

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von thomas2009 (Beitrag 1097894)
Was aber nicht gelöst ist das Zeichnen auf das Image mit einem Skalierfaktor kleiner als 1

Jetzt erzähl mir doch mal, was daran eigentlich so schwer ist seinen eigenen Kopf mal einzuschalten? Zumal schon mindestens eine Lösung gepostet wurde, nur du bist scheinbar nicht in der Lage diese zu erkennen und umzusetzen. Tu hier doch jedem den Gefallen und lass es einfach :roll:

EWeiss 30. Apr 2011 15:59

AW: Zeichnen auf Image mit zoom
 
Es nervt langsam..

Ich meine nicht Thomas sondern alle die welche sich in diversen Threads über ihn ausgelassen haben
und trotzdem noch auf seine Fragen Antworten um sich anschließend wiedermal über ihn auslassen
und das Thema ins Nirvana (OT) schicken.

IGNORIERT seine Threads doch einfach.

gruss

Namenloser 30. Apr 2011 16:00

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von EWeiss (Beitrag 1097904)
Ich meine nicht Thomas sondern alle die welche sich in diversen Threads über ihn ausgelassen haben
und trotzdem noch auf seine Fragen Antworten um sich anschließend wiedermal über ihn auslassen
und das Thema ins Nirvana (OT) schicken.

IGNORIERT seine Threads doch einfach.

gruss

:thumb:

Aphton 30. Apr 2011 16:02

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von EWeiss (Beitrag 1097904)
IGNORIERT seine Threads doch einfach.

Mild ausgedrückt. Ich wär da viel radikaler...

s.h.a.r.k 30. Apr 2011 16:02

AW: Zeichnen auf Image mit zoom
 
Vielleicht hilft das ganz ja mal und es beginnt eine Zeit der Einsicht :stupid:

thomas2009 30. Apr 2011 16:06

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1097902)
Kleiner Hinweis: Wenn du ein skaliertes Bild zurück in die Ausgangsgröße skalierst, dann ist es nicht mehr das selbe Bild!
Bernhard

Stimmt.
Beim Zoomen erstelle skaliere ich das Image (natürlich vorher Kopie als Sicherung erstellen) und drauf zeichnen

In der Tat, es wird nicht nur auf Image1 (das skalierte Bild) sondern auch auf das originale gezeichnet, was ich vordem skalieren entweder in Speicher was @DeddyH vorgeschlagen hat oder (und das mache ich ) in einer externe Form als Kopie

d.h. alles was ich beim zoomen auf das skalierte Bild zeichne, wird gleichzeitig am gleichen Zeit auf das originale gezeichnet

s.h.a.r.k 30. Apr 2011 16:09

AW: Zeichnen auf Image mit zoom
 
Dann hast du ganz einfach keine Kopie! Schau dir dies bzgl mal die Methoden Assign() an.

Namenloser 30. Apr 2011 17:22

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1097907)
Vielleicht hilft das ganz ja mal und es beginnt eine Zeit der Einsicht :stupid:

Träum weiter :roll:

DelphiSecurity 30. Apr 2011 19:15

AW: Zeichnen auf Image mit zoom
 
Zitat:

Zitat von EWeiss (Beitrag 1097904)
Es nervt langsam..

Ich meine nicht Thomas sondern alle die welche sich in diversen Threads über ihn ausgelassen haben
und trotzdem noch auf seine Fragen Antworten um sich anschließend wiedermal über ihn auslassen
und das Thema ins Nirvana (OT) schicken.

IGNORIERT seine Threads doch einfach.

gruss

:thumb:

DAS HIER IST EIN FORUM KEINE SEITE FÜR SCHLECHTE LAUNE DIE MAN AN ANDEREN AUSLÄSST!

Aphton 30. Apr 2011 19:20

AW: Zeichnen auf Image mit zoom
 
aber auch keine Seite, um Leute zu nerven!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.
Seite 1 von 2  1 2      

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