feat(01-bmpmafia): added nerdybmp program

This commit is contained in:
2025-02-05 16:31:05 +03:00
commit aac3bb56c8
6 changed files with 103 additions and 0 deletions

2
01-bmpmafia/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
build
samples

6
01-bmpmafia/Makefile Normal file
View File

@ -0,0 +1,6 @@
BUILD_DIR = build
CXX = g++
nerdybmp: src/nerdybmp/main.cpp
@mkdir -p $(BUILD_DIR)
$(CXX) -o build/nerdybmp src/nerdybmp/main.cpp

19
01-bmpmafia/README.md Normal file
View File

@ -0,0 +1,19 @@
# BMPMAFIA
> working with michaelsoft binbows® bitmap format
## 🤓 `nerdybmp`
just prints out some basic `.bmp` file properties
### build
```sh
make nerdybmp
```
### usage
```sh
build/nerdybmp some/path/to/file.bmp
```

View File

@ -0,0 +1,31 @@
#ifndef BMP_HPP
#define BMP_HPP
#include <stdint.h>
#pragma pack(push, 1)
namespace bmp {
struct FileHeader {
uint16_t type;
uint32_t size;
uint16_t reserved1;
uint16_t reserved2;
uint32_t offBits;
};
struct InfoHeader {
uint32_t size;
int32_t width;
int32_t height;
uint16_t planes;
uint16_t bitCount;
uint32_t compression;
uint32_t sizeImage;
int32_t xPixelsPerMeter;
int32_t yPixelsPerMeter;
uint32_t colorsUsed;
uint32_t colorsImportant;
};
}
#pragma pack(pop)
#endif

View File

@ -0,0 +1,38 @@
#include "../../include/bmp.hpp"
#include <fstream>
#include <iostream>
int main(int argc, char *argv[]) {
std::cout << "🤓 nerdybmp\n";
if (argc < 2) {
std::cerr << "🚬 " << argc << " args? we must have more!!\n";
std::cerr << "usage:\n";
std::cerr << "nerdybmp <input_bmp_file>\n";
return 1;
}
std::ifstream file(argv[1], std::ios_base::binary);
if (!file) {
std::cerr << "💀 unable to read the file.. ok bye\n";
return 1;
}
bmp::FileHeader fileHeader;
file.read((char *)&fileHeader, sizeof(fileHeader));
if (fileHeader.type != 0x4D42) {
std::cerr << "💀 we are not cooking: this is NOT a BMP file...\n";
return 1;
}
bmp::InfoHeader infoHeader;
file.read((char *)&infoHeader, sizeof(infoHeader));
std::cout << "📂 opened " << argv[1] << '\n';
std::cout << "🖼️ hello guys today we have a list of top 3 bmp facts:\n";
std::cout << " \033[2mwidth:\033[0m " << infoHeader.width << '\n';
std::cout << " \033[2mheight:\033[0m " << infoHeader.height << '\n';
std::cout << " \033[2mbit count:\033[0m " << infoHeader.bitCount << '\n';
}

7
README.md Normal file
View File

@ -0,0 +1,7 @@
# CompArch
> 4th semester, 2025
## labs
1. [BMPMAFIA](01-bmpmafia/README.md) (WIP)