AGB  ·  Datenschutz  ·  Impressum  







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

Mausposition von gestretchten Bild

Ein Thema von EWeiss · begonnen am 9. Sep 2013 · letzter Beitrag vom 11. Sep 2013
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Mausposition von gestretchten Bild

  Alt 9. Sep 2013, 00:51
Komme irgendwie nicht an die mausposition bei einem gestretchten Bild heran.
Jemand nen Tip?

Delphi-Quellcode:
  case (Msg) of
    WM_LBUTTONDOWN:
      SendMessage(VisDataThread.ParentHandle, WM_LBUTTONDOWN, wParam, lParam);
sind ja im lParam vorhanden, die passen aber nicht mehr wenn das Bild gestretcht wurde.

Hab einen Auflösung von 1920x1200 und das Bild wird gestretcht mit 800x600

Delphi-Quellcode:
  if not VisDataThread.UseOpenGL then
  begin
    if (nw > VisDataThread.StretchWidth) or (nh > VisDataThread.StretchHeight) then
    begin
      StretchWidth := VisDataThread.StretchWidth;
      StretchHeight := VisDataThread.StretchHeight;
    end else
    begin
      StretchWidth := nw;
      StretchHeight := nh;
    end;

    FillChar(BmpInfo, SizeOf(BITMAPINFO), 0);
    BmpInfo.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER);
    BmpInfo.bmiHeader.biWidth := StretchWidth;
    BmpInfo.bmiHeader.biHeight := -StretchHeight;
    BmpInfo.bmiHeader.biPlanes := 1;
    BmpInfo.bmiHeader.biBitCount := 32;

gruss

Geändert von EWeiss ( 9. Sep 2013 um 00:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Mausposition von gestretchten Bild

  Alt 9. Sep 2013, 01:08
Mit dem Dreisatz.
Beispiel:
* das Bitmap hat eine Breite von 1600 Pixel
* Image ist 450 Pixel breit
Der Benutzer klickt ins Image auf die Position (300, 167).
Dann ist die Position im Bitmap
 := (300 * 1600) div 450; Analog geht die Berechnung für die y-Koordinate.
fork me on Github
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Mausposition von gestretchten Bild

  Alt 9. Sep 2013, 01:13
Mit dem Dreisatz.
Beispiel:
* das Bitmap hat eine Breite von 1600 Pixel
* Image ist 450 Pixel breit
Der Benutzer klickt ins Image auf die Position (300, 167).
Dann ist die Position im Bitmap
 := (300 * 1600) div 450; Analog geht die Berechnung für die y-Koordinate.
Und das geht dann auch mit einem Buffer?
Dem die weite StretchWidth zugewiesen wird?

Muss ich gleich mal testen.
Danke.

Hmm Image hab ich keins.

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Mausposition von gestretchten Bild

  Alt 9. Sep 2013, 01:32
Will nicht.

Delphi-Quellcode:
    WM_LBUTTONDOWN:
      begin
        if (VisInfo^.w > StretchWidth) and (VisDataThread.UseOpenGL = False) then
        begin
          GetCursorPos(CurPos);
          ScreenToClient(WndHandle, CurPos);
          X := (CurPos.X * VisInfo^.w) div StretchWidth;
          Y := (CurPos.Y * VisInfo^.h) div StretchHeight;
          SendMessage(VisDataThread.ParentHandle, WM_LBUTTONDOWN, wParam, MakeLong(x, y));
        end else
        SendMessage(VisDataThread.ParentHandle, WM_LBUTTONDOWN, wParam, lParam);

      end;
Kann den Aufgemalten Dialog nicht schließen.
OK!
Jetzt gehts musste das nur umtauschen..

 := (300 * 1600) div 450;

 := (300 * 450) div 1600;

Danke für die Hilfe.

Falls es mal jemand braucht so ist es richtig.
Delphi-Quellcode:
    WM_LBUTTONDOWN:
      begin
        // Bildschirmweite > Bildweite und kein OpenGL verwenden
        if (VisInfo^.w > StretchWidth) and (VisDataThread.UseOpenGL = False) then
        begin
          GetCursorPos(CurPos);
          ScreenToClient(WndHandle, CurPos);
          // Cursor Position x * Gestretchte Bildweite div BildSchirmweite
          X := (CurPos.X * StretchWidth) div VisInfo^.w ;
          // Cursor Position y * Gestretchte Bildhöhe div BildSchirmhöhe
          Y := (CurPos.Y * StretchHeight) div VisInfo^.h;
          // Message an die Anwendung senden
          SendMessage(VisDataThread.ParentHandle, WM_LBUTTONDOWN, wParam, MakeLong(x, y));
        end else
        SendMessage(VisDataThread.ParentHandle, WM_LBUTTONDOWN, wParam, lParam);
      end;
gruss

Geändert von EWeiss ( 9. Sep 2013 um 01:46 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Mausposition von gestretchten Bild

  Alt 9. Sep 2013, 07:21
Mit dem Dreisatz.
Beispiel:
* das Bitmap hat eine Breite von 1600 Pixel
* Image ist 450 Pixel breit
Der Benutzer klickt ins Image auf die Position (300, 167).
Dann ist die Position im Bitmap
 := (300 * 1600) div 450; Analog geht die Berechnung für die y-Koordinate.
Du meinst wohl (300 * 450) div 1600; .
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Mausposition von gestretchten Bild

  Alt 9. Sep 2013, 07:33
Mit dem Dreisatz.
Beispiel:
* das Bitmap hat eine Breite von 1600 Pixel
* Image ist 450 Pixel breit
Der Benutzer klickt ins Image auf die Position (300, 167).
Dann ist die Position im Bitmap
 := (300 * 1600) div 450; Analog geht die Berechnung für die y-Koordinate.
Du meinst wohl (300 * 450) div 1600; .
Habe ich ja über deinen Beitrag so geschrieben

Zitat:
Jetzt gehts musste das nur umtauschen..
gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Mausposition von gestretchten Bild

  Alt 10. Sep 2013, 08:23
@sx2008

Mal so nebenbei wie kamst du darauf das eine Dreisatzrechnung zu grunde lag?
So direkt war mir das nicht ersichtlich.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

AW: Mausposition von gestretchten Bild

  Alt 10. Sep 2013, 11:12
Was man da ausrechnet ist ja eigentlich nur ein Skalierungsfaktor.

Und wenn du einen Klick bei 1919 auf den Pixel 799 mappen willst, dann stellt sich folgendes "Problem":

1919 * x = 799

Diese Gleichung kann man relativ flott umstellen oder "durch anschauen lösen" zu x = 799/1919.

Ich benutze hier übrigens absichtlich die Werte 799, weil der rechte Pixel eben genau diesen X-Wert besitzt. Ein Bild, dass 800px breit ist, beginnt bei Pixel 0 und endet bei Pixel 799.
Manche Leute machen da jetzt einen Dreisatz draus und merken sich das Schritt für Schritt. Ich muss mir schon die komplizierten Sätze merken, dann bleibt für solche trivialen Dinger nicht mehr so viel Gehirn-Kapazität übrig.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Mausposition von gestretchten Bild

  Alt 10. Sep 2013, 11:59
Jo
Ein Dreisatz ist ja was vom 4 Schuljahr
Mir ging es darum woran er bemerkt hat das es ein Dreisatz war.
Da es sich mir nicht so einfach offenbart hat.

Kam einfach nicht auf die richtige lösung!.

gruss
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: Mausposition von gestretchten Bild

  Alt 10. Sep 2013, 20:42
Derartige Verhältnisse sind immer mit Dreisatz zu lösen: Wenn 10 Stück 15 Euro kosten, wieviel kosten dann 7 Stück? Lösung 15 / 10 * 7

Wenn X-Position bei einer Breite von 1000 auf 500 steht, um in der Mitte zu sein, wo muß sie dann bei einer Breite von 800 stehen, um wieder in der Mitte zu sein?

Oder Prozentrechnen, Zinsen usw.: Das alles ist immer Dreisatz-Rechnung. Da kommt man doch automatisch drauf, wenn man Dreisatzrechnung kennt. Ich brauch das regelmäßig beim Programmieren, das ist absolutes Mathe-Grundwissen, fast so grundlegend wie das kleine Einmaleins – aber wer kann heute noch Kopfrechnen ...
  Mit Zitat antworten Zitat
Alt 10. Sep 2013, 21:35     Erstellt von EWeiss
Dieser Beitrag wurde von TBx gelöscht. - Grund: Das gegenseitige Beharken tut hier nichts zur Sache
Alt 10. Sep 2013, 21:49     Erstellt von Perlsau
Dieser Beitrag wurde von TBx gelöscht. - Grund: Das gegenseitige Beharken tut hier nichts zur Sache
Alt 10. Sep 2013, 21:53     Erstellt von EWeiss
Dieser Beitrag wurde von TBx gelöscht. - Grund: Das gegenseitige Beharken tut hier nichts zur Sache
Alt 10. Sep 2013, 21:55     Erstellt von Perlsau
Dieser Beitrag wurde von TBx gelöscht. - Grund: Das gegenseitige Beharken tut hier nichts zur Sache
Alt 10. Sep 2013, 21:59     Erstellt von EWeiss
Dieser Beitrag wurde von TBx gelöscht. - Grund: Das gegenseitige Beharken tut hier nichts zur Sache
Alt 10. Sep 2013, 22:14     Erstellt von Perlsau
Dieser Beitrag wurde von TBx gelöscht. - Grund: Das gegenseitige Beharken tut hier nichts zur Sache
Alt 10. Sep 2013, 22:16     Erstellt von EWeiss
Dieser Beitrag wurde von TBx gelöscht. - Grund: Das gegenseitige Beharken tut hier nichts zur Sache
Antwort Antwort
Seite 1 von 2  1 2      


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 23: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