Page 1 of 1

OpenGL texture to ImageMagick

Posted: 2012-07-16T02:08:32-07:00
by julius
Is there possibility to get ImageMagick image from OpenGL texture? I'm developing OpenGL paint app. I'm using ImageMagick to load images and send them to OpenGL textures. Then OpenGL textures are being edited by user, and now I want to be able to save edited textures (opengl view) like image.

Re: OpenGL texture to ImageMagick

Posted: 2012-07-17T16:14:32-07:00
by anthony
How are OpenGl textures stored?

Re: OpenGL texture to ImageMagick

Posted: 2012-07-19T01:04:40-07:00
by julius
Heres my whole code for loading textures

Code: Select all

- (void)uzkraunamImg 
{
    using namespace Magick;
    input_image = strdup([[[NSBundle mainBundle] pathForResource:@"Brush" ofType:@"png"] UTF8String]);
    image.read(input_image);
    image.magick("RGBA");
    image.write(&blob);
    
    input_imageN = strdup([[[NSBundle mainBundle] pathForResource:@"grass" ofType:@"jpg"] UTF8String]);
    imageN.read(input_imageN);
    imageN.magick("RGBA");
    imageN.write(&blobN);
    
    imageG.read(input_imageN);
    imageG.channel(GreenChannel);
    imageG.magick("RGBA");
    imageG.write(&blobG);
    [self createTextures];
}
-(void)createTextures {
    glGenTextures(1, &brushtxt);
    glBindTexture(GL_TEXTURE_2D, brushtxt);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
    glGenerateMipmap(GL_TEXTURE_2D);
    
    glGenTextures(1, &orgtxt);
    glBindTexture(GL_TEXTURE_2D, orgtxt);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
    glGenerateMipmap(GL_TEXTURE_2D);
    
    glGenTextures(1, &graytxt);
    glBindTexture(GL_TEXTURE_2D, graytxt);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
    glGenerateMipmap(GL_TEXTURE_2D);
    [self SetTextureImages];
}
- (void)SetTextureImages
{
    glBindTexture(GL_TEXTURE_2D, brushtxt);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.columns(), image.rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, blob.data());
    
    glBindTexture(GL_TEXTURE_2D, orgtxt);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageN.columns(), imageN.rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, blobN.data());
    
    glBindTexture(GL_TEXTURE_2D, graytxt);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageG.columns(), imageG.rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, blobG.data());
}

Re: OpenGL texture to ImageMagick

Posted: 2012-07-23T21:31:06-07:00
by anthony
I am not that familar with OpenGl. I have used it to do some very basic stuff, but not textures.

However it looks like they are referencing some type of named resource in the form of JPG images. Whether that resource is built-in, or in some library directory, I have no idea. If you can get at the resource then I don't see IM having any problem.

If the resource is read in as a 'blob' (just a file in a byte array) then Im can read the 'blob' into its image structure for processing and back again.