Форум программистов, компьютерный форум 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++ Отсортировать массив с буквами в обратном порядке чем в алфавите Отсортировать массив с буквами в обратном порядке чем в алфавите подробнее

Показать сообщение отдельно
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.05.2012, 22:43     найдите ошибку, программа переворачивающая изображение на 90 градусов
я когда-то делал преобразования бмпшек в пнг руками примерно как тут. в общем там свои детали есть, которые я не точно не понмю. например для 24битных битмапок вроде бы палитна не нужна и сразу же за заголовком идут пиксели. потом там вроде было какое-то выравнивание по ширине. например если картинка с шириной в 17 пикселей, то в массиве пикселей она будет как буд-то большего размера. лишние нужно игнорировать. ну и прочее. вот я поковырялся с вашим кодом, поубирал кое-чего. в текущем виде он будет работать только с 24 битными битмапками с размером 16-16. поворот возможно не такой, какой вам нужен. тут просто транспонирование матрицы пикселей. но результирующая битмапка вроде не битая:

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
#include <stdafx.h>
#include <iostream>
#include <iostream>
#include <fstream>
#include <utility>
 
using namespace std;
 
typedef unsigned short int word; 
typedef unsigned int dword;
typedef unsigned char BYTE;
 
const int n=16; //высота картинки в пикселях
const int m=16; //ширина картинки в пикселях
 
#pragma pack(push)
#pragma pack(1)
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)
 
#pragma pack(push)
#pragma pack(1)
struct Pixels
{
  BYTE red;
  BYTE green;
  BYTE blue;
};
#pragma pack(pop)
 
class BMP
{ 
private:
  BitMapHeader Header;
  Pixels arrbmp[n][m];
 
public:
  BMP();
  friend ifstream& operator >> (ifstream &ifs, BMP& b);
  friend ofstream& operator << (ofstream &ofs, const BMP& b);
  void povorotbmp90();
};
 
BMP::BMP()
{
}
 
ifstream& operator >> (ifstream& ifs, BMP& b)
{
  ifs.read((char*)&b.Header,sizeof(b.Header)); 
  ifs.read((char*)&b.arrbmp,sizeof(b.arrbmp)); 
  return ifs;
}
 
ofstream& operator << (ofstream& ofs, const BMP& b)
{ 
  ofs.write((char*)&b.Header,sizeof(b.Header)); 
  ofs.write((char*)&b.arrbmp,sizeof(b.arrbmp));
  return ofs;
}
 
void BMP:: povorotbmp90()
{
  for (int i = 1; i < n; ++i)
  {
    for (int j = 0; j < i; ++j)
    {
      std::swap(arrbmp[i][j], arrbmp[j][i]);
    }
  }
}
 
int main()
{
  ifstream ifs("d:\\tmp\\bmp.bmp",ios::binary|ios::in);
  BMP bmp8;
  ifs>>bmp8;
  bmp8.povorotbmp90();
 
  ofstream ofs("d:\\tmp\\bmp2.bmp",ios::binary|ios::out);
  ofs<<bmp8;
 
  ifs.close();
  ofs.close();
  return 0;
}
 
Текущее время: 14:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru