Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Объясните человеческим языком конструктор переноса https://www.cyberforum.ru/ cpp-beginners/ thread2583786.html
Мне нужно написать конструктор переноса для односвязного списка с разными условиями, я не понимаю когда он должен вызываться в программе, она работает и так и что он вообще должен делать. Про r-value...
C++ Вывести шаблонный класс в файл
Как в Вывести шаблонный класс в файл?
Запись структуры в файл C++
Приветствую, о знатоки всея C++. Не могу понять, в чём ошибка. По условию задачи мне необходимо написать программу, которая формирует текстовый файл и заносит в него информацию о книгах (автор,...
C++ Instance реализация Как можно реализовать instance в с++ в шаблонных классах? https://www.cyberforum.ru/ cpp-beginners/ thread2583742.html
C++ Instanced https://www.cyberforum.ru/ cpp-beginners/ thread2583717.html
Что такое instanced? Это класс в классе? Или что?
массив в условии - if C++
in main(братья по оружию)! Снова застрял Изучаю функцию - strcat(); Не срабатывает вот это условие - if(s1 == "рассветзакат") char s1, s2; cout << "\n когда солнце встает, как это...
Неактивна кнопка компиляции. Что делать? C++
Подскажите, пожалуйста...Я вот работаю в программе Dev c++ и никак не могу скомпилировать программу, так как сама кнопка компиляции не активна?? В чём может быть проблема??
C++ Найти катет прямоугольного треугольника Найти катет прямоугольного треугольника, если известна гипотенуза и прилежа-щий к искомому катету угол. Величину угла вводить в градусах. Ответ дать с точ-ность до 2-х знаков после запятой. https://www.cyberforum.ru/ cpp-beginners/ thread2583705.html
C++ Из букв строки s сформировать строку s1 ,из цифр - строку s2 https://www.cyberforum.ru/ cpp-beginners/ thread2583703.html
с клавиатуры вводиться строка s,состоящая из букв и цифр. из букв строки s сформировать строку s1 ,из цифр s2
C++ Найти среднее арифметическое элементов заданного столбца матрицы n=7 m=4a=7 b=17 Найти среднее арифметическое елементов заданого столбика( ввод с клавиатуры) https://www.cyberforum.ru/ cpp-beginners/ thread2583701.html
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 63
0

Нужно написать алгоритм сжатия бмп файла

13.02.2020, 20:15. Просмотров 171. Ответов 1
Метки (Все метки)

Код делает картину черно былой, понимаю, что это происходит через палитру , но как - понять не могу. Нужно сжать в соотношении 8 к 1 пикселей
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
#include <windows.h>
#include <iostream>
#include <string>
 
using namespace std;
 
void main()
{
    string sFileName;
    BITMAPFILEHEADER bmpFileHeader;
    BITMAPINFOHEADER bmpInfoHeader;
    int Width, Height;
    RGBQUAD Palette[256];
    RGBTRIPLE *inBuf;
    BYTE *outBuf;
    HANDLE hInputFile, hOutFile;
    DWORD RW;
 
    cout << "Enter the full name, please: ";
    cin >> sFileName;
 
    hInputFile = CreateFile(sFileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if (hInputFile == INVALID_HANDLE_VALUE)
    {
        cout << "incorrect filename " << endl;
        return;
    }
        
    hOutFile = CreateFile("Result.bmp", GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL);
    if (hOutFile == INVALID_HANDLE_VALUE)
    {
        CloseHandle(hInputFile);
        cout << "Result.bmp already exists" << endl;
        return;
    }
 
    // Считываем инфу
    ReadFile(hInputFile, &bmpFileHeader, sizeof(bmpFileHeader), &RW, NULL);
    ReadFile(hInputFile, &bmpInfoHeader, sizeof(bmpInfoHeader), &RW, NULL);
 
    // Установим указатель на начало растра
    SetFilePointer(hInputFile, bmpFileHeader.bfOffBits, NULL, FILE_BEGIN);
    Width = bmpInfoHeader.biWidth;
    Height = bmpInfoHeader.biHeight;
 
    // Выделим память
    inBuf = new RGBTRIPLE[Width];
    outBuf = new BYTE[Width];
 
    // Заполним заголовки
    bmpFileHeader.bfOffBits = sizeof(bmpFileHeader) + sizeof(bmpInfoHeader) + 1024;
    bmpInfoHeader.biBitCount = 8;
    bmpFileHeader.bfSize = bmpFileHeader.bfOffBits + Width * Height + Height * (3 * Width % 4);
 
    // Запишем заголовки
    WriteFile(hOutFile, &bmpFileHeader, sizeof(bmpFileHeader), &RW, NULL);
    WriteFile(hOutFile, &bmpInfoHeader, sizeof(bmpInfoHeader), &RW, NULL);
    // Палитра черно-белая
    for (int i = 0; i < 256; i++)
    {
        Palette[i].rgbBlue = i;
        Palette[i].rgbGreen = i;
        Palette[i].rgbRed = i;
    }
    WriteFile(hOutFile, Palette, 256 * sizeof(RGBQUAD), &RW, NULL);
 
    // Начнем преобразовывать
    for (int i = 0; i < Height; i++)
    {
        ReadFile(hInputFile, inBuf, sizeof(RGBTRIPLE) * Width, &RW, NULL);
        for (int j = 0; j < Width; j++)
            outBuf[j] = 0.3*inBuf[j].rgbtRed + 0.59*inBuf[j].rgbtGreen + 0.11*inBuf[j].rgbtBlue;
 
        WriteFile(hOutFile, outBuf, sizeof(BYTE) * Width, &RW, NULL);
 
        // Пишем мусор для выравнивания
        //WriteFile(hOutFile, Palette, (3 * Width) % 4, &RW, NULL);
        //SetFilePointer(hInputFile, Width % 4, NULL, FILE_CURRENT);
    }
 
    delete[] inBuf;
    delete[] outBuf;
    CloseHandle(hInputFile);
    CloseHandle(hOutFile);
 
    cout << "Updating has come to the end successfully!";
    system("pause");
}


Вернуться к обсуждению:
Нужно написать алгоритм сжатия бмп файла
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2020, 20:15
Готовые ответы и решения:

написать код для создания бмп файла заданного размера си++
как написать код для создания бмп файла,размеры задаем сами.в последующем применяем для его...

Как написать лучший алгоритм сжатия
Проснулся сегодня в 5 часов утра, приснилось что я алгоритм сжатия данных придумал, да такой, что...

Написать простой алгоритм сжатия для строки
Написать простой алгоритм сжатия для строки. Например, строка {Helllllo Wooooorld} должна быть...

Написать простой алгоритм сжатия для строки
2. Написать простой алгоритм сжатия для строки. Так, например, строка Helllllo Wooooorld! Может...

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