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

Работа с изображениями (считать/вывести) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Добавление строки в стек http://www.cyberforum.ru/cpp-beginners/thread696795.html
Добрый вечер! Уже раза 3-4 писал, так и никто не помог.... Программку чутку доделал, осталось только организовать добавление элементов структуры в стек. Помогите пожалуйста. #include...
C++ Поразрядные операции Добрый вечер. Не понимаю по какому принципу решать второю часть задачи. Собственно вот: тема - Поразрядные операции. Задание: Даны два int-числа: N1 = ABCD и N2 = EFGH, где AB…GH – 16 – ричные... http://www.cyberforum.ru/cpp-beginners/thread696792.html
C++ В последовательности поменять местами максимальный элемент и элемент с номером m
Дано натуральное число m<20, действительные числа А1..А25 (попарно различные). В последовательности А1..А25 поменять местами МАХ-элемент и элемент с номером m. РЕШЕНИЕ НА С++. ПОМОГИТЕ ПОЖАЛУЙСТА!
Функция для кодсчета количества слов C++
#include <stdio.h> #include <string.h> #include <conio.h> int vivod() { printf("Vvedide predlojenie\n"); } int mal(char *str)
C++ Определение классов http://www.cyberforum.ru/cpp-beginners/thread696786.html
Определить классы, описывающие точку в полярной и декартовой системах координат. Составить и протестировать функции для: а) получения декартовых координат точки, если заданы ее полярные координаты;...
C++ Синтаксический анализатор. Сдвиг-свёртка без возвратов Доброго времени суток. Мне необходимо реализовать синтаксический анализатор, методом "сдвиг-свёртка без возвратов". Но я даже не знаю с чего начать и как реализовывать алгоритм. Если у кого-нибудь... подробнее

Показать сообщение отдельно
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
14.11.2012, 00:04
Только сегодня разбирался в формате bmp, если это чем нибудь тебе поможет:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <fstream>
#include <ctime>
using namespace std;
 
const int height = 480, width = 640;
char image[height][width][3];
char bgcolor[3] = {32, 64, 128}; // фон
char rgb[3] = {0, 0, 0};
ofstream file("3.bmp");
 
void drawRect(int, int, int, int);
void createFile();
void paint_and_close();
void setColor(char, char, char);
void drawPoint(int, int);
void manyPoints(double);
 
int main()
{
    createFile();
    
    // рисуем рандомные прямоугольники
    srand(time(0));
    int x1, y1;
    for (int i = 0; i < 10; i++)
    {
        x1 = abs(rand()%width);
        y1 = abs(rand()%height);
        setColor(abs(rand()%256), abs(rand()%256), abs(rand()%256));
        drawRect(x1, y1, abs(rand()%(width - x1)), abs(rand()%(height - y1)));
    }
    // точка
    setColor(128, 128, 128);
    drawPoint(120, 130);
    
    paint_and_close();
    return 0;
}
 
void drawRect(int x, int y, int w, int h)
{
     for (int i = x; i < x + w && i < width; i++)
     {
         for (int j = 0; j < 3; j++)
         {
             image[y][i][j] = rgb[j];
             if (y + h - 1 < height) image[y + h - 1][i][j] = rgb[j];
         }
     }
     for (int i = y; i < y + h && i < height; i++)
     {
         for (int j = 0; j < 3; j++)
         {
             image[i][x][j] = rgb[j];
             if (x + w - 1 < width) image[i][x + w - 1][j] = rgb[j];
         }
     }
}
void drawPoint(int x, int y)
{
     if (x < width && y < height)
        for (int i = 0; i < 3; i++)
            image[y][x][i] = rgb[i];
}
void manyPoints(double percent)
{
     for (int i = 0; i < height; i++)
         for (int j = 0; j < width; j++)
             if (double(abs(rand()%100)) < percent)
                for (int k = 0; k < 3; k++)
                    image[i][j][k] = 0;
}
void createFile()
{
     ifstream in("1.bmp");
     char ch;
     for (int i = 0; i < 54; i++) file.put((ch = in.get()));
     for (int i = 0; i < height; i++)
         for (int j = 0; j < width; j++)
             for (int k = 0; k < 3; k++)
                 image[i][j][k] = bgcolor[k];
     in.close();
}
void paint_and_close()
{
     for (int i = height - 1; i >= 0; i--)
         for (int j = 0; j < width; j++)
             for (int k = 2; k >= 0; k--)
                 file.put(image[i][j][k]);
     file.close();
}
void setColor(char r, char g, char b)
{
     rgb[0] = r;
     rgb[1] = g;
     rgb[2] = b;
}
Было лень до конца разбираться в структуре файла bmp, поэтому программа работает не совсем как надо.
Если хочешь создать и редактировать программно картинку M * N, то тебе надо будет создать 24 разрядную bmp картинку в пэинте размером M * N и сохранить в папку с программой под именем "1.bmp", далее меняешь переменные height = M и width = N, далее в функции main() редактируешь что надо, на выходе готовая "3.bmp" картинка.

Если поймешь как работает моя программа, надеюсь найдешь вопрос на свой ответ.
1
Миниатюры
Работа с изображениями (считать/вывести)  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.