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

Увеличить BMP изображение в два раза - C++

Восстановить пароль Регистрация
 
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 51
26.05.2013, 21:29     Увеличить BMP изображение в два раза #1
Дано задание увеличить 8-битное 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
void BMP::x2_zoom()
{
    unsigned int n = this->BMIH.biWidth;
    unsigned int m = this->BMIH.biHeight;
    unsigned int _new_n = this->BMIH.biWidth * 2;
    unsigned int _new_m = this->BMIH.biHeight * 2;
 
    BYTE *buff = new BYTE [n * m];
    file.seekg(this->BMH.bfOffbits + 14, ios::beg);
    for(int i = 0; i < n * m; i ++)
    {
        file.read((char*)&buff[i], sizeof(BYTE));
    }
 
    BYTE *New_2x_Image = new BYTE [_new_m * _new_n];
 
    int i = 0;
    file.seekg(this->BMH.bfOffbits + 14, ios::beg);
    
    for(int i = 0, j = 0; i < n * m, j < _new_n * _new_m; i ++, j += 4)
    {
        New_2x_Image [j] = buff [i];
        New_2x_Image [j + 1] = buff [i];
        New_2x_Image [j + 2] = buff [i];
        New_2x_Image [j + 3] = buff [i];
    }
    this->BMIH.biWidth = _new_n;
    this->BMIH.biHeight = _new_m;
 
    file.seekg(0, ios::beg);
    file.write((char*)&*this, sizeof(*this));
    file.write((char*)New_2x_Image, sizeof(New_2x_Image));
    
    delete[] buff;
    delete[] New_2x_Image;
    
}
И вот этот момент как правильно?
Так?:
C++
1
file.write((char*)&*this, sizeof(*this));
Или так?
C++
1
file.write((char*)this, sizeof(*this));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 21:29     Увеличить BMP изображение в два раза
Посмотрите здесь:

[C++] Все положительные элементы массива, расположенные правее первого нулевого элемента, увеличить в два раза C++
Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза. C++
C++ Увеличить все элементы этого массива начиная с первого положительного элемента в два раза.
C++ Дана последовательность из целых чисел. Все элементы меньше заданного числа, увеличить в два раза
Увеличить в два раза количество пробелов между словами C++
Не записывает в файл (увеличить bmp изображение в 2 раза) C++
C++ Работа с BMP-файлами (класс "8 битное BMP изображение)
Все элементы массива, меньшие заданного числа, увеличить в два раза C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
26.05.2013, 21:42     Увеличить BMP изображение в два раза #2
Должно быть что-то типа
C++
1
2
3
4
5
6
7
8
9
10
for(int i = 0; i < n;i ++)
for(int j = 0; j < m; j ++)
{
     int i1=i*2;
     int j1=j*2;
     New_2x_Image [i1*2*m+j1] = buff [i*m+j];
     New_2x_Image [i1*2*m+j1 + 1] = buff [i*m+j];
     New_2x_Image [(i1+1)*2*m+j1] = buff [i*m+j];
     New_2x_Image [(i1+1)*2*m+j1+1] = buff [i*m+j];
}
Еще надо обратить внимание, что m и n должны быть кратны 4
(строки выровнены на четырехбайтную границу)
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 51
26.05.2013, 22:06  [ТС]     Увеличить BMP изображение в два раза #3
Да, размеры нормально. Для теста беру картинку размерности 16х8

Добавлено через 5 минут
Цитата Сообщение от Eagle123 Посмотреть сообщение
file.seekg(0, ios::beg);
* * file.write((char*)&*this, sizeof(*this));
* * file.write((char*)New_2x_Image, sizeof(New_2x_Image));
Думаю, что ошибка где-то тут, потому что при отладке видно, что все переменные и массивы заполнены правильно, а вот запись обратно в файл не получается, потому что после нее все остается по-старому, ничего не меняется
Yandex
Объявления
26.05.2013, 22:06     Увеличить BMP изображение в два раза
Ответ Создать тему
Опции темы

Текущее время: 03:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru