"Bild vergrößern", bzw. Pixel
spacer
Autor Nachricht
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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, 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 markieren
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 markieren
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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 980
Erhaltene Danke: 124

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
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Administrator
Beiträge: 8372
Erhaltene Danke: 244

W2k, WXPpro
TP3 - D7pro
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 980
Erhaltene Danke: 124

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 markieren
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
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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 markieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Administrator
Beiträge: 8372
Erhaltene Danke: 244

W2k, WXPpro
TP3 - D7pro
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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.... :(
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: Fr 11.11.11 15:48 
Schau dir mal den Typ von Valuean.

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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?????
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home