JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
PixelOperations.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <cstdint>
7#include <optional>
8#include <vector>
9
11
20
21namespace hmi {
22
30 int minX = 0;
31 int minY = 0;
32 int maxX = -1;
33 int maxY = -1;
34
36 [[nodiscard]] constexpr bool empty() const noexcept {
37 return maxX < minX || maxY < minY;
38 }
39
40 [[nodiscard]] constexpr int width() const noexcept {
41 return empty() ? 0 : (maxX - minX + 1);
42 }
43
44 [[nodiscard]] constexpr int height() const noexcept {
45 return empty() ? 0 : (maxY - minY + 1);
46 }
47
49 [[nodiscard]] constexpr bool operator==(const PixelRegion& other) const noexcept {
50 return (empty() && other.empty()) || (minX == other.minX && minY == other.minY &&
51 maxX == other.maxX && maxY == other.maxY);
52 }
53};
54
56[[nodiscard]] constexpr bool pixelInBounds(int width, int height, int x, int y) noexcept {
57 return x >= 0 && y >= 0 && x < width && y < height;
58}
59
67[[nodiscard]] constexpr PixelRegion unionPixelRegion(const PixelRegion& a,
68 const PixelRegion& b) noexcept {
69 if (a.empty()) {
70 return b;
71 }
72 if (b.empty()) {
73 return a;
74 }
75 return PixelRegion{
76 a.minX < b.minX ? a.minX : b.minX,
77 a.minY < b.minY ? a.minY : b.minY,
78 a.maxX > b.maxX ? a.maxX : b.maxX,
79 a.maxY > b.maxY ? a.maxY : b.maxY,
80 };
81}
82
91PixelRegion setPixel(DecodedImage& image, int x, int y, std::uint32_t color);
92
103PixelRegion erasePixel(DecodedImage& image, int x, int y);
104
120PixelRegion drawLine(DecodedImage& image, int x0, int y0, int x1, int y1, std::uint32_t color);
121
136PixelRegion eraseLine(DecodedImage& image, int x0, int y0, int x1, int y1);
137
152PixelRegion floodFill(DecodedImage& image, int x, int y, std::uint32_t color);
153
161[[nodiscard]] std::optional<std::uint32_t> pickColor(const DecodedImage& image, int x,
162 int y) noexcept;
163
172[[nodiscard]] std::vector<std::uint32_t> readRegion(const DecodedImage& image,
173 const PixelRegion& region);
174
182void writeRegion(DecodedImage& image, const PixelRegion& region,
183 const std::vector<std::uint32_t>& data);
184
192 int width = 0;
193 int height = 0;
194 std::vector<std::uint32_t> pixels;
195
197 [[nodiscard]] bool empty() const noexcept {
198 return width <= 0 || height <= 0;
199 }
200};
201
211PixelRegion flipHorizontal(DecodedImage& image, const PixelRegion& region);
212
215PixelRegion flipVertical(DecodedImage& image, const PixelRegion& region);
216
228PixelRegion rotateClockwise(DecodedImage& image, const PixelRegion& region);
229
233PixelRegion rotateCounterClockwise(DecodedImage& image, const PixelRegion& region);
234
247PixelRegion moveRegion(DecodedImage& image, const PixelRegion& region, int dx, int dy);
248
255[[nodiscard]] PixelClipboard copyRegion(const DecodedImage& image, const PixelRegion& region);
256
268PixelRegion pasteClipboard(DecodedImage& image, const PixelClipboard& clipboard, int x, int y);
269
270} // namespace hmi
Chargement de textures GPU depuis des fichiers image (EX-REN-041), au travers de QRhi.
Definition AudioEngine.cpp:15
PixelRegion setPixel(DecodedImage &image, int x, int y, std::uint32_t color)
Pose un pixel d'une couleur donnée.
Definition PixelOperations.cpp:70
PixelRegion eraseLine(DecodedImage &image, int x0, int y0, int x1, int y1)
Efface une ligne pleine entre deux positions (même tracé que drawLine, alpha nul plutôt qu'une couleu...
Definition PixelOperations.cpp:93
PixelRegion rotateCounterClockwise(DecodedImage &image, const PixelRegion &region)
Pivote le contenu d'une région d'un quart de tour, sens antihoraire (trois quarts de tour horaires,...
Definition PixelOperations.cpp:261
constexpr PixelRegion unionPixelRegion(const PixelRegion &a, const PixelRegion &b) noexcept
Union de deux régions (la plus petite région couvrant les deux).
Definition PixelOperations.h:67
std::optional< std::uint32_t > pickColor(const DecodedImage &image, int x, int y) noexcept
Couleur du pixel à une position donnée (outil pipette).
Definition PixelOperations.cpp:138
PixelRegion drawLine(DecodedImage &image, int x0, int y0, int x1, int y1, std::uint32_t color)
Trace une ligne pleine entre deux positions (algorithme de Bresenham).
Definition PixelOperations.cpp:88
PixelRegion flipHorizontal(DecodedImage &image, const PixelRegion &region)
Retourne une région horizontalement (miroir gauche-droite), en place.
Definition PixelOperations.cpp:213
void writeRegion(DecodedImage &image, const PixelRegion &region, const std::vector< std::uint32_t > &data)
Écrit des pixels dans une région — inverse de readRegion, utilisé par hmi::PixelHistory pour restaure...
Definition PixelOperations.cpp:160
PixelClipboard copyRegion(const DecodedImage &image, const PixelRegion &region)
Copie les pixels d'une région dans un presse-papiers autonome (ne référence plus image).
Definition PixelOperations.cpp:286
PixelRegion floodFill(DecodedImage &image, int x, int y, std::uint32_t color)
Remplit, de proche en proche, la zone connexe (4-connexité) de même couleur que le pixel de départ.
Definition PixelOperations.cpp:97
PixelRegion pasteClipboard(DecodedImage &image, const PixelClipboard &clipboard, int x, int y)
Colle un presse-papiers dans l'image, coin haut-gauche à (x, y).
Definition PixelOperations.cpp:297
PixelRegion flipVertical(DecodedImage &image, const PixelRegion &region)
Retourne une région verticalement (miroir haut-bas), en place.
Definition PixelOperations.cpp:232
constexpr bool pixelInBounds(int width, int height, int x, int y) noexcept
Definition PixelOperations.h:56
PixelRegion rotateClockwise(DecodedImage &image, const PixelRegion &region)
Pivote le contenu d'une région d'un quart de tour, sens horaire.
Definition PixelOperations.cpp:251
PixelRegion moveRegion(DecodedImage &image, const PixelRegion &region, int dx, int dy)
Déplace le contenu d'une région d'un décalage donné.
Definition PixelOperations.cpp:275
PixelRegion erasePixel(DecodedImage &image, int x, int y)
Efface un pixel (alpha nul), sans changer sa couleur RVB.
Definition PixelOperations.cpp:78
std::vector< std::uint32_t > readRegion(const DecodedImage &image, const PixelRegion &region)
Copie les pixels d'une région, ligne par ligne — capture le « avant » ou l'« après » d'une entrée d'h...
Definition PixelOperations.cpp:145
Contenu copié depuis un tampon (presse-papiers de l'atelier, LOT-54 TACHE-06).
Definition PixelOperations.h:191
bool empty() const noexcept
Definition PixelOperations.h:197
int height
Definition PixelOperations.h:193
std::vector< std::uint32_t > pixels
Definition PixelOperations.h:194
int width
Definition PixelOperations.h:192
Rectangle de pixels modifié par une opération (bornes incluses).
Definition PixelOperations.h:29
int maxY
Definition PixelOperations.h:33
int maxX
maxX < minX (valeur par défaut) : région vide.
Definition PixelOperations.h:32
constexpr bool operator==(const PixelRegion &other) const noexcept
Definition PixelOperations.h:49
constexpr int height() const noexcept
Definition PixelOperations.h:44
constexpr int width() const noexcept
Definition PixelOperations.h:40
int minY
Definition PixelOperations.h:31
int minX
Definition PixelOperations.h:30
constexpr bool empty() const noexcept
Definition PixelOperations.h:36