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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
#1

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

26.05.2013, 21:29. Просмотров 1115. Ответов 2
Метки нет (Все метки)

Дано задание увеличить 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));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 21:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Увеличить BMP изображение в два раза (C++):

Не записывает в файл (увеличить bmp изображение в 2 раза) - C++
Дано задание увеличить bmp изображение в 2 раза. Написал программу, которая по идее, должна делать сие действие (все в классе), но записи в...

Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза. - C++
С++. Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза. Сложновато :sorry:

Увеличить в два раза количество пробелов между словами - C++
увеличить в два раза количество пробелов между словами

Все элементы массива, меньшие заданного числа, увеличить в два раза - C++
Дана последовательность целых чисел,нужно все элементы, меньше заданного числа,увеличить в два раза

Из трёх заданных целых чисел, выбрать нечётные и увеличить их в два раза - C++
Даны три целых числа. Увеличить в два раза нечетные

Всё четные элементы массива заменить на 100, а нечетные увеличить в два раза - C++
Всё парные элементы заменить на 100, а не парные увеличить в два раза Добавлено через 1 минуту Помогите пожалуйста Срочно

2
zss
Модератор
Эксперт С++
6857 / 6419 / 2145
Регистрация: 18.12.2011
Сообщений: 16,859
Завершенные тесты: 1
26.05.2013, 21:42 #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
(строки выровнены на четырехбайтную границу)
1
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
26.05.2013, 22:06  [ТС] #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));
Думаю, что ошибка где-то тут, потому что при отладке видно, что все переменные и массивы заполнены правильно, а вот запись обратно в файл не получается, потому что после нее все остается по-старому, ничего не меняется
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 22:06
Привет! Вот еще темы с ответами:

Увеличить все элементы этого массива начиная с первого положительного элемента в два раза. - C++
Помогите решить в Borland c++ Если можно еще блок-схему Задан массив целых чисел. Увеличить все элементы этого массива начиная с...

Дана последовательность из целых чисел. Все элементы меньше заданного числа, увеличить в два раза - C++
дана последовательность из целых чисел, все элементы меньше заданного числа, увеличить в два раза

Все положительные элементы массива, расположенные правее первого нулевого элемента, увеличить в два раза - C++
Все положительные элементы массива а1, а2 , ..., а20, расположенные правее первого нулевого элемента, увеличить в два раза

Циклы: каждое простое число последовательности увеличить в два раза, посчитать количество простых чисел - C++
Вводится последовательность из N целых чисел. Каждое простое число последовательности увеличить в два раза, посчитать количество простых...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru