Форум программистов, компьютерный форум CyberForum.ru

найдите ошибку, программа переворачивающая изображение на 90 градусов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти те члены последовательности, которые при делении на 5 дают остаток 1 http://www.cyberforum.ru/cpp-beginners/thread581858.html
Даны натуральные числа n , g1 , ... ,gn. Найти те члены gi последовательности g1 , ... , gn ,которые при делении на 5 дают остаток 1. Вот в чем у меня ошибка в коде? понять не могу(( Меня еще интересует, правильно ли я написала заполнение массива случайными числами? #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> int main()
C++ Написать программу, которая выводит все числа Мерсенна Написать программу, которая выводит все числа Мерсенна от 1 до n. Простое число называется числом Мерсенна, если его можно представить в виде {2}^{p}-1, где p - тоже простое число. http://www.cyberforum.ru/cpp-beginners/thread581849.html
C++ Графическая заставка С++
Здравствуйте,прошу помочь, есть программа графической заставки, в процессе выполнения которой по графическому окну случайным образом перемещаются точки,круги и прямоугольники. Нужно Реализовать перемещение графических объектов по прямым траекториям с разными случайными векторами скоростей. Для перемещения объекта по прямой траектории надо, чтобы для этого объекта сохранялся вектор...
Деревья. Подсчет льстьев C++
Добрый вечер. Написал функцию для подсчета числа листьев в дереве, но почему-то считает неверно. Не могли бы помочь написать функцию, чтобы подсчет был верный. int count_listya=0; void Count_Leaves(Tree* root) { if (!root->left&&!root->right) { cout <<"fff"; getch(); count_listya++; } else if (!root->left)
C++ Найты сумму ряда http://www.cyberforum.ru/cpp-beginners/thread581819.html
Найты сумму ряда с точностью е=10-4, общий член которого {a}_{n}=\frac{1}{{2}^{n}}+\frac{1}{{3}^{n}}
C++ Отсортировать массив с буквами в обратном порядке чем в алфавите Отсортировать массив с буквами в обратном порядке чем в алфавите подробнее

Показать сообщение отдельно
Malina
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 3
21.05.2012, 21:34     найдите ошибку, программа переворачивающая изображение на 90 градусов
класс содержит конструкторы: по умолчанию, с параметром, копировщик; функцию, переворачивающую изображение на 90 градусов по часовой стрелке, и перегруженные операторы записи и считывания
BMP.h

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#pragma once
#include <iostream>
#include <fstream>
using namespace std;
typedef unsigned short int word; 
typedef unsigned int dword;
 
#pragma pack(push)
#pragma pack(1)
 
typedef unsigned char BYTE;
const int n=16; //высота картинки в пикселях
const int m=16; //ширина картинки в пикселях
 
struct BitMapHeader
{
word bfType; // тип файла, для BMP - BM 
dword bfSize; // размер файла - dword (истинный размер 34342-1078+14)
word bfReserved1; // не используется 
word bfReserved2; // не используется 
dword bfOffbits; // смещение данных битового образа от заголовка в байтах (1078) 
dword biSize; // число байт, занимаемых структурой BITMAPINFOHEADER 
dword biWidth; // ширина витового образа в пикселях
dword biHeight; // высота битового образа в пикселях
word biPlanes; // число битовых плоскостей устройства
word biBitCount; // число битов на пиксель 
dword biCompression; // тип сжатия 
dword biSizeImage; // размер картинки в байтах (без 1078 т.е.33264)
dword biXPelPerMeter; // горизонтальное разрешение устройства, пиксель/м 
dword biYPelPerMeter; // вертикальное разрешение устройства, пиксель/м 
dword biClrUsed; // число используемых цветов 
dword biClrImportant; // число "важных" цветов 
};
#pragma pack(pop)
 
struct tagRGBQUAD 
{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
};
////////////////////////////////////////////// создание класса BMP
class BMP
{ 
private:
BitMapHeader Header; //заголовок
tagRGBQUAD RGB[256]; //палитра
BYTE arrbmp[n*m]; //графические данные(значения пикселей)
 
public:
BMP(void);
BMP(const BMP &b);
BMP(BitMapHeader head,tagRGBQUAD RGB[256],BYTE arr[n*m]);
friend ifstream &operator>>(ifstream &ifs,BMP &b);
friend ofstream &operator<<(ofstream &ofs,BMP &b);
void povorotbmp90();
~BMP(void);
};
 
BMP.cpp
 
#include "BMP.h"
BMP::BMP(void) //конструктор по умолчанию
{
}
 
BMP::BMP(const BMP &b) //конструктор копировщик
{
Header=b.Header;
for (int i=0;i<256;i++)
RGB[i]=b.RGB[i];
for (int i=0;i<n*m;i++)
arrbmp[i]=b.arrbmp[i];
}
BMP::BMP(BitMapHeader head,tagRGBQUAD rgb[256],BYTE arr[n*m]) //конструктор с параметрами
{
Header=head;
for (int i=0;i<256;i++)
RGB[i]=rgb[i];
for (int i=0;i<n*m;i++)
arrbmp[i]=arr[i];
}
 
ifstream &operator>>(ifstream &ifs,BMP &b)
{ 
ifs.read((char*)&b.Header,sizeof(b.Header)); 
ifs.read((char*)&b.RGB,sizeof(b.RGB));
ifs.read((char*)&b.arrbmp,sizeof(b.arrbmp)); 
return ifs;
}
ofstream &operator<<(ofstream &ofs,BMP &b)
{ 
ofs.write((char*)&b.Header,sizeof(b.Header)); 
ofs.write((char*)&b.RGB,sizeof(b.RGB));
ofs.write((char*)&b.arrbmp,sizeof(b.arrbmp));
return ofs;
}
 
 
void BMP:: povorotbmp90() //функция поворота картинки на 90 градусов
{
BYTE arr[n][m];
for (int i=0;i<n;i++)
for(int j=0;j<m;j++)
arr[i][j]=arrbmp[j+n*i];
int k=0;
for (int i=n-1;i>=0;i--)
{
for(int j=0;j<m;j++){
arrbmp[j+n*k]=arr[i][j];
k++;
}
}
}
 
BMP::~BMP(void)
{
 
}
MAIN.cpp
 
#include "stdafx.h"
#include "BMP.h"
 
 
int main()
{
BMP bmp8;
ifstream ifs("111.bmp",ios::binary|ios::in); //создание элемента потокового ввода и открытие файла(двоичного) для чтения
ofstream ofs("112.bmp",ios::binary|ios::out); //создание элемента потокового вывода и открытие файла(двоичного) для записи
ifs>>bmp8; //считывание информации из двоичного файла в элемент типа BMP с помощью перегруженного оператора ">>"
bmp8.povorotbmp90(); //поворот изображения на 90 градусов
ofs<<bmp8; //запись информации в двоичный файл из элемента типа BMP с помощью перегруженного оператора "<<"
ifs.close();
ofs.close();
return 0;
}
файл, в который записываю становится битым
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru