AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild an der x-aschse spiegeln

Ein Thema von andiak · begonnen am 28. Feb 2008 · letzter Beitrag vom 16. Mär 2008
Antwort Antwort
Seite 3 von 5     123 45      
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#21

Re: Bild an der x-aschse spiegeln

  Alt 14. Mär 2008, 17:50
Zitat von andiak:
3. In einer anderen Unit steht
Delphi-Quellcode:
procedure TForm1.BSpiegelnClick(Sender: TObject);
begin
  Spiegele(Image1)
end;
Zitat von Muetze1:
Aufruf mit z.B. Spiegeln(Image1.Picture.Bitmap);
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
andiak

Registriert seit: 1. Nov 2007
89 Beiträge
 
#22

Re: Bild an der x-aschse spiegeln

  Alt 14. Mär 2008, 18:25
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'
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: Bild an der x-aschse spiegeln

  Alt 14. Mär 2008, 20:26
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
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#24

Re: Bild an der x-aschse spiegeln

  Alt 14. Mär 2008, 21:35
Zitat von Fussball-Robby:
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.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#25

Re: Bild an der x-aschse spiegeln

  Alt 14. Mär 2008, 21:36
Zitat von andiak:
2. von dir verstehe ich garnicht
Ok, wer sieht den Unterschied?

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

Registriert seit: 1. Nov 2007
89 Beiträge
 
#26

Re: Bild an der x-aschse spiegeln

  Alt 14. Mär 2008, 22:04
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??
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#27

Re: Bild an der x-aschse spiegeln

  Alt 15. Mär 2008, 01:35
Zitat von andiak:
achso muss aber TImage sein... ist vorgegeben
Das solltest du auch abgeändert bekommen.

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

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 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.
  Mit Zitat antworten Zitat
andiak

Registriert seit: 1. Nov 2007
89 Beiträge
 
#28

Re: Bild an der x-aschse spiegeln

  Alt 15. Mär 2008, 10:08
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..
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#29

Re: Bild an der x-aschse spiegeln

  Alt 15. Mär 2008, 14:31
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 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 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.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#30

Re: Bild an der x-aschse spiegeln

  Alt 16. Mär 2008, 01:49
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;
Angehängte Dateien
Dateityp: zip stretchblt_mirroring_200.zip (51,7 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 Uhr.
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