I’ve been trying to set a png icon for my application (both taskbar and title bar) using the following example:
GLFWImage images[2];
images[0] = load_icon("my_icon.png");
images[1] = load_icon("my_icon_small.png");
glfwSetWindowIcon(window, 2, images);
 
The problem here is load_icon does not exist. What does that method look like? How do I create a GLFWImage object from a .png resource? Googling won’t show any viable solutions and nobody seems to know how to do it. I would really appreciate some help. Thank you!
             
            
               
               
               
            
            
           
          
            
            
              The icon format is a raw byte image  which you’ll need to load using an image loader library.
It looks like you can use the excellent std_image library via lwgl 3  to load your image, and then create the GLFWImage from that.
             
            
               
               
               
            
            
           
          
            
            
              This is what I did, still need to get a GLFWImage object from that. Will post it as soon as it’s ready. This work is licensed under MIT.
public class image_parser {
    public static ByteBuffer load_image(String path) throws resource_error {
        ByteBuffer image;
        try (MemoryStack stack = MemoryStack.stackPush()) {
            IntBuffer comp = stack.mallocInt(1);
            IntBuffer w = stack.mallocInt(1);
            IntBuffer h = stack.mallocInt(1);
            image = stbi_load(path, w, h, comp, 4);
            if (image == null) {
                // throw new resource_error("Could not load image resources.");
            }
        }
        return image;
    }
} 
             
            
               
               
               
            
            
           
          
            
            
              Its done and its working, thanks for helping me out, I am posting my full code for others to freely use. This work is licensed under MIT.
Image Parsing class:
public class image_parser {
    public ByteBuffer get_image() {
        return image;
    }
    public int get_width() {
        return width;
    }
    public int get_heigh() {
        return heigh;
    }
    private ByteBuffer image;
    private int width, heigh;
    image_parser(int width, int heigh, ByteBuffer image) {
        this.image = image;
        this.heigh = heigh;
        this.width = width;
    }
    public static image_parser load_image(String path) {
        ByteBuffer image;
        int width, heigh;
        try (MemoryStack stack = MemoryStack.stackPush()) {
            IntBuffer comp = stack.mallocInt(1);
            IntBuffer w = stack.mallocInt(1);
            IntBuffer h = stack.mallocInt(1);
            image = stbi_load(path, w, h, comp, 4);
            if (image == null) {
                // throw new resource_error("Could not load image resources.");
            }
            width = w.get();
            heigh = h.get();
        }
        return new image_parser(width, heigh, image);
    }
}
 
Main class:
private final image_parser resource_01 = image_parser.load_image("icon_01.png");
public void init() {
        if (!glfwInit()) System.out.println("Could not initialise opengl4.5.");
        glfwWindowHint(GLFW_RESIZABLE, 0);
        glfwWindowHint(GLFW_DECORATED, 0);
        int width = 1200;
        int height = 800;
        window = glfwCreateWindow(width, height, "My Window", NULL, NULL);
        if (window == NULL) System.out.println("Could not create our window.");
        glfwSetWindowPos(window, 100, 100);
        glfwShowWindow(window);
        glfwMakeContextCurrent(window);
        
        GLFWImage image = GLFWImage.malloc(); GLFWImage.Buffer imagebf = GLFWImage.malloc(1);
        image.set(resource_01.get_width(), resource_01.get_heigh(), resource_01.get_image());
        imagebf.put(0, image);
        glfwSetWindowIcon(window, imagebf);
    } 
             
            
               
               
              2 Likes 
            
            
           
          
            
            
              Thanks for including your solution!
             
            
               
               
               
            
            
           
          
            
            
              
 ArtemisHD:
 
stbi_load(path, w, h, comp, 4);
 
 
Hello ! 
I studied your solution and get 
stbi_load(path, w, h, comp, 4); … is undefined 
How do i have to handle that ? 
Thanks in advance
             
            
               
               
               
            
            
           
          
            
            
              Hi @appstation ,
welcome to the GLFW forum.
To use the STBImage class  you need to import it in Java.
If you want to load all the functions the easiest way is:
import static org.lwjgl.stb.STBImage.*
 
The static keyword is used here so you don’t have to type the STBImage.stbi_load() but can just type stbi_load().