Added readme.md
This commit is contained in:
parent
f70c7782ca
commit
b3d209a9cd
140
readme.md
140
readme.md
@ -1,5 +1,143 @@
|
||||
# BmpPP
|
||||
Run `configure.sh MyAwesomeLibrary` to give your project a name.
|
||||
A simple, easy to use BMP image interface for C++!
|
||||
|
||||
Disclaimer!!:
|
||||
> This is in no way, shape or form complete or compatible with every possible bmp!
|
||||
> It does exactly what I need it to do, and that is to convert most bmp images to pixel buffers, convert between rgb/rgba/bw pixel buffers and write it all back to a bmp image.
|
||||
> I am just publishing this in case someone wants to do said things and does not care about incompatibilities with some bmps.
|
||||
|
||||
## Basic Usage
|
||||
*Assuming:
|
||||
```c++
|
||||
using namespace Leonetienne::BmpPP;
|
||||
using namespace Eule;
|
||||
```
|
||||
|
||||
##### Read image
|
||||
```c++
|
||||
BMP bmp("cute.bmp");
|
||||
|
||||
// or
|
||||
BMP bmp;
|
||||
bmp.Read("cute.bmp");
|
||||
```
|
||||
|
||||
##### Write image
|
||||
```c++
|
||||
bmp.Write("cute.bmp");
|
||||
```
|
||||
|
||||
##### Create a new image
|
||||
```c++
|
||||
// RGBA image
|
||||
BMP bmp(Vector2i(800, 600));
|
||||
|
||||
// RGBA image
|
||||
BMP bmp(Vector2i(800, 600), Colormode::RGBA);
|
||||
|
||||
// RGB image
|
||||
BMP bmp(Vector2i(800, 600), Colormode::RGB);
|
||||
```
|
||||
|
||||
##### Edit pixel data
|
||||
```c++
|
||||
// Set pixel grayscale value
|
||||
bmp.SetPixel(Vector2i(60, 50), 128);
|
||||
|
||||
// Set pixel rgb value
|
||||
bmp.SetPixel(Vector2i(60, 50), 255, 128, 128);
|
||||
|
||||
// Set pixel rgba value
|
||||
bmp.SetPixel(Vector2i(60, 50), 255, 128, 128, 64);
|
||||
```
|
||||
|
||||
##### Get pixel data
|
||||
```c++
|
||||
// Assuming image is RGBA
|
||||
std::uint8_t* pixel = bmp.GetPixel(Vector2i(60, 50));
|
||||
|
||||
std::uint8_t* r = pixel[0];
|
||||
std::uint8_t* g = pixel[1];
|
||||
std::uint8_t* b = pixel[2];
|
||||
std::uint8_t* a = pixel[3];
|
||||
```
|
||||
|
||||
##### Convert between RGB and RGBA
|
||||
```c++
|
||||
// This is RGBA
|
||||
BMP bmp(Vector2i(800, 600), Colormode::RGBA);
|
||||
|
||||
// Now it is RGB
|
||||
bmp.ConvertTo(Colormode::RGB);
|
||||
|
||||
// And vica versa...
|
||||
```
|
||||
|
||||
##### Mirror images
|
||||
```c++
|
||||
// Mirror horizontally
|
||||
BMP mirroredImage_hor = image.MirrorHorizontally();
|
||||
|
||||
// Mirror vertically
|
||||
BMP mirroredImage_ver = image.MirrorVertically();
|
||||
```
|
||||
|
||||
##### Rotate images
|
||||
```c++
|
||||
// Rotate by 90 degrees, clockwise
|
||||
BMP rotatedImage = image.Rotate90degClockwise();
|
||||
|
||||
// Rotate by 90 degrees, counterclockwise
|
||||
BMP rotatedImage = image.Rotate90degCounterclockwise();
|
||||
|
||||
// Rotate by 180 degrees
|
||||
BMP rotatedImage = image.Rotate180deg();
|
||||
```
|
||||
|
||||
##### Crop images
|
||||
```c++
|
||||
// Extract the region topleft={25, 60}, size={150, 200}
|
||||
BMP cropped = bmp.Crop(Vector2i(25, 60), Vector2i(150, 200));
|
||||
```
|
||||
|
||||
##### Fill channels
|
||||
```c++
|
||||
// Want to set the entire ALPHA channel to 255?
|
||||
bmp.FillChannel(3, 255);
|
||||
|
||||
// Obviously: red->0, green->1, blue->2, alpha->3
|
||||
```
|
||||
|
||||
##### Swapping channels
|
||||
```c++
|
||||
// Convert BGR to RGB, by swapping the red and blue channels.
|
||||
bmp.SwapChannels(0, 2);
|
||||
```
|
||||
|
||||
##### Feed in existing pixel buffer
|
||||
```c++
|
||||
// OK, this is a bit more complex, but here's how to do it
|
||||
|
||||
// This is assumed to be an RGBA pixel buffer, formatted like:
|
||||
// RGBARGBARGBARGBARGBARGBARGBA, with pixels in the same row lying next to each other in memory.
|
||||
std::vector<std::uint8_t> yourPixelbuffer;
|
||||
|
||||
// Create a BMP instance with your resolution, and color mode
|
||||
BMP bmp(Vector2i(img_height, img_width), Colormode::RGBA);
|
||||
|
||||
// Quick safety check, that the pixel buffer sizes do indeed match
|
||||
if (yourPixelbuffer.size() != bmp.GetPixelbufferSize())
|
||||
throw "Something is definitely wrong!!!";
|
||||
|
||||
// All good. Let's copy the bytes over
|
||||
std::copy(
|
||||
yourPixelbuffer.cbegin(),
|
||||
yourPixelbuffer.cend(),
|
||||
bmp.data()
|
||||
);
|
||||
|
||||
// Done.
|
||||
```
|
||||
|
||||
# LICENSE
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user