Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB.NET] Risoluzione del monitor

    Il mio problema è il seguente:

    In una Window WPF ho un controllo Image nel quale carico una piantina, diciamo in scala 1:1000, in base alla posizione del mouse vorrei calcolare la distanza in metri con il bordo sinistro.


    Finora riesco a calcolare la distanza dal bordo sinistro in Pixel (Facile: GetMousePosition) ma si sà i Pixel fondamentalmente dipendono dai DPI del monitor in uso, pertanto (forse) dovrei recuperare i dpi del monitor e la risoluzione del monitor a calcolare in un cm quanti pixel ci sono e poi procedere con l'adattamento in base alla posizione del mouse e la scala della piantina.

    Qualcuno sa come posso ricavare questo risultato?

  2. #2
    dpi? quindi stai parlando dei vecchi e cari monitor CRT?

    Secondo me i dpi non c' entrano nulla, né le dimensioni dei pixel.

    Se la tua immagine in scala 1/1000 è 800x600 pixel la vedrai grandissima se il monitor avesse dei pixel (si fa per dire) da 1 mm e piccolissima se avesse dei pixel da 0.01 mm (si fa per dire)... la vedresti bene su un monitor settato a 800x600 pixel, piccolissima sullo stesso monitor settato a 8000x6000 pixel (si fa per dire), ma sempre da 800x600 pixel rimarrebbe.

    Per cui se sai che l' immagine rappresenta una porzione di terreno di 800x600 metri, ogni pixel, microscopico, medio o grande che sia, sempre a un metro corrisponde.

    Quindi a mio parere devi lavorare sul rapporto che c' è tra i metri che l' immagine ricomprende e la grandezza in pixel dell' immagine stessa, indipendentemente dalle dimensioni fisiche e dalla risoluzione dello schermo su cui poi la visualizzi.

    Poi con Cursor.Position controlli dove è il cursore e moltiplichi i pixel per il rapporto metro/pixel dell' immagine..
    .

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    La risoluzione del monitor non devi considerarla, quello su cui devi lavorare e la risoluzione del sistema e dell' immagine.
    Basta ottenere dei dati e applicare delle formule di conversione.
    Con il codice di seguito imposto le dimensioni in millimetri tramite due NumericUpDown e ridimensiono una PictureBox in base alla risoluzione del sistema in uso. Aldilà di cosa si vede sul monitor la dimensione reale corrisponde a quella impostata con i NumericUpDown.
    Vedi tu se può esserti utile come "ispirazione":
    codice:
            Dim dpi_sistema As Integer
            Dim rettangolo_X As Integer
            Dim rettangolo_Y As Integer
            'mmXp = rapporto millimetri per pollice (1 pollice = 2,54 centimetri)
            Dim mmXp As Integer = 25.4
    
            'ottengo i dpi del sistama
            Dim g As Graphics = Me.CreateGraphics
            dpi_sistema = g.DpiX
            g.Dispose()
    
            'conversione (millimetri*dpi del sistema/millimetri per pollice = punti per pollice)
            rettangolo_X = System.Math.Round(NumericUpDownX.Value * dpi_sistema / mmXp)
            rettangolo_Y = System.Math.Round(NumericUpDownY.Value * dpi_sistema / mmXp)
    
            PictureBox1.Width = rettangolo_X
            PictureBox1.Height = rettangolo_Y

  4. #4
    grazie intanto, ci lavoro un pò e vi faccio sapere come ho risolto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.