Autor Beitrag
maxrus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mi 09.11.11 18:12 
Hallo, ich habe folgende Aufgabe,


Ein Formular enthalte 2 Imagefelder von dem das erste folgendermaßen initialisiert wird:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
      image1.Canvas.Pixels[0,0]:=$FF;
      image1.Canvas.Pixels[0,2]:=$FF00;
      image1.Canvas.Pixels[2,0]:=$FFFF;
      image1.Canvas.Pixels[2,2]:=$FF0000;
      image1.Canvas.Pixels[3,0]:=255;

Aufgabe des Programms ist, auf Knopfdruck diese Pixel im zweiten Imagefeld in Vergrößerter Darstellung abzubilden. Die lineare Vergrößerung ist in Pixeln in einem Spineditfeld einzugeben. Auf Knopfdruck wird die Vergrößerung mittels einzelner Pixel dargestellt. Alle Koordinaten der Zielrechtecke sind per Programm zu berechnen.

Kann mir jemand paar Tipps geben, wie ich vorgehen soll.... ich weiß nicht wie ich diese Pixels auslesen soll, und dann spineditfeld mit imagefeld verknüpfen wüßte ich auch nicht.

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus Multimedia / Grafik verschoben am Mi 09.11.2011 um 18:27
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Mi 09.11.11 18:28 
Die brutal einfachste "Quick-and-Dirty"-Methode wäre es, die Stretch-Funktion von TImage zu nutzen.
Setze die Größe des ersten Images auf das mindeste was du brauchst (z.B. 10x10 Pixel).
Setze dann die Größe des zweiten Images auf die Größe des ersten * Skalierungsfaktor.

ausblenden Delphi-Quelltext
1:
2:
3:
skalierung := SpinEdit1.Value;
Image2.Height := Image1.Height * skalierung;
Image2.Width := Image1.Width * skalierung;


Setze dann die Property "Streched" des zweiten Images auf true.

Übergebe dann dem zweiten Image die Bitmap des ersten:
ausblenden Delphi-Quelltext
1:
Image2.Picture.Bitmap := Image1.Picture.Bitmap;					


Zur einfachen Darstellung sollte das genügen. Wenn du das aber "sauber" und "richtig" machen willst, musst du wohl ein Bisschen mehr Aufwand betreiben ;-)

Denkbar wäre (wenn du ohnehin schon das Quellbild pixelweise aufbaust) das Zielbild auch pixelbasiert mit einem Skalierungsfaktor zu bauen. In etwa so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var x,y,zielx,ziely,faktor : integer;
begin
 faktor := 20;
 for x:=0 to 4 do
   for y:=0 to 4 do
     for zielx:=0 to faktor do
       for ziely:=0 to faktor do
         begin
           Image2.Canvas.Pixels[faktor*x +zielx ,faktor*y +ziely] := Image1.Canvas.Pixels[x,y];

           Sleep(0);  // Zur Anschaulichkeit...
           Application.ProcessMessages;
         end;
end;

_________________
Delphi: XE - OS: Windows 7 Professional x64

Für diesen Beitrag haben gedankt: maxrus
maxrus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mi 09.11.11 18:46 
das was du mit "sauber" und "richtig" bezeichnest, ist genau das was ich brauche!!! Danke

Moderiert von user profile iconMartok: Komplettzitat des vorigen Beitrags entfernt.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 09.11.11 20:00 
Zitat:

Alle Koordinaten der Zielrechtecke sind per Programm zu berechnen


unter diese Vorgaben ist die Lösung von Horschdware sauber und richtig

Es macht keinen Sinn die Canvasauflösung zu ändern, StretchBlt oder GDI+ Routinen zu verwenden ...

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 09.11.11 23:11 
Moin!

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Alle Koordinaten der Zielrechtecke sind per Programm zu berechnen

unter diese Vorgaben ist die Lösung von Horschdware sauber und richtig
Fehlt da nicht ein "nicht"? :gruebel:

Da die Aufgabe und der Lösungsweg recht präzise beschrieben ist, würde ich sagen, dass mit Rechtecken, statt mit Pixeln gezeichnet werden soll! :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 09.11.11 23:27 
@Narses, jepp, sorry

Du kennst das doch, wenn man Sätze liest in denen Dreher sind, man merkt es u.U. gar nicht

Ich hatte gelesen ...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var x,y,zielx,ziely,faktor : integer;
begin
 for x := 0 to 4 do
 for y := 0 to 4 do
 Image1.Canvas.Pixels[x,y] := Random(255)*256*256 + Random(255)*256 + Random(255);
 faktor := 20;
 for x:=0 to 4 do
   for y:=0 to 4 do
     begin
     Image2.Canvas.brush.Color := Image1.Canvas.Pixels[x,y];
     Image2.Canvas.Fillrect(Rect(faktor*x,faktor*y,faktor*(x + 1),faktor*(y+1)));
     end;
end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
maxrus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 11.11.11 14:34 
user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
Denkbar wäre (wenn du ohnehin schon das Quellbild pixelweise aufbaust) das Zielbild auch pixelbasiert mit einem Skalierungsfaktor zu bauen. In etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
var x,y,zielx,ziely,faktor : integer;
begin
 faktor := 20;

Was mich interessieren würde, wie kann ich diesen faktor := 20; aus dem spineditfeld auslesen, ich habe mir einfach gedacht faktor:=strtoint(spinedit1.text), dann könnte ich selber mein vergrößerungsfaktor einstellen, aber irgendwie geht das nicht....

Hat jemand Idee warum das nicht geht?"!?!

Moderiert von user profile iconNarses: Zitat gekürzt.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 11.11.11 14:46 
Moin!

user profile iconmaxrus hat folgendes geschrieben Zum zitierten Posting springen:
Hat jemand Idee warum das nicht geht?"!?!
Den Wert des SpinEdit findest du in der Eigenschaft .Value. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
maxrus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 11.11.11 15:09 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Den Wert des SpinEdit findest du in der Eigenschaft .Value. :idea:
hat spinedit keine string eigenschaft? oder was meinst du?

Moderiert von user profile iconMartok: Beiträge zusammengefasst & Quotes repariert

ich habe jetzt geschrieben faktor:=strtoint(SpinEdit1.value); geht trotzdem nicht, im internet kann ich auch nicht so viel dazu finden.... :(
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Fr 11.11.11 15:48 
Schau dir mal den Typ von Valuean.

_________________
Delphi: XE - OS: Windows 7 Professional x64
maxrus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 11.11.11 16:21 
user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
Schau dir mal den Typ von Valuean.

irgendwie suche ich wahrscheinlich falsch, im internet gibts zwar paar beispiele, aber die sind zu umfassend nicht für mein fall gedacht, und bei einigen steht strtoint(Spinedit.value), bei anderen strtoint(SpinEdit1.text)->>>>> wo ist der unterschied, das eine ist integer und das andere string....?????? kann mir jemand schreiben wie ich das umwandeln kann?????