commit aac3bb56c80af26ed7826f7d55ba5383db984e3d Author: Mark Zheleznyakov Date: Wed Feb 5 16:31:05 2025 +0300 feat(01-bmpmafia): added nerdybmp program diff --git a/01-bmpmafia/.gitignore b/01-bmpmafia/.gitignore new file mode 100644 index 0000000..8ab0005 --- /dev/null +++ b/01-bmpmafia/.gitignore @@ -0,0 +1,2 @@ +build +samples diff --git a/01-bmpmafia/Makefile b/01-bmpmafia/Makefile new file mode 100644 index 0000000..e8a2cc4 --- /dev/null +++ b/01-bmpmafia/Makefile @@ -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 diff --git a/01-bmpmafia/README.md b/01-bmpmafia/README.md new file mode 100644 index 0000000..694a78c --- /dev/null +++ b/01-bmpmafia/README.md @@ -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 +``` diff --git a/01-bmpmafia/include/bmp.hpp b/01-bmpmafia/include/bmp.hpp new file mode 100644 index 0000000..be62045 --- /dev/null +++ b/01-bmpmafia/include/bmp.hpp @@ -0,0 +1,31 @@ +#ifndef BMP_HPP +#define BMP_HPP +#include + +#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 + diff --git a/01-bmpmafia/src/nerdybmp/main.cpp b/01-bmpmafia/src/nerdybmp/main.cpp new file mode 100644 index 0000000..9aede0a --- /dev/null +++ b/01-bmpmafia/src/nerdybmp/main.cpp @@ -0,0 +1,38 @@ +#include "../../include/bmp.hpp" +#include +#include + +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 \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'; +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..ba104e9 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# CompArch + +> 4th semester, 2025 + +## labs + +1. [BMPMAFIA](01-bmpmafia/README.md) (WIP)