forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   На весь экран - пропорции (http://forum.boolean.name/showthread.php?t=15168)

xmarat 23.07.2011 19:04

На весь экран - пропорции
 
Если сделать так:
PHP код:

Graphics 102476832 

То вся картинка растягивается на весь экран, и, если монитор 1366x768, все получается сплющенным. Я бы хотел сделать так, чтоб если монитор широкоформатный, то по краям появлялись черные полоски, если наоборот, то полоски сверху, или вообще не появляются если пропорции монитора соответствуют 1024x768(например 1280×1024), в общем как у плееров реализовано. Кто нибудь знает как это сделать? Заранее благодарен...

Tadeus 23.07.2011 19:41

Ответ: На весь экран - пропорции
 
http://forum.boolean.name/showthread.php?p=174690 ?

xmarat 23.07.2011 20:36

Ответ: На весь экран - пропорции
 
Да. Вопрос аналогичный. Однако вопрос остался открытым.

ffinder 24.07.2011 00:16

Ответ: На весь экран - пропорции
 
Цитата:

Сообщение от xmarat (Сообщение 196602)
Я бы хотел сделать так, чтоб если монитор широкоформатный, то по краям появлялись черные полоски, если наоборот, то полоски сверху, или вообще не появляются если пропорции монитора соответствуют 1024x768(например 1280×1024)

CameraViewport camera,x,y,width,height

Параметры

camera - указатель камеры
x - координата x верхнего левого угла окна ( области просмотра)
y - координата y верхнего левого угла окна
width - ширина окна
height - высота окна Описание

Устанавливает позицию области просмотра камеры и ее размер.
Область просмотра камеры - 2D-область экрана, в которой отображаются рассматриваемые камерой объекты.
Установки области просмотра камеры позволяют Вам получать эффекты нескольких окон с разным видом и зеркал.



найдено тут: help.boolean.name в разделе 3d

Randomize 24.07.2011 00:18

Ответ: На весь экран - пропорции
 
раздел BlitzMax!
юзать надо просто SetViewport
Формулу расчёта бери из данной ранее ссылки.

xmarat 24.07.2011 00:29

Ответ: На весь экран - пропорции
 
А как узнать какое разрешение у монитора?

Randomize 24.07.2011 01:08

Ответ: На весь экран - пропорции
 
PHP код:

Extern "Win32"
    
Function GetSystemMetrics:Int(Axis:Int)
EndExtern
Local DesktopWidth
:Int GetSystemMetrics(0)
Local DesktopHeight:Int GetSystemMetrics(1)

Graphics(DesktopWidth,DesktopHeight


xmarat 24.07.2011 01:21

Ответ: На весь экран - пропорции
 
Эмм... А нет другого способа определить, а то я на Linux'е. Blitzmax не захотел это компилировать...

ffinder 24.07.2011 01:35

Ответ: На весь экран - пропорции
 
на линухе кури мануал про xlib

Randomize 24.07.2011 05:05

Ответ: На весь экран - пропорции
 
Цитата:

Сообщение от ffinder (Сообщение 196620)
на линухе кури мануал про xlib

Опередил :)

Цитата:

Сообщение от xmarat (Сообщение 196619)
Эмм... А нет другого способа определить, а то я на Linux'е. Blitzmax не захотел это компилировать...

PHP код:

SuperStrict
Import 
"-lXrandr"
Import "screen.cpp"

Extern
    
Function GetScreenSize:Int(width:Int Var,height:Int Var) 
EndExtern

Local desktopWidth
:Int
Local desktopHeight
:Int

Local error
:Int GetScreenSize(widthheight

И собственно сишный сорс:
screen.cpp
PHP код:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<X11/Xlib.h>
#include<X11/extensions/Xrandr.h>

extern "C" int GetScreenSize(int&,int&);  // Makes the function visable to other files

int GetScreenSize(intwidthintheight)
{

         
int num_sizes;
         
Rotation original_rotation;

         
Display *dpy XOpenDisplay(NULL);
         
Window root RootWindow(dpy0);
         
XRRScreenSize *xrrs XRRSizes(dpy0, &num_sizes);
         
//
         //     GET CURRENT RESOLUTION AND FREQUENCY
         //
         
XRRScreenConfiguration *conf XRRGetScreenInfo(dpyroot);
         
short original_rate XRRConfigCurrentRate(conf);
         
SizeID original_size_id XRRConfigCurrentConfiguration(conf, &original_rotation);

          
width xrrs[original_size_id].width;
          
height xrrs[original_size_id].height;
 
         
XCloseDisplay(dpy);
        return 
0
    } 


xmarat 24.07.2011 16:17

Ответ: На весь экран - пропорции
 
Спасибо огромное Randomize!!! Это то что нужно. Вопрос на будущее: при компиляции в windows, с этим(код ниже) будет аналогично?
PHP код:

Extern "Win32" 
    
Function GetSystemMetrics:Int(Axis:Int
EndExtern 
Local DesktopWidth
:Int GetSystemMetrics(0
Local DesktopHeight:Int GetSystemMetrics(1

Graphics(DesktopWidth,DesktopHeight


Randomize 24.07.2011 20:09

Ответ: На весь экран - пропорции
 
Есть директивы:
PHP код:

?Win32
 Код для Windows
?MacOs
 Код для макоси
?Linux
  Код для линукса



xmarat 25.07.2011 11:09

Ответ: На весь экран - пропорции
 
Не знал что так можно. Полезная вещь, буду знать. А как можно узнать размер дисплея в MacOS?

SBJoker 25.07.2011 12:00

Ответ: На весь экран - пропорции
 
Для макос должен пример для линукса подойти.

Randomize 25.07.2011 12:01

Ответ: На весь экран - пропорции
 
Цитата:

Сообщение от xmarat (Сообщение 196702)
Не знал что так можно. Полезная вещь, буду знать. А как можно узнать размер дисплея в MacOS?

PHP код:

?Win32
    Import pub
.win32
    
Private
    
Extern
        
Function ReleaseDC(hwnd:Inthdc:Int)"Win32" 
    
End Extern
    
Public
?
MacOS
    Import 
"macscreen.c"
    
Private
    
Extern
        
Function CGDisplayCurrentMode:Byte Ptr(displayID:Byte Ptr)"MacOS"
        
Function CGGetActiveDisplayList:Byte Ptr(kMaxDisplays:Intdisplay:Byte PtrnumDisplays:Int Var)"MacOS"
        
Function MACOS_GetWidth:Int(mode:Byte Ptr)"C"
        
Function MACOS_GetHeight:Int(mode:Byte Ptr)"C"
        
Function MACOS_GetBPP:Int(mode:Byte Ptr)"C"
        
Function MACOS_GetHertz:Int(mode:Byte Ptr)"C"
    
End Extern 
    
Public
?
Linux
    Import brl
.graphics
?

Function 
GetDesktopMode:Int (width:Int Var, height:Int Var, depth:Int Var, hertz:Int Var)
    ?
win32
        Local hwnd
:Int GetDesktopWindow()
        
Local hdc:Int GetDC(hwnd)
        If 
hdc Null Then Return -1
        width  
GetDeviceCaps(hdcHORZRES)
        
height GetDeviceCaps(hdcVERTRES)
        
depth  GetDeviceCaps(hdcBITSPIXEL)
        
hertz  GetDeviceCaps(hdcVREFRESH)
        
ReleaseDC(hwnd,hdc)
    ?
MacOS
        Local display
:Byte Ptr[] = New Byte Ptr[1]
        
Local iMode:Byte Ptr Null
        Local iCount
:Int
        CGGetActiveDisplayList 1
displayiCount
        iMode  
CGDisplayCurrentMode(display[0])
        
width  MACOS_GetWidth(iMode)
        
height MACOS_GetHeight(iMode)
        
depth  MACOS_GetBPP(iMode)
        
hertz  MACOS_GetHertz(iMode)
    ?
Linux
        CountGraphicsModes
()
        
GetGraphicsMode (0,width,height,depth,hertz)
    ?
End Function

' Получать так : '
Local desktopWidth:IntdesktopHeight:IntdesktopDepth:IntdesktopHertz:Int
GetDesktopMode
(desktopWidthdesktopHeightdesktopDepthdesktopHertz)
Graphics(desktopWidthdesktopHeightdesktopDepthdesktopHertz



Часовой пояс GMT +4, время: 02:02.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot