Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
tatarrr
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 106
#1

Вывод черных и белых пиксилей на экран - C++

05.04.2014, 10:16. Просмотров 669. Ответов 24
Метки нет (Все метки)

Помогите написать программу, выводящую черные и белые полосы по горизонтали и вертикали по заданному разрешению. Например вписываю 800х600, то мне и выводит 800 вертикальных и 600 горизонтальных полос.

Пока что в примере у меня есть такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <vga.h>
#include <unistd.h>
#include <stdio.h>
 
int main(int argc, char* argv[])
{
  int i, k;
  printf ("Starting...Ctrl-C out when done calibrating.\n");
  sleep (4);
  vga_init ();
  vga_setmode (G800x600x256);
  
  for (i=0; i<800; i++)
  {
    for (k=0; k<600; k++)
    {
      vga_setcolor (0);
      vga_drawpixel (i,k);
    }
  }
  vga_setcolor(15);
  vga_drawpixel(799,599);
  sleep (100000);
  return(0);
}
Но как я понял, при помощи этого кода программа связывается с подключенным оборудованием, которое и задает значения для программы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2014, 10:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод черных и белых пиксилей на экран (C++):

Имеются 2 ящика с шарами. В первом 3 белых и 7 черных, во втором 6 белых и 7 черных - Теория вероятностей
Имеются 2 ящика с шарами. В первом 3 белых и 7 черных, во втором 6 белых и 7 черных. Из каждого извлекают по одному шару. Какова...

В первой урне 6 белых и 4 черных шара, во второй 3 белых и 2 черных - Теория вероятностей
В первой урне 6 белых и 4 черных шара, во второй 3 белых и 2 черных. Из первой урны наудачу извлекают сразу 3 шара и шары того цвета,...

В первой урне 7 белых и 4 черных шаров, а во второй урне 8 белых и 5 черных шаров - Теория вероятностей
В первой урне 7 белых и 4 черных шаров, а во второй урне 8 белых и 5 черных шаров. Из первой урны вынимают случайным образом 3 шаров,...

В ящике 8 белых и 10 черных шаров. Найти вероятность того,что наудачу отобранных пяти шаров окажется не менее четырех черных - Теория вероятностей
Помогите решить хотя бы первые 3 задачи... Буду очень благодарна!!

В урне 4 белых и 6 черных шаров. Не глядя берут 2. X подсчитывает количество белых шаров, Y чёрных - Теория вероятностей
В урне 4 белых и 6 черных шаров. Не глядя берут 2. X подсчитывает количество белых шаров, Y чёрных. Составить таблицу распределения...

В урне 10 белых и 5 черных шаров. Чему равна вероятность того, что, вытянув наугад с возвращаением 14 шаров, получим белых не менее 12? - Теория вероятностей
Добрый вечер господа\товарищи :) Прошу помощи в решении задачи на возвращение: В урне 10 белых и 5 черных шаров. Чему равна...

24
IrineK
Заблокирован
05.04.2014, 10:18 #2
Цитата Сообщение от tatarrr Посмотреть сообщение
800 вертикальных и 600 горизонтальных полос.
Одновременно или по отдельности?
0
tatarrr
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 106
05.04.2014, 10:20  [ТС] #3
IrineK
Одновременно
0
IrineK
Заблокирован
05.04.2014, 11:36 #4
Попробуйте в циклах:
C++
1
2
3
for (i=0; i<800; i += 2)
  {
    for (k=0; k<600; k += 2)
0
tatarrr
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 106
05.04.2014, 12:33  [ТС] #5
IrineK
Я даже не представляю как начать писать программу, как задать цвет этим линиям. Программировать почти не умею)
0
IrineK
Заблокирован
05.04.2014, 12:40 #6
Цитата Сообщение от tatarrr Посмотреть сообщение
в примере у меня есть такой код
Если это пример, и он рабочий, всё, что вам осталось написать:
в строке 13: for (i=0; i<800; i += 2)
в строке 15: for (k=0; k<600; k += 2)

Всё.
0
tatarrr
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 106
05.04.2014, 12:45  [ТС] #7
IrineK
Не, я этот код не могу запустить, выдает ошибку в этом месте vga_setmode (G800x600x256);
И как я понял, он подключает другие файлы, не помню за что отвечающие. Мне же просто надо написать программу для вывода полос.
И у меня еще такой вопрос, мне для реализации создавать консольный проект или windows application?
0
IrineK
Заблокирован
05.04.2014, 13:14 #8
Цитата Сообщение от tatarrr Посмотреть сообщение
Мне же просто надо написать программу для вывода полос.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <Windows.h>
using std::cout;
using std::cin;
 
int main()
{   HWND hW = GetConsoleWindow();
    HDC hDC = GetDC(hW);
    int width, height, i, j;
    POINT start = {0, 0};
 
    cout << "Set the screen\n\twidth:\t";
    cin >> width;
    cout << "\theight:\t";
    cin >> height;
    system("cls");
    
    SetWindowPos(hW, HWND_TOP, 0, 0, width, height, SWP_SHOWWINDOW);
    
    HPEN whitePen = CreatePen(PS_SOLID, 1, RGB(255, 255, 255)); 
    SelectObject(hDC, whitePen); 
 
    for (i = 1; i<width; i += 2)
    {   GetCurrentPositionEx (hDC, &start);
        MoveToEx (hDC, i, 0, &start);
        LineTo (hDC, i, height-1);
    }
 
    for (i = 1; i<height; i += 2)
    {   GetCurrentPositionEx (hDC, &start);
        MoveToEx (hDC, 0, i, &start);
        LineTo (hDC, width-1, i);
    }
 
    DeleteObject(whitePen);
    
    cin.sync(); cin.get();
    return 0;
}
Добавлено через 32 секунды
Консоль.

Добавлено через 7 минут
Можно еще проще:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <Windows.h>
using std::cout;
using std::cin;
 
int main()
{   HWND hW = GetConsoleWindow();
    HDC hDC = GetDC(hW);
    int width, height, i, j;
    cout << "Set the screen\n\twidth:\t";
    cin >> width;
    cout << "\theight:\t";
    cin >> height;
    system("cls");
    
    SetWindowPos(hW, HWND_TOP, 0, 0, width, height, SWP_SHOWWINDOW);
    
    for (i = 0; i<width; i += 2)
        for (j = 0; j<height; j += 2)
            SetPixel(hDC, i, j, RGB(255,255,255));
    
    cin.sync(); cin.get();
    return 0;
}
0
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,792
Завершенные тесты: 1
05.04.2014, 13:33 #9
IrineK, Небольшие поправки
1. DeleteObject(whitePen); не сработает если не вернуть старое перо.
2. Поскольку окно отображается не сразу, то часть линий пропадает,
нужна некоторая задержка перед циклом вывода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
include <iostream>
#include <Windows.h>
using std::cout;
using std::cin;
 
int main()
{   HWND hW = GetConsoleWindow();
    HDC hDC = GetDC(hW);
    int width=800, height=600, i;
    POINT start;
 
    //cout << "Set the screen\n\twidth:\t";
    //cin >> width;
    //cout << "\theight:\t";
    //cin >> height;
    system("cls");
    Sleep(1000);
    SetWindowPos(hW, HWND_TOP, 0, 0, width, height, SWP_SHOWWINDOW);
    
    HPEN whitePen = CreatePen(PS_SOLID, 1, RGB(255, 255, 255)); 
    HPEN PenOld=(HPEN)SelectObject(hDC, whitePen); 
 
    for (i = 0; i<width; i += 10)
    {   //GetCurrentPositionEx (hDC, &start);
        MoveToEx (hDC, i, 0, &start);
        LineTo (hDC, i, height-1);
    }
 
    for (i = 0; i<height; i += 10)
    {   //GetCurrentPositionEx (hDC, &start);
        MoveToEx (hDC, 0, i, &start);
        LineTo (hDC, width-1, i);
    }
    SelectObject(hDC, PenOld);
    DeleteObject(whitePen);
    
    cin.sync(); cin.get();
    return 0;
}
А во втором варианте, чтобы были сплошные линии надо так
C++
1
2
3
4
5
6
     for (i = 0; i<width; i++)
        for (int j = 0; j<height; j += 10)
            SetPixel(hDC, i, j, RGB(255,255,255));
     for (i = 0; i<width; i += 10)
        for (int j = 0; j<height; j++)
            SetPixel(hDC, i, j, RGB(255,255,255));
1
IrineK
Заблокирован
05.04.2014, 13:37 #10
zss,
Со Sleep понятно - спасибо.
А вот с PenOld чего-то не очень. Зачем это?
0
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,792
Завершенные тесты: 1
05.04.2014, 13:38 #11
Цитата Сообщение от IrineK Посмотреть сообщение
PenOld чего-то не очень. Зачем это?
Пока перо находится в контексте устройства, его удалить нельзя.
Поэтому восстанавливаем старое и только после этого удаляем.
0
IrineK
Заблокирован
05.04.2014, 13:58 #12
zss,
Получается так:

whitePen и PenOld - указатели на одну область памяти, где хранится объект.
DeleteObject эту область памяти почистит и указатель whitePen убьет.
А указатель PenOld умрет по выходе из функции.

Правильно?
0
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,792
Завершенные тесты: 1
05.04.2014, 14:07 #13
Не так
SelectObject возвращает старое (предыдущее) значение объекта, а не того, который мы устанавливаем.
0
IrineK
Заблокирован
05.04.2014, 14:10 #14
C++
1
HPEN PenOld=(HPEN)SelectObject(hDC, whitePen);
Указывает на whitePen.
0
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,792
Завершенные тесты: 1
05.04.2014, 14:13 #15
Цитирую
Return Value
A pointer to the object being replaced. This is a pointer to an object of one of the classes derived from CGdiObject, such as CPen, depending on which version of the function is used. The return value is NULL
if there is an error.
У меня они точно получаются разные:
0D300FA8 и 01B00017 соответственно.
0
05.04.2014, 14:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 14:13
Привет! Вот еще темы с ответами:

В урне содержится 6 черных и белых шаров, к ним добавляют 3 белых шаров - Теория вероятностей
1) В урне содержится 6 черных и белых шаров, к ним добавляют 3 белых шаров. После этого из урны случайным образом вынимают 3 шаров....

В урне содержится 6 черных и белых шаров, к ним добавляют 3 белых шаров - Теория вероятностей
В урне содержится 6 черных и белых шаров, к ним добавляют 3 белых шаров. После этого из урны случайным образом вынимают 3 шаров. Найти...

5 белых шаров и 3 черных - Теория вероятностей
из урны содержащей 5 белых шаров и 3 черных, случайным образом вытаскивают 4 шара. Какова вероятность того что: а)среди них будет...

в урне а белых и b черных шаров - Теория вероятностей
2 игрока поочередно вынимают из урны по одному шару. каждый раз вкладывая его опять в урну и шары перемешиваются. выигравшим считается тот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru