Added implementations for MirrorVertically and MirrorHorizontally
This commit is contained in:
parent
ae92a1cb40
commit
fdc5d6f23f
@ -6,7 +6,7 @@ using namespace Leonetienne::BmpPP;
|
|||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
|
/*
|
||||||
BMP bmp({800, 600}, Colormode::RGB);
|
BMP bmp({800, 600}, Colormode::RGB);
|
||||||
|
|
||||||
for (int x = 0; x < 800; x++)
|
for (int x = 0; x < 800; x++)
|
||||||
@ -21,6 +21,15 @@ int main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bmp.Write("write.bmp");
|
bmp.Write("write.bmp");
|
||||||
|
*/
|
||||||
|
|
||||||
|
BMP bmp("test.bmp");
|
||||||
|
|
||||||
|
//BMP newBmp = bmp.MirrorHorizontally();
|
||||||
|
BMP newBmp = bmp.MirrorVertically();
|
||||||
|
|
||||||
|
if(!newBmp.Write("testwrite.bmp"))
|
||||||
|
std::cerr << "What the hell" << std::endl;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
52
Src/BMP.cpp
52
Src/BMP.cpp
@ -211,6 +211,58 @@ namespace Leonetienne::BmpPP {
|
|||||||
return pixelBuffer;
|
return pixelBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BMP BMP::MirrorHorizontally() const {
|
||||||
|
// Create a new image matching this's metadata
|
||||||
|
BMP bmp(size, colormode);
|
||||||
|
|
||||||
|
// Now copy over the pixels, mirroring it horizontally
|
||||||
|
const std::size_t numChannels = GetNumChannels();
|
||||||
|
for (std::size_t y = 0; y < size.y; y++) {
|
||||||
|
const std::size_t rowIndex = y * size.x * numChannels;
|
||||||
|
|
||||||
|
for (std::size_t x = 0; x < size.x; x++) {
|
||||||
|
const std::size_t pixelIndex = rowIndex + x * numChannels;
|
||||||
|
const std::size_t flippedPixelIndex = rowIndex + (size.x - 1 - x) * numChannels;
|
||||||
|
|
||||||
|
// Copy over the whole pixel
|
||||||
|
std::copy(
|
||||||
|
pixelBuffer.cbegin() + flippedPixelIndex,
|
||||||
|
pixelBuffer.cbegin() + flippedPixelIndex + numChannels,
|
||||||
|
bmp.pixelBuffer.begin() + pixelIndex
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// return it
|
||||||
|
return bmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
BMP BMP::MirrorVertically() const {
|
||||||
|
// Create a new image matching this's metadata
|
||||||
|
BMP bmp(size, colormode);
|
||||||
|
|
||||||
|
const std::size_t numChannels = GetNumChannels();
|
||||||
|
const std::size_t rowLength = size.x * numChannels;
|
||||||
|
|
||||||
|
// Now iterate over all rows, and copy them over, mirroring it vertically
|
||||||
|
for (std::size_t y = 0; y < size.y; y++) {
|
||||||
|
const std::size_t rowIndex = y * rowLength;
|
||||||
|
const std::size_t flippedRowIndex = (size.y - 1 - y) * rowLength;
|
||||||
|
|
||||||
|
// Copy over the whole row
|
||||||
|
std::copy(
|
||||||
|
pixelBuffer.cbegin() + flippedRowIndex,
|
||||||
|
pixelBuffer.cbegin() + flippedRowIndex + rowLength,
|
||||||
|
bmp.pixelBuffer.begin() + rowIndex
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// return it
|
||||||
|
return bmp;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef CHECK_IF_INITIALIZED
|
#undef CHECK_IF_INITIALIZED
|
||||||
|
@ -79,10 +79,10 @@ namespace Leonetienne::BmpPP {
|
|||||||
//! Will compare two images for not being exactly identical regarding resolution, bit depth, and pixel values.
|
//! Will compare two images for not being exactly identical regarding resolution, bit depth, and pixel values.
|
||||||
bool operator!=(const BMP& other) const;
|
bool operator!=(const BMP& other) const;
|
||||||
|
|
||||||
//! Will mirror the image horizontally, and return it as a new image
|
//! Will mirror the image horizontally (flips x axis), and return it as a new image
|
||||||
BMP MirrorHorizontally() const;
|
BMP MirrorHorizontally() const;
|
||||||
|
|
||||||
//! Will mirror the image vertically, and return it as a new image
|
//! Will mirror the image vertically (flips y axis), and return it as a new image
|
||||||
BMP MirrorVertically() const;
|
BMP MirrorVertically() const;
|
||||||
|
|
||||||
//! Will rotate the image by 90deg, clockwise, and return it as a new image
|
//! Will rotate the image by 90deg, clockwise, and return it as a new image
|
||||||
|
Loading…
x
Reference in New Issue
Block a user