Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Пиксели на экране.


Автор: CWD 16.3.2013, 22:52
Добрый день! Подскажите есть ли какая-то зависимость между местом пикселя и разрешением экрана? Например если нужный пиксель при разрешении 1440 на 900 находится на позиции (100,150), то где этот пиксель будет находится при разрешении 1600 на 900? Спасибо.

Автор: volatile 16.3.2013, 23:38
там же и будет.

вообще вопрос не верный. если вы имеете ввиду пикселы которые рисует, например, видеоплеер, растягивающий изображение на весь экран, то пикселы будут уже не там  smile 

Автор: CWD 17.3.2013, 00:49
volatile, Я подразумевал второй вариант. Как можно вычислить зависимость?

Автор: Dem_max 17.3.2013, 05:21
ТС
Что у тебя не совпадает ?????
Может у тебя в настройках винды стоит увеличенный масштаб ????

Автор: CWD 12.4.2013, 21:55
Попробую обьяснить проблему.

Вот например есть код 

Код

#define MAX_HEIGHT 620
#define MAX_WIDTH 1440

bool A::IsIt(int x, int y, DWORD z)
{
    DWORD DWORD1;
    window = GetDesktopWindow();
    GetWindowRect(window, &windowRect);
    int bitmap_dx = windowRect.right-windowRect.left;
    int bitmap_dy = windowRect.bottom-windowRect.top;
    BITMAPINFOHEADER &bmpInfoHeader = info.bmiHeader;
    bmpInfoHeader.biSize = sizeof(bmpInfoHeader);
    bmpInfoHeader.biWidth = MAX_WIDTH;
    bmpInfoHeader.biHeight = MAX_HEIGHT;
    bmpInfoHeader.biPlanes = 1;
    bmpInfoHeader.biBitCount = 32;
    bmpInfoHeader.biCompression = BI_RGB;
    bmpInfoHeader.biSizeImage = bmpInfoHeader.biWidth*bmpInfoHeader.biHeight*(bmpInfoHeader.biBitCount/8);
    bmpInfoHeader.biXPelsPerMeter = 0;
    bmpInfoHeader.biYPelsPerMeter = 0;
    bmpInfoHeader.biClrUsed = 0;
    bmpInfoHeader.biClrImportant = 0;
    HDC winDC = GetWindowDC(window);
    HDC bmpDC = CreateCompatibleDC(winDC);
    HBITMAP bitmap = CreateDIBSection(winDC, &info, DIB_RGB_COLORS, (void**)&bitPointer, NULL, 0);
    SelectObject(bmpDC, bitmap);//Выбираем в контекст битмэп
    BitBlt(bmpDC, 0, 0, MAX_WIDTH, MAX_HEIGHT, winDC, 0, 0, SRCCOPY);
    DWORD1 = GetPixel(winDC,x,y);
    DeleteObject(bitmap);
    DeleteObject(bmpDC);
    ReleaseDC(window, winDC);
    if (DWORD1 == z) {return true;} else {return false;}
}


Функция проверяет есть ли в заданной точке пиксель опредленного цвета.

Так вот использую эту функцию при разрешении 1440 на 990 выбирая три точки A(1406,450), B(968,644), C(67,644).
А при разрешении 1360 на 768 точки оказываются в других местах A(1326,450), B(888,552), C(67,552). Тоесть смещается по кординатам на 80 и 92. Какова закономерность? Как переписать программу на другое разрешение?

Автор: baldina 12.4.2013, 22:33
если при размере экрана (разрешении) w и h точка имеет координаты x,y то при другом разрешении w1,h1
x1 = x*w1/w
y1=y*h1/h

Добавлено через 4 минуты и 59 секунд
еще может потребоваться учет соотношения w/h до и после

Автор: volatile 12.4.2013, 23:23
Цитата(CWD @  12.4.2013,  21:55 Найти цитируемый пост)
точки оказываются в других местах 

кто эти точки рисует?

Автор: bsa 13.4.2013, 07:04
Я фигею. До чего наше образование докатилось - человек уже не может увидеть в элементарной задаче (уровня 7-го класса) способ ее решения.

Автор: Amp 13.4.2013, 14:09
Цитата(volatile @  12.4.2013,  23:23 Найти цитируемый пост)
кто эти точки рисует? 

Есть подозрение, что речь идет об обоях, которые растягиваются под разрешение декстопа.

Автор: volatile 14.4.2013, 00:01
Цитата(Amp @  13.4.2013,  14:09 Найти цитируемый пост)
Есть подозрение, что речь идет об обоях, которые растягиваются под разрешение декстопа. 

В таком случае, не помешает привести: как эти обои поставили.
Если не ошибаюсь, обои можно поставить с растягиванием по ширине*высоте, распложить по центру, уложить плиткой, и может еще как, ...
В каждом из этих случаев алгоритм будет разный.


Автор: Amp 14.4.2013, 17:38
Цитата(volatile @  14.4.2013,  00:01 Найти цитируемый пост)
В таком случае, не помешает привести: как эти обои поставили.
Если не ошибаюсь, обои можно поставить с растягиванием по ширине*высоте, распложить по центру, уложить плиткой, и может еще как, ...
В каждом из этих случаев алгоритм будет разный.

Я вообще не понимаю зачем может понадобиться расчет положения пикселей на обоине при смене разрешения. Ждем дальнейших пояснений ТС.

Автор: xvr 15.4.2013, 12:33
Цитата(CWD @  12.4.2013,  21:55 Найти цитируемый пост)
Какова закономерность?

Закономерность может сказать только програмист фирмы Микрософт, который писал код окна Десктопа, обрабатывающий изменение его размеров  smile 

Цитата(CWD @  16.3.2013,  22:52 Найти цитируемый пост)
Подскажите есть ли какая-то зависимость между местом пикселя и разрешением экрана?

При изменении разрешения экрана десктоп полностью перерисовывается. При этом он не только растягивает обои, но и может изменить расположение иконок на себе. Так что о 'зависимости места пикселя' вообще говорить нельзя - там будут уже другие пиксели

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)