2012-05-04 9 views
5

Estoy trabajando para que mi aplicación PPP sea sensible utilizando this MSDN guide donde la técnica para escalar utiliza píxeles lógicos X e Y desde un contexto de dispositivo.¿Los píxeles no son cuadrados en un monitor?

int _dpiX = 96, _pdiY = 96; 
HDC hdc = GetDC(NULL); 
if (hdc) 
{ 
    _dpiX = GetDeviceCaps(hdc, LOGPIXELSX); 
    _dpiY = GetDeviceCaps(hdc, LOGPIXELSY); 
    ReleaseDC(NULL, hdc); 
} 

A continuación, puede escalar coordenadas X e Y usando

int ScaleX(int x) { return MulDiv(x, _dpiX, 96); } 
int ScaleY(int y) { return MulDiv(y, _dpiY, 96); } 

¿Hay siempre una situación en la GetDeviceCaps(hdc, LOGPIXELSX) y GetDeviceCaps(hdc, LOGPIXELSY) volvería números diferentes para un monitor. El único dispositivo que realmente me preocupa es un monitor, ¿así que necesito tener funciones separadas ScaleX(int x) y ScaleY(int y)? ¿Puedo usar solo una función Scale(int px)? ¿Habría un inconveniente para hacer esto?

Gracias de antemano por la ayuda.

Respuesta

7

Teóricamente es posible, pero no conozco ningún monitor reciente que use píxeles no cuadrados. Hay tantas ventajas para los píxeles cuadrados, y tanto software existente asume píxeles cuadrados, que parece poco probable que un monitor principal salga con un modo de píxeles no cuadrados.

En muchos casos, si tienetiene un monitor con píxeles no cuadrados, es probable que pueda aplicar una transformación para que parezca que tiene píxeles cuadrados (por ejemplo, estableciendo el modo de asignación).

Dicho esto, es común que las impresoras tengan unidades de dispositivo no cuadradas. Muchos de ellos tienen una resolución mucho mayor en una dimensión que en la otra. Algunos controladores hacen que esta resolución esté disponible para la persona que llama. Otros harán que parezca que tiene píxeles cuadrados. Si alguna vez desea volver a utilizar su código para imprimir, le aconsejo que no combine sus escalas horizontales y verticales.

+0

Hay una gran cantidad de pantallas de plasma por ahí (en su mayoría televisores) que tienen una resolución interna de 1024x768, pero son 16: 9. Google "plasma 1024x768 16: 9" por ejemplos ". Es muy raro encontrar esto en un monitor de computadora, pero si es fácil de programar, ¡sería genial apoyar ese caso! – Chris

+0

@Chris: sospecho que el hardware para una pantalla panorámica de 1024x768 va a aplicar una transformación a un nivel bajo. En el nivel del controlador, se le presentará la ilusión de píxeles cuadrados, tal vez mediante el uso de una pantalla virtual de 1280x720 en una disposición de 16x9, y el hardware debajo el controlador volverá a muestrear los píxeles virtuales cuadrados para producir los píxeles nativos no cuadrados. Dudo que pueda abordar los píxeles nativos no cuadrados directamente en la capa WinAPI. –

2

Los píxeles de hardware de los paneles LCD siempre son cuadrados. Usando CRT, puede tener un cuadrado rectangular, como usar la resolución 320x200 o 320x400 en el monitor 4:3 (esta resolución se usa actualmente). En la pantalla LCD puede obtener píxeles rectangulares utilizando una resolución no nativa en el monitor: resolución de pantalla panorámica en el monitor 5:4 y viceversa.

+0

No es cierto. Por ejemplo, https: // pcmonitors .info/reviews/philips-bdm4065uc / –

Cuestiones relacionadas