Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

can a bmp image format handle transparency

I am making this C++ program that has buttons, button containers, chat boxes, etc., and I want to wrap it around by textures.

I want to generate a smooth edge for all the rectangles I made, and I don't want vertex plotting method to do the work for it, since it consumes more CPU usage and not that looks pretty good, and I don't know if it can work with texture coordinates(i.e. glTexCoord(u, v) with glVertex2f(x, y) w/c should only be 4 since it is a quad)

I use to load textures using SDL_LoadBMP() w/c can load only a format of .bmp.(I'm not that sure because it says only LoadBMP there).

So my questions are:

  • can a .bmp format handle transparency? if so, how to do it?

  • can you show me some code samples using SOIL to load image of format .gif or any other formats that can handle image transparency?

  • can a quad handle an irregular/polygons shape like hexagon or star without drawing its background?

additional question

*how to import a primitive textbox that renders through c++ opengl so I can copy the texts there into clipboard? as for chatting session in my program.


I made my own library that draws the text using GL_POINTS and doesn't look good when resizing the window because the points were spread-out. It takes const char* for the text to avoid #include <*string*> because I want my program to be not dependent on core functions of C++.

So the better solution is to draw it using bitmaps.

Some suggest to draw it using images so I really need the transparency thing because I want it to draw using quad only.

like image 389
mr5 Avatar asked Jan 07 '13 11:01

mr5


People also ask

What image format allows for transparency?

Transparency. The GIF and PNG formats also both support transparency. If you need any level of transparency in your image, you must use either a GIF or a PNG. GIF images (and also PNG) support 1-color transparency.

Does BMP have Alpha?

The BMP file format is capable of storing two-dimensional digital images both monochrome and color, in various color depths, and optionally with data compression, alpha channels, and color profiles.

Is BMP or JPEG better quality?

BMP files generally have a higher quality than JPEGs. In a BMP image, each pixel has its own specific color. The file may also contain information like color depth, color profiles, alpha channels, and more. This gives BMP images a higher resolution than JPEG files.


2 Answers

Yes, the bitmap format does support transparency.

It depends on the compression method, the default RGB method supports 24-bit color, but BITFIELDS compression supports 32-bit color (24-bit + alpha channel).

You can read more at http://en.wikipedia.org/wiki/BMP_file_format

I am using it successfully in the Lime project, here is an implementation written in Haxe: https://github.com/openfl/lime/blob/4adb7d638d15612e2542ae3a0ef581a786d21183/src/lime/_internal/format/BMP.hx

like image 143
Joshua Granick Avatar answered Sep 20 '22 11:09

Joshua Granick


This answer only addresses whether a bmp file can handle transparency, and how to load a png file using SOIL, and I think if you look further by inference it shows you how to load a gif file also. According to this wikipedia article, bmp is one file type that supports transparency through an alpha channel. But according to this SO article it doesn't. In my own experience I have not found a way to make bmp transparency work. So theoretically 32bit bmp files are supposed to support transparency, but I doubt it. (Maybe I will eat my words?)

Ok, from the SOIL website, this code tells how to load a png file which handles transparency:

/* load an image file directly as a new OpenGL texture */
 GLuint tex_2d = SOIL_load_OGL_texture
 (
       "img.png"
       SOIL_LOAD_AUTO,
       SOIL_CREATE_NEW_ID,
       SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB |
       SOIL_FLAG_COMPRESS_TO_DXT
 );
like image 26
happy coder Avatar answered Sep 21 '22 11:09

happy coder