Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bild an der x-aschse spiegeln (https://www.delphipraxis.net/109359-bild-der-x-aschse-spiegeln.html)

andiak 28. Feb 2008 18:16


Bild an der x-aschse spiegeln
 
Ich hoffe das die frage so inordnung ist
Ich würde nämlich gerne wissen mit welchem befehl/methode
Ich ein TImage einfach Spiegeln kann


[edit=Matze]Programmiersprache von "Delphi .NET" auf "Delphi Win32" geändert. MfG, Matze[/edit]
[edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit]

STS301 28. Feb 2008 18:22

Re: Bild and er x-aschse spiegeln
 
versuche es einmal hiermit ob es auch unter .Net funktioniert ;)

andiak 28. Feb 2008 18:25

Re: Bild and er x-aschse spiegeln
 
danke :/ ich weiß garnicht was ich habe :/ also verwenden tue ich das programm Delphi 7

und eine Paintbox haben wir nicht nut Image1 : TImage wo das bild aufer form ist und wenn ich jetzt auf nen button klicke soll die x-achse umkehren wie ist das möglich?

rawsoul 28. Feb 2008 18:34

Re: Bild and er x-aschse spiegeln
 
Ich habe mir den Source nicht angeschaut, aber eine TImage Komponente hat auch einen Canvas.

STS301 28. Feb 2008 18:34

Re: Bild and er x-aschse spiegeln
 
dann ist es WIN32 was du machst ;)

schau dir doch einmal den Quelltext an den himitsu hineingestellt hat an, da wirst du bestimmt fündig

andiak 28. Feb 2008 19:07

Re: Bild and er x-aschse spiegeln
 
Diese Procedure ist fürs Spiegeln Horizontal verantwortlich sehe ich das richtig?
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      StretchBlt(BitMapPaintBox5.Canvas.Handle, 0, 0, BitMapPaintBox5.Width,
        BitMapPaintBox5.Height, BitMapPaintBox5.Canvas.Handle,
        BitMapPaintBox5.Width - 1, 0, -BitMapPaintBox5.Width,
        BitMapPaintBox5.Height, SRCCopy);
      PaintBox5Paint(Sender);
    End;

STS301 29. Feb 2008 07:18

Re: Bild and er x-aschse spiegeln
 
denke schon "try and error"

andiak 13. Mär 2008 16:17

Re: Bild an der x-aschse spiegeln
 
also irgendwie bin ich nicht weiter gekommen :/ da ich ja keine Paintbox habe sondern ein TImage ich hab ein bissl gewartet und hin und wieder was ausprobiert... ich habe es geschaft ein kleines stücken bild x,y von 0-50 die farbpigmente zu speichern und versetzt wieder zu schreiben
theoretisch müsste das doch auch gehen das ich alle abspeicherer und GENAU umgekehrt wieder auf die selbe stelle platziere...
also wenn das bild die mase
x 0-250pixel
y 0-250pixel

dass dann die farbpigmente von 249 bei 1 und von 248 bei 2... usw.

hat jemand eine idee wie ich das schaffe? bzw. ist der ansatz richtig?

Muetze1 14. Mär 2008 00:50

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von andiak
also irgendwie bin ich nicht weiter gekommen :/

Erstmal: ja, das ist die Funktion die dafür zuständig ist. Siehe auch StretchBlt() Dokumentation. Mit einer negativen Weiten- bzw. Höhenangabe wird entsprechend gespiegelt.

Zitat:

Zitat von andiak
da ich ja keine Paintbox habe sondern ein TImage

Ja und? Mal abgesehen davon, dass auf einem TImage nicht gemalt wird sondern es nur zum statischen anzeigen genutzt wird, hat es trotzdem alles was auch die PaintBox für die Funktion mitbringt.

TPaintBox.Canvas -> TImage.Picture.Bitmap.Canvas
TPaintBox.Width -> TImage.Picture.Width
TPaintBox.Height -> TImage.Picture.Height

Also, nochmal rumprobieren und fertig stellen...

andiak 14. Mär 2008 08:08

Re: Bild an der x-aschse spiegeln
 
Am Anfang hatte ich den Fehler das StretchBlt undefiniert ist dann habe ich mal alle Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
eingefügt... würde gerne wissen welche der oberen uses gebraucht wird um StretchBlt ausführen zu können

in der procedure steht jetzt
Delphi-Quellcode:
procedure Spiegele(Bild: TImage);

Begin
      StretchBlt(TImage.Bild.Bitmap.Canvas.Handle, 0, 0, TImage.Bild.Width,
         TImage.Bild.Height, TImage.Bild.Bitmap.Canvas.Handle,
         TImage.Bild.Width - 1, 0, - TImage.Bild.Width,
         TImage.Bild.Height, SRCCopy);
       TImage.Bild(Sender);
      end;
aber jetzt sagt er mir das "Bild" undefiniert ist aber normalerweise dürfte der doch vorhanden sein Bild ist TImage
Hier mal mein kompletter Quellcode. :/ wo liegt hier der fehler? Ich habe ausprobiert bei TImage.Bild immer das TImage zu enterfernen da Bild ja schon TImage ist :/ ist das richtig das zu entfernnen oder muss das da bleiben??

Delphi-Quellcode:
interface
uses ExtCtrls;

procedure Spiegele(Bild: TImage);

implementation
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls ;


procedure Spiegele(Bild: TImage);

Begin
      StretchBlt(Bild.Bitmap.Canvas.Handle, 0, 0, TImage.Bild.Width,
         TImage.Bild.Height, TImage.Bild.Bitmap.Canvas.Handle,
         TImage.Bild.Width - 1, 0, - TImage.Bild.Width,
         TImage.Bild.Height, SRCCopy);
       TImage.Bild(Sender);
      end;

end.

Muetze1 14. Mär 2008 11:23

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von andiak
Am Anfang hatte ich den Fehler das StretchBlt undefiniert ist dann habe ich mal alle Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
eingefügt... würde gerne wissen welche der oberen uses gebraucht wird um StretchBlt ausführen zu können

Vorschlag: Lösch eine Unit nach der anderen wieder aus der Uses Liste, bis StretchBlt() wieder undefiniert ist. Diese Unit dann lassen, alle anderen weg.

Zitat:

Zitat von andiak
in der procedure steht jetzt
Delphi-Quellcode:
procedure Spiegele(Bild: TImage);

Begin
      StretchBlt(TImage.Bild.Bitmap.Canvas.Handle, 0, 0, TImage.Bild.Width,
         TImage.Bild.Height, TImage.Bild.Bitmap.Canvas.Handle,
         TImage.Bild.Width - 1, 0, - TImage.Bild.Width,
         TImage.Bild.Height, SRCCopy);
       TImage.Bild(Sender);
      end;
aber jetzt sagt er mir das "Bild" undefiniert ist aber normalerweise dürfte der doch vorhanden sein Bild ist TImage
Hier mal mein kompletter Quellcode. :/ wo liegt hier der fehler? Ich habe ausprobiert bei TImage.Bild immer das TImage zu enterfernen da Bild ja schon TImage ist :/ ist das richtig das zu entfernnen oder muss das da bleiben??

Meine Angaben waren anders gemeint. Ich weiss ja das du mit einem TImage arbeitest, weiss aber nicht wie du dieses nennst. Du kannst es ja von "Image1" bis "Klumbfuss" alle möglichen Namen geben. Von daher kann ich dir schlecht fertigen Code schreiben und dadurch habe ich einfach das verwendet, was "Image1" und "Klumbfuss" gemeinsam hätten: den Klassennamen. Somit TImage. Ich hoffe mal, damit sollte der Fehler klar sein.

andiak 14. Mär 2008 13:46

Re: Bild an der x-aschse spiegeln
 
Ahh alles klar danke jetzt hab ichs verstanden bin in dem bereich noch ein ziemlicher noob aber rigednwie logisch da du den genauen bezeichner nicht kennst nennst du mir einfach en oberbegriff... :)

jetzt bekomm ich aber den fehler das bitmap ein undefinierter bezeichner ist aber warum?

"Die Eigenschaft Bitmap gibt an, dass der Inhalt des TPicture-Objekts eine Bitmap-Grafik (Dateiformat .BMP) ist." und das bild welches ich bearbeiten möchte ist bmp

und wenn ich .bitmap immer rausnehme bekomm ich dne fehler das hier
Delphi-Quellcode:
Bild(Sender);
ein semikolon oder operator fehlt

Fussball-Robby 14. Mär 2008 14:41

Re: Bild an der x-aschse spiegeln
 
Ich habe mir den Code jetzt nicht genau angeguckt, habe aber einen anderen Vorschlag, den auch du bestimmt verstehst. Hab mal ne kleine Prozedur geschrieben:
Delphi-Quellcode:
procedure Spiegeln(Bild:TImage; var NeuesBild:TImage);
var   i,j:integer;
begin
  for i:=0 to Bild.width do
   for j:=0 to Bild.height do
    NeuesBild.canvas.pixels[i,j]:=Bild.canvas.pixels[Bild.width-i,Bild.height-j];
end;

//////Beispielaufruf:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Spiegeln(Image1,Image2);//Image1 ist das Ausgangsbild, Image2 dann das gespiegelte
end;
Dabei muss das Bild ein Bitmap sein, sonst gints nen Fehler.

Mfg, Robert

andiak 14. Mär 2008 15:38

Re: Bild an der x-aschse spiegeln
 
Ich habs jetzt mal irgendwie ein wenig umgeschrieben... das jetzt keine fehler mehr kommen und ich das programm wenigstens starten kann so sieht der quellcode jetzt aus:

Delphi-Quellcode:
procedure Spiegele (Bild:TImage);
var   i,j:integer;
begin
  for i:=0 to Bild.width do
   for j:=0 to Bild.height do
    Bild.canvas.pixels[i,j]:=Bild.canvas.pixels[Bild.width-i,Bild.height-j];
end;
das problem ist er nimmt jetzt nur die rechte seite des bildes und spiegelt es :/

Fussball-Robby 14. Mär 2008 15:45

Re: Bild an der x-aschse spiegeln
 
Das ist mir auch aufgefallen, darum hatte ich es mit einer Ausgabe-Variable gemacht.
Das passiert, weil deine Prozedur das Bild zum berechnen nimmt, während es schon neu gezeichnet wird. Mein Code müsste aber problemlos funktionieren.

Mfg

andiak 14. Mär 2008 16:08

Re: Bild an der x-aschse spiegeln
 
nicht ganz hier
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
hier sagt er mit aus irgendeingrund ( habe Button1Click angepasst zu BSpiegelnClick)
ähm das er nach TForm1 ein ; aber kein . erwartet

Muetze1 14. Mär 2008 16:14

Re: Bild an der x-aschse spiegeln
 
@Fussball-Robby: Dann schreib aber auch dazu, dass er sich mit der Funktion auch erstmal bei leicht grösseren Bildern eine Tasse Kaffee aufsetzen kann. Es gibt wirklich keine langsamere Möglichkeit ein Bild zu spiegeln als über die Pixels[] Eigenschaft. Nutz doch sonst wenigstens die ScanLine[] Property von TBitmap, das würde das ganze nochmal deutlich verschnellern.

@andiak:

Delphi-Quellcode:
procedure Spiegeln(Bild: TBitmap);
Begin
  StretchBlt(Bild.Canvas.Handle,
               0,
               0,
               Bild.Width,
               Bild.Height,
             Bild.Canvas.Handle,
               Bild.Width - 1,
               0,
               -Bild.Width,
               Bild.Height,
             SRCCopy);
end;
Aufruf mit z.B.
Delphi-Quellcode:
Spiegeln(Image1.Picture.Bitmap);

andiak 14. Mär 2008 16:22

Re: Bild an der x-aschse spiegeln
 
Jetzt bekomm ich den fehler das Bei der vorherigen Deklaration von Spiegele wurde die Direktive "overlord" nicth angegeben was bedeutet den das schonwieder?? die delphi hilfe kann mir auch nicht helfen :/

Delphi-Quellcode:
unit UFabian;

interface
uses ExtCtrls;

procedure Spiegele(Bild: TImage);

implementation
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;


procedure Spiegele(Bild: TBitmap);
Begin
  StretchBlt(Bild.Canvas.Handle,
               0,
               0,
               Bild.Width,
               Bild.Height,
             Bild.Canvas.Handle,
               Bild.Width - 1,
               0,
               -Bild.Width,
               Bild.Height,
             SRCCopy);
end;



end.


Wo soll ich den
Spiegeln(Image1.Picture.Bitmap);

einfügen??

Muetze1 14. Mär 2008 16:34

Re: Bild an der x-aschse spiegeln
 
1. Du hast immernoch eine ellenlange Uses Liste. Siehe meinen Hinweis zuvor.
2. Du hast in der Implementation eine andere Argumentenliste als in der Deklaration der Funktion
3. Wann willst du das Bild denn spiegeln? z.B. auf einen Button Click?

andiak 14. Mär 2008 16:46

Re: Bild an der x-aschse spiegeln
 
ja weil das ein neuer code von dir ist habe ich alle wieder reingetan (ist dochn icht schlim) das keine fheler auftauchen
brauchen tue ich aber nur
uses
Windows, Graphics;

2. von dir verstehe ich garnicht

3. In einer anderen Unit steht
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
begin
  Spiegele(Image1)
end;

dominikkv 14. Mär 2008 16:50

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von andiak
3. In einer anderen Unit steht
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
begin
  Spiegele(Image1)
end;

Zitat:

Zitat von Muetze1
Aufruf mit z.B.
Delphi-Quellcode:
Spiegeln(Image1.Picture.Bitmap);


andiak 14. Mär 2008 17:25

Re: Bild an der x-aschse spiegeln
 
ich hab das spiegeln ja auch in Spiegele umgeändert....
immoment habe ich eh die fehler
[Fehler] UFabian.pas(14): Bei der vorherigen Deklaration von Spiegele wurde die Direktive 'overload' nicht angegeben
[Fehler] UFabian.pas(6): Ungenügende Forward- oder External-Deklaration: 'Spiegele'

Fussball-Robby 14. Mär 2008 19:26

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von Muetze1
@Fussball-Robby: Dann schreib aber auch dazu, dass er sich mit der Funktion auch erstmal bei leicht grösseren Bildern eine Tasse Kaffee aufsetzen kann. Es gibt wirklich keine langsamere Möglichkeit ein Bild zu spiegeln als über die Pixels[] Eigenschaft.

Ich wollte es ja nur so machen, dass er es auch versteht. Denn wenn er irgendeinen Code, von dem er nichts versteht, einfach nur kopiert, dann hilft das imho auch nicht viel weiter.

Mfg

Muetze1 14. Mär 2008 20:35

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von Fussball-Robby
Zitat:

Zitat von Muetze1
@Fussball-Robby: Dann schreib aber auch dazu, dass er sich mit der Funktion auch erstmal bei leicht grösseren Bildern eine Tasse Kaffee aufsetzen kann. Es gibt wirklich keine langsamere Möglichkeit ein Bild zu spiegeln als über die Pixels[] Eigenschaft.

Ich wollte es ja nur so machen, dass er es auch versteht. Denn wenn er irgendeinen Code, von dem er nichts versteht, einfach nur kopiert, dann hilft das imho auch nicht viel weiter.

Klar, sehe ich genauso, wenn es eine komplette Funktion ist. Hier geht es um einen einfachen WinAPI Aufruf - das geht nicht einfacher und da ist nichts zu erklären, da komplett dokumentiert. Von daher ist es nicht kompliziert, weil eine fremde Funktion aufrufen müsste man auch für die Zukunft können.

Muetze1 14. Mär 2008 20:36

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von andiak
2. von dir verstehe ich garnicht

Ok, wer sieht den Unterschied?

Zitat:

Zitat von andiak
Delphi-Quellcode:
procedure Spiegele(Bild: TImage);
...
procedure Spiegele(Bild: TBitmap);


andiak 14. Mär 2008 21:04

Re: Bild an der x-aschse spiegeln
 
achso muss aber TImage sein... ist vorgegeben
das programm läuft jetzt... aber es passiert rein garnichts :/


Delphi-Quellcode:
StretchBlt(Bild.Canvas.Handle,
               0,
               0,
               Bild.Width,
               Bild.Height,
             Bild.Canvas.Handle,
               Bild.Width - 1,
               0,
               -Bild.Width,
               Bild.Height,
             SRCCopy);
end;


Also Stretch gibt an das das bild geändert werden soll... ws bedeutet blt ?
und die 0, 0, das sie bei x0 und y0 anfangen soll die bearbeitung oder? und das es einmal Width und einmal height des bildes ist richtig?
und jetzt kommt mit Bild.Canvas.Handle, das das bild wie folgt bearbeitet werden soll aber warum Bild.Width -1 und 0,-Bild.Width, Bild.Height, kann mir das jemand erklären was das genau bewirken soll?

Wie ist es mit SRCCopy was wird kopiert??

Muetze1 15. Mär 2008 00:35

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von andiak
achso muss aber TImage sein... ist vorgegeben

Das solltest du auch abgeändert bekommen.

Zitat:

Zitat von andiak
Also Stretch gibt an das das bild geändert werden soll... ws bedeutet blt ?

Stretch und blt.

Zitat:

Zitat von andiak
und die 0, 0, das sie bei x0 und y0 anfangen soll die bearbeitung oder? und das es einmal Width und einmal height des bildes ist richtig?
und jetzt kommt mit Bild.Canvas.Handle, das das bild wie folgt bearbeitet werden soll aber warum Bild.Width -1 und 0,-Bild.Width, Bild.Height, kann mir das jemand erklären was das genau bewirken soll?

Schonmal den Link angeschaut, den ich schon ein paar Posts zuvor gegeben habe auf die MSDN Dokumentation. Anscheinend nicht - also mal anschauen und durchlesen.

Zitat:

Zitat von andiak
Wie ist es mit SRCCopy was wird kopiert??

Einfach bei dem zuvor genannten Link mal bei der Beschreibung des dwRop Parameters zum BitBlt Befehl folgen, dort gibt es alle Rasteroperationen.

andiak 15. Mär 2008 09:08

Re: Bild an der x-aschse spiegeln
 
ja ich hab mir den link schon öfter angeschaut... ist das die lösung des problems? nur schade das ich nicht ganz verstehe was da steht einmal englisch und zweitens andere programmier sprache :/

.........._____________

und jetzt fällt mir auf das der code auf der seite der selbe im delphi programm ist... wie ist das möglich? das ist doch ne ganz andere programmiersprache??

und was bedeutet?
int nXOriginSrc, // x-coord of source upper-left corner
int nYOriginSrc, // y-coord of source upper-left corner

x coordinate der quelle aus der oberen linken ecke... ebenso für die y was geben die an?

und wenn ich diesen code jetzt so eingegeben habe
Delphi-Quellcode:
procedure Spiegele(Bild: TImage);
Begin
  StretchBlt(Bild.Canvas.Handle,
               0,
               0,
               Bild.Width,
               Bild.Height,
             Bild.Canvas.Handle,
               Bild.Width - 1,
               0,
               -Bild.Width,
               Bild.Height,
             SRCCopy);
end;
passiert leider garnichts :/ aber ich habe jetzt den zusammenhang zwischen den link und dem code gesehen..

Muetze1 15. Mär 2008 13:31

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von andiak
und jetzt fällt mir auf das der code auf der seite der selbe im delphi programm ist... wie ist das möglich? das ist doch ne ganz andere programmiersprache??

Die Sprache ist doch egal, es geht um die Funktion die hier aufgerufen wird - und die ist in beiden Fällen die gleiche. In welcher Sprache sie aufgerufen wird, ist der genauso egal, weil sie schreibt nur vor, welche Parameter sie in welcher Reihenfolge haben will. Und genau das dokumentiert Microsoft auf der Seite. Die könnten alles kopieren und den Syntax anpassen für 'zig viele Programmiersprachen - aber wie du ja nun schon gemerkt hast, ist das unsinnig.

Zitat:

Zitat von andiak
und was bedeutet?
int nXOriginSrc, // x-coord of source upper-left corner
int nYOriginSrc, // y-coord of source upper-left corner

x coordinate der quelle aus der oberen linken ecke... ebenso für die y was geben die an?

Grundsätzlich sagt das aus, dass es beide jeweils ein Integer ist und den ersten haben sie nXOriginSrc genannt und den anderen nYOriginSrc. Vom Kommentar her hast du es richtig übersetzt. Die beziehen sich damit auf das Quellbild und wollen halt die x und y Koordinate vom Quellbild haben. Die Funktion heißt ja StretchBlt und kann somit auch Ausschnitte verzerren, somit benötigt es diese Angabe. Da wir sowas nicht wollen, wäre es ja 0 und 0 bei dir.

Zitat:

Zitat von andiak
und wenn ich diesen code jetzt so eingegeben habe
Delphi-Quellcode:
procedure Spiegele(Bild: TImage);
Begin
  StretchBlt(Bild.Canvas.Handle,
               0,
               0,
               Bild.Width,
               Bild.Height,
             Bild.Canvas.Handle,
               Bild.Width - 1,
               0,
               -Bild.Width,
               Bild.Height,
             SRCCopy);
end;
passiert leider garnichts :/

Da fehlt nun auch wieder etwas aus den Beiträgen zuvor. Du musst bei dem Image auf die Eigenschaft Picture.Bitmap zugreifen. Das gilt für das Canvas genauso wie für die Weite bzw. Höhe.

Muetze1 16. Mär 2008 00:49

Re: Bild an der x-aschse spiegeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Grundsätzlich: TImage mag es nicht wenn man das Bitmap direkt verändert - weil das TImage spuckt einem zumindest in die Suppe. Von daher im Anhang ein fertiges Beispielprog.

Delphi-Quellcode:
procedure MirrorV(AImage: TImage);
var
  lBmp: TBitmap;
begin
  lBmp := TBitmap.Create;
  try
    lBmp.Assign(AImage.Picture.Graphic);

    StretchBlt(lBmp.Canvas.Handle,
                 0,
                 0,
                 lBmp.Width,
                 lBmp.Height,
               lBmp.Canvas.Handle,
                 0,
                 lBmp.Height,
                 lBmp.Width,
                 -lBmp.Height,
               SRCCOPY);

    AImage.Picture.Assign(lBmp);;
  finally
    lBmp.Free;
  end;
end;

procedure MirrorH(AImage: TImage);
var
  lBmp: TBitmap;
begin
  lBmp := TBitmap.Create;
  try
    lBmp.Assign(AImage.Picture.Graphic);

    StretchBlt(lBmp.Canvas.Handle,
                 0,
                 0,
                 lBmp.Width,
                 lBmp.Height,
               lBmp.Canvas.Handle,
                 lBmp.Width,
                 0,
                -lBmp.Width,
                 lBmp.Height,
               SRCCOPY);
               
    AImage.Picture.Assign(lBmp);;
  finally
    lBmp.Free;
  end;
end;

andiak 16. Mär 2008 09:47

Re: Bild an der x-aschse spiegeln
 
Danke... vielen dank... ich habs soweit angepasst... und ich bekomm MAL WIEDER SCHEIS FEHLER ERST WO DIE DATEI ABGERUFEN WIRD AB
ich weiß nicht genau wie ich das abändern muss weil in der anderen Unit steht :
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
begin
  Spiegele(Image1)
end;
und wenn man auf dem button klickt soll sich das bild schonmal um die vertikale achse wenden





Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
begin
   Spiegele(Image1)
end;

procedure TForm1.btnHorizontalClick(Sender: TObject);
begin
  MirrorH(imgPicture);
end;

Muetze1 16. Mär 2008 12:09

Re: Bild an der x-aschse spiegeln
 
Ich versteh dein Problem nun nicht so recht. Benenn die MirrorH doch einfach um zu Spiegele und werf die alte Spiegele() weg. Ich versteh irgendwie dein Problem nun nicht. Könntest du es vllt. nochmal umformulieren? Gerade auch dein hier gebrüllter Teil ist völlig unverständlich für mich...

andiak 16. Mär 2008 12:23

Re: Bild an der x-aschse spiegeln
 
Ich kann die alte
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
begin
  Spiegele(Image1)
end;
nicht rauswerfen
da die vorgegeben ist


momentan bekomm ich in dieser zeile
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
[Fehler] UFabian.pas(65): ';' erwartet, aber '.' gefunden




das halt der letzte teil
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
begin
   Spiegele(Bild)
end;

procedure TForm1.btnHorizontalClick(Sender: TObject);
begin
  Spiegele(imgPicture);
end;

Fussball-Robby 16. Mär 2008 12:29

Re: Bild an der x-aschse spiegeln
 
Ehrlich gesagt verstehe ich auch nicht, was dein Problem ist. Was kannst du wo nicht rauswerfen?
Du musst doch einfach die beiden Prozeduren von Muetze1 bei dir reinkopieren, die alten Prozeduren löschen und im OnClick vom Button den Aufruf einfügen (Doppelklick auf den Button und dann einfügen). Wo kommst du da genau nicht weiter?

Mfg

Muetze1 16. Mär 2008 12:31

Re: Bild an der x-aschse spiegeln
 
Zitat:

Zitat von andiak
Ich kann die alte
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
begin
  Spiegele(Image1)
end;
nicht rauswerfen
da die vorgegeben ist

Du sollst auch nicht den Aufruf von Spiegele() rauswerfen, sondern die alte Implementation!

Zitat:

Zitat von andiak
momentan bekomm ich in dieser zeile
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
[Fehler] UFabian.pas(65): ';' erwartet, aber '.' gefunden

Und das hängt definitiv mit den Zeilen zuvor zusammen. Also entweder reparierst du den Fehler selbst oder du postest hier mal die ganze Unit. Meine Glaskugel ist zZ mal wieder zur Eichung...

andiak 16. Mär 2008 12:34

Re: Bild an der x-aschse spiegeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
tut mir leid... ich häng mal das ganz projekt an... die UFabian ist zu öffnen...

Fussball-Robby 16. Mär 2008 12:41

Re: Bild an der x-aschse spiegeln
 
Was mir als erstes auffällt: Du hast in der Unit UFabian die beiden Prozeduren unter gleichem Namen aufgeführt, das kann so schonmal nicht klappen. Und das OnClick vom Button kannst du nicht einfach in irgendeine Unit reinmachen, du musst auf der Form auf den Button doppelklicken, dann kommst du automatisch zum Button-OnClick, wo du den Aufruf der Prozedur dann reinmachen musst.
Mfg

andiak 16. Mär 2008 15:36

Re: Bild an der x-aschse spiegeln
 
Das problem das beide Horizontal und Vertikal auf einer "button" gelegt sind das kann ich nur lösen indem ich nen zweiten button erstelle oder?

Fussball-Robby 16. Mär 2008 15:46

Re: Bild an der x-aschse spiegeln
 
Ja, denn dann sind sie ja nicht mehr auf einem Button :wink:

Mfg

andiak 16. Mär 2008 16:09

Re: Bild an der x-aschse spiegeln
 
Auf der Form1 habe ich jetzt 2 Buttons einen BHorzontal und BVertikal und in der UBild folgendes hinzugefügt


Delphi-Quellcode:
type
...
 BHorizontal: TButton;
 BVertikal: TButton;
 procedure BHorizontalClick(Sender: TObject);
 procedure BVertikalClick(Sender: TObject);
...
und folgende zwei proceduren in der UBild
Delphi-Quellcode:
procedure TForm1.BHorizontalClick(Sender: TObject);
begin
  Spiegele(Image1)
end;
...
procedure TForm1.BVertikalClick(Sender: TObject);
begin
   Spiegele2(Image1)
end;

und hier ist meine gesammte UFabian
Delphi-Quellcode:
unit UFabian;

interface
uses ExtCtrls;

procedure Spiegele(Bild: TImage);
procedure Spiegele2(Bild: TImage);

implementation
 uses
  Windows, Graphics;


procedure Spiegele(Bild: TImage);
var
  lBmp: TBitmap;
begin
  lBmp := TBitmap.Create;
  try
    lBmp.Assign(Bild.Picture.Graphic);

    StretchBlt(lBmp.Canvas.Handle,
                 0,
                 0,
                 lBmp.Width,
                 lBmp.Height,
               lBmp.Canvas.Handle,
                 0,
                 lBmp.Height,
                 lBmp.Width,
                 -lBmp.Height,
               SRCCOPY);

    Bild.Picture.Assign(lBmp);;
  finally
    lBmp.Free;
  end;
end;

procedure Spiegele2(Bild: TImage);
var
  lBmp: TBitmap;
begin
  lBmp := TBitmap.Create;
  try
    lBmp.Assign(Bild.Picture.Graphic);

    StretchBlt(lBmp.Canvas.Handle,
                 0,
                 0,
                 lBmp.Width,
                 lBmp.Height,
               lBmp.Canvas.Handle,
                 lBmp.Width,
                 0,
                -lBmp.Width,
                 lBmp.Height,
               SRCCOPY);
               
    Bild.Picture.Assign(lBmp);;
  finally
    lBmp.Free;
  end;
end;

procedure TForm1.BHorizontalClick(Sender: TObject);
begin
   Spiegele(Image1)
end;

procedure TForm1.BVertikalClick(Sender: TObject);
begin
  Spiegele2(Image1);
end;



end.
Bekomm aber einige Fehler ich poste sie mal alle

[Fehler] UFabian.pas(66): ';' erwartet, aber '.' gefunden
[Fehler] UFabian.pas(68): Undefinierter Bezeichner: 'Image1'
[Fehler] UFabian.pas(71): Bezeichner redefiniert: 'TForm1'
[Fehler] UFabian.pas(73): Undefinierter Bezeichner: 'Image1'
[Fataler Fehler] UBild.pas(35): Verwendete Unit 'UFabian.pas' kann nicht compiliert werden


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.
Seite 1 von 2  1 2      

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