Bonsoir
Je m'arrache les cheveux depuis un bon moment sur un chargeur d'images tiré d'un tuto et que j'ai modifié pour utiliser Freeimage. Je charge une image grâce à Freeimage puis je veux construire un objet CImage dont le constructeur prend en argument le tableau de pixels mais rien à faire, chaque fois ça termine en SIGSEGV -_-
Le programme crashe au moment où l'objet Image de type CImage est créé, j'imagine qu'il n'apprécie pas le tableau que je lui fournis :/
Voici le code simplifié au maximum :
main.cpp
Image.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #include <iostream> #include <FreeImagePlus.h> #include <SFML/Graphics.hpp> #include "Image.hpp" int main() { fipImage Data; Data.load("/home/antoine/Images/Mark.png", 0); const unsigned char* Pixels = reinterpret_cast<const unsigned char*>(Data.accessPixels()); CImage* Image = new CImage (Pixels, Data.getWidth(), Data.getHeight(), Data.getBitsPerPixel()); sf::RenderWindow App(sf::VideoMode(640, 480, 32), "Window"); App.SetFramerateLimit(60); sf::Image Texture; Texture.LoadFromPixels(Image->getWidth(), Image->getHeight(), Image->getPixels()); sf::Sprite Sprite(Texture); while (App.IsOpened()) { // Process events sf::Event Event; while (App.GetEvent(Event)) { // Close window : exit if (Event.Type == sf::Event::Closed) App.Close(); // Escape key : exit if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape)) App.Close(); } App.Draw(Sprite); // Display window on screen App.Display(); } delete Image; }
Image.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifndef IMAGE_HPP_INCLUDED #define IMAGE_HPP_INCLUDED #include <vector> #include <string> class CImage { public: CImage(const unsigned char* Pixels, int Width, int Height, int BitsPerPixel); ~CImage(); int getHeight (); int getWidth (); const unsigned char* getPixels () const; private: std::vector<unsigned char> m_Pixels; int m_Height; int m_Width; int m_BitsPerPixel; }; #endif // IMAGE_HPP_INCLUDED
Auriez-vous une idée du problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #include "Image.hpp" CImage::CImage(const unsigned char* Pixels, int Width, int Height, int BitsPerPixel) : m_Pixels(Pixels, Pixels + BitsPerPixel*Width*Height), m_Width(Width), m_Height(Height), m_BitsPerPixel(BitsPerPixel) { } CImage::~CImage() { } int CImage::getHeight () { return m_Height; } int CImage::getWidth () { return m_Width; } const unsigned char* CImage::getPixels () const { return &m_Pixels[0]; }
Merci d'avance
Partager