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

Не могу найти ошибку в коде. BMP файл, поворот на 90 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка при использовании типа ifstream http://www.cyberforum.ru/cpp-beginners/thread647842.html
Заголовочный файл "user.h" #pragma once class User { public: void Read(ifstream& data); }; Файл "user.cpp" #include <fstream>
C++ Сортировка массива Дан массив, элементы которого равны либо 1 либо 2. Отсортировать таким образом, чтобы за каждой единицей следовала двойка, причём если таких элементов больше, они выписывались в конец. Например... http://www.cyberforum.ru/cpp-beginners/thread647832.html
Функция для узнавания пути к системной папке C++
Я на басике с помощью какой-то функции получал стринг-строку какой угодно папки: будь то раб стол или же апплиикатион дата. С переходом на с++ я во-первых забыл саму функцию, методом тыка я бы ее...
C++ error C2512: no appropriate default constructor available, несмотря на наличие конструктора по умолчанию
Вот код: class University { string name; Human *chief; public: vector<Faculty> subList;
C++ Проблемы с C++ http://www.cyberforum.ru/cpp-beginners/thread647829.html
Вот в универе дали код проги и сказали розабраться и обьяснить что это как оно работает и с чем его едять. Помогите разобраться что это вообще.Я чайник в СИ, ничего не понимаю=( //...
C++ Нужно подправить код и сделать dll Всем привет. кто может оказать помощь такого плана - есть исходники одной проги на с++ (калькулятор для одной игры). нужно подправить их и скомпилировать в виде dll, чтобы в последствии можно было... подробнее

Показать сообщение отдельно
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
07.09.2012, 00:18
Я имел в виду вращение по часовой стрелке.

Добавлено через 29 минут
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
#include <fstream>
#include <string.h> //  memcpy
 
namespace Bitmap
{
#   pragma pack( push, 1 )
    struct Header
    {
        unsigned short bitmap;
        unsigned int fileSizeLow;
        unsigned int fileSizeHigh;
        unsigned int headerSize;
        unsigned int unknown2;
        unsigned int width;
        unsigned int height;
        unsigned short unknown3;
        unsigned short depth;
        unsigned int unknown4;
        unsigned int bitmapSize;
        unsigned int unknown5;
        unsigned int unknown6;
        unsigned int unknown7;
        unsigned int unknown8;
    };
#   pragma pack( pop )
}
 
bool rotateImage90ClockWise( std::string inFileName, std::string outFileName );
 
bool rotateImage90ClockWise( std::string inFileName, std::string outFileName )
{
    std::ifstream in( inFileName.c_str(), std::ios::in | std::ios::binary );
    if ( not in.is_open() ) {
        return false;
    }
    Bitmap::Header hdrIn;
    //  Читаем заголовок из входного файла
    in.read( reinterpret_cast< char* >( &hdrIn ), sizeof( Bitmap::Header ) );
 
    //  Работаем только с RGB_888 файлами
    if ( hdrIn.depth != 24 ) {
        in.close();
        return false;
    }
 
    //  Копируем заголовок входного файла в заголовок выходного файла
    Bitmap::Header hdrOut;
    memcpy( &hdrOut, &hdrIn, sizeof( Bitmap::Header ) );
    //  Переворачиваем картинку
    hdrOut.width = hdrIn.height;
    hdrOut.height = hdrIn.width;
    //  Вычисляем новую длину строки с учетом выравнивания
    unsigned rowLength = hdrOut.width * hdrOut.depth / 8 + hdrOut.width % 4;
    //  Вычисляем новый размер изображения
    hdrOut.bitmapSize = rowLength * hdrOut.height;
    //  Устанавливаем новый размер файла
    hdrOut.fileSizeLow = hdrOut.bitmapSize + hdrOut.headerSize;
 
    //  Создаем массив для хранения преобразованного изображения
    char* dataOut = new char[ hdrOut.bitmapSize ];
    //  А сюда будем читать каждый пиксель из входного файла
    char color[3];
 
    for ( unsigned i = 0; i < hdrIn.height; ++i ) {
        for ( unsigned j = 0; j < hdrIn.width; ++j ) {
            //  Читаем пиксель
            in.read( color, sizeof( color ) );
            //  Копируем по нужному адресу в выходное изображение
            memcpy( &dataOut[ ( hdrOut.height - j - 1 ) * rowLength + i * 3 ],
                color, sizeof( color ) );
        }
        //  Пропускаем лишние байты
        if ( int overHead = hdrIn.width % 4 ) {
            in.seekg( overHead, std::ios::cur );
        }
    }
 
    std::ofstream out( outFileName.c_str(), std::ios::out | std::ios::binary );
    if ( not out.is_open() ) {
        in.close();
        return false;
    }
 
    out.write( reinterpret_cast< char* >( &hdrOut ), sizeof( Bitmap::Header ) );
    out.write( dataOut, hdrOut.bitmapSize );
    out.close();
    in.close();
 
    return true;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru