Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Graphics
  4. CreateDIBitmap with 32bits RGBA data

CreateDIBitmap with 32bits RGBA data

Scheduled Pinned Locked Moved Graphics
graphicshelpquestion
12 Posts 3 Posters 9 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Mark Salsbery

    I know people argue with me here about this, but there really is very little support for ARGB in the old GDI bitmaps. Some functions may honor the alpha channel but many ignore it. The exception is DIBSections... Try CreateDIBSection instead - I think you'll find much more consistent results with your 32bpp ARGB bitmaps :) Mark

    Mark Salsbery Microsoft MVP - Visual C++ :java:

    V Offline
    V Offline
    Vlasta_
    wrote on last edited by
    #3

    Thanks for the answer. I have tried it, but unfortunately, the same "heuristics" applies to CreateDIBSection as well. I ended up using CreateIconFromResourceEx & DrawIconEx combination. Sounds a bit strange for such a "simple" task as displaying a RGBA image data...

    M 1 Reply Last reply
    0
    • V Vlasta_

      Thanks for the answer. I have tried it, but unfortunately, the same "heuristics" applies to CreateDIBSection as well. I ended up using CreateIconFromResourceEx & DrawIconEx combination. Sounds a bit strange for such a "simple" task as displaying a RGBA image data...

      M Offline
      M Offline
      Mark Salsbery
      wrote on last edited by
      #4

      Vlasta_ wrote:

      but unfortunately, the same "heuristics" applies to CreateDIBSection as well.

      Hmm, I guess that depends on how you display the bitmap. There's not many choices for that in GDI with ARGB data either.

      Vlasta_ wrote:

      I ended up using CreateIconFromResourceEx & DrawIconEx combination.

      Ok, whatever works :) I personally prefer to use GDI+ for ARGB over something like that. Cheers, Mark

      Mark Salsbery Microsoft MVP - Visual C++ :java:

      M V 2 Replies Last reply
      0
      • M Mark Salsbery

        Vlasta_ wrote:

        but unfortunately, the same "heuristics" applies to CreateDIBSection as well.

        Hmm, I guess that depends on how you display the bitmap. There's not many choices for that in GDI with ARGB data either.

        Vlasta_ wrote:

        I ended up using CreateIconFromResourceEx & DrawIconEx combination.

        Ok, whatever works :) I personally prefer to use GDI+ for ARGB over something like that. Cheers, Mark

        Mark Salsbery Microsoft MVP - Visual C++ :java:

        M Offline
        M Offline
        Michael Dunn
        wrote on last edited by
        #5

        Agreed, I'm using GDI+ for 32bpp bitmaps in a project now and it's worked just fine.

        --Mike-- Visual C++ MVP :cool: LINKS~! PimpFish | CP SearchBar v3.0 | C++ Forum FAQ "That's what's great about doing user interface work. No matter what you do, people will say that what you did was idiotic." -- Raymond Chen

        1 Reply Last reply
        0
        • M Mark Salsbery

          Vlasta_ wrote:

          but unfortunately, the same "heuristics" applies to CreateDIBSection as well.

          Hmm, I guess that depends on how you display the bitmap. There's not many choices for that in GDI with ARGB data either.

          Vlasta_ wrote:

          I ended up using CreateIconFromResourceEx & DrawIconEx combination.

          Ok, whatever works :) I personally prefer to use GDI+ for ARGB over something like that. Cheers, Mark

          Mark Salsbery Microsoft MVP - Visual C++ :java:

          V Offline
          V Offline
          Vlasta_
          wrote on last edited by
          #6

          Hmmm... I'd like to have the applications compatible with many Windows versions (including Windows 98 and NT4). It is OK, if things look ugly on the older versions, but the application should run. So, I was drawing using an imagelist with this single bitmap. Maybe the optimization was inside the image list.

          V M 2 Replies Last reply
          0
          • V Vlasta_

            Hmmm... I'd like to have the applications compatible with many Windows versions (including Windows 98 and NT4). It is OK, if things look ugly on the older versions, but the application should run. So, I was drawing using an imagelist with this single bitmap. Maybe the optimization was inside the image list.

            V Offline
            V Offline
            Vlasta_
            wrote on last edited by
            #7

            gdiplus could do it, but...it would increase the size of the installer too much for just this simple task. and who knows, maybe it will have the same problem ;-) (it is built upon the classic gdi, isn't it?) besides I like agg better for the vector stuff ...but thanks for the recommendation, it is a good advice, my needs are just a bit special.

            M 1 Reply Last reply
            0
            • V Vlasta_

              gdiplus could do it, but...it would increase the size of the installer too much for just this simple task. and who knows, maybe it will have the same problem ;-) (it is built upon the classic gdi, isn't it?) besides I like agg better for the vector stuff ...but thanks for the recommendation, it is a good advice, my needs are just a bit special.

              M Offline
              M Offline
              Mark Salsbery
              wrote on last edited by
              #8

              Vlasta_ wrote:

              it is built upon the classic gdi, isn't it?

              No. It is an extension. It does a lot of stuff GDI does not. :) Mark

              Mark Salsbery Microsoft MVP - Visual C++ :java:

              1 Reply Last reply
              0
              • V Vlasta_

                Hmmm... I'd like to have the applications compatible with many Windows versions (including Windows 98 and NT4). It is OK, if things look ugly on the older versions, but the application should run. So, I was drawing using an imagelist with this single bitmap. Maybe the optimization was inside the image list.

                M Offline
                M Offline
                Mark Salsbery
                wrote on last edited by
                #9

                As long as you found a solution, there's nothing wrong with that! :) As for the imagelist, maybe a ILC_COLOR32 imagelist would work, since that uses a dibsection internally, but I don't see any support to render an image from the imagelist using the alpha channel values. Mark

                Mark Salsbery Microsoft MVP - Visual C++ :java:

                V 1 Reply Last reply
                0
                • M Mark Salsbery

                  As long as you found a solution, there's nothing wrong with that! :) As for the imagelist, maybe a ILC_COLOR32 imagelist would work, since that uses a dibsection internally, but I don't see any support to render an image from the imagelist using the alpha channel values. Mark

                  Mark Salsbery Microsoft MVP - Visual C++ :java:

                  V Offline
                  V Offline
                  Vlasta_
                  wrote on last edited by
                  #10

                  yes, I was using ILC_COLOR32 and it worked correctly in all cases except when every pixels' alpha was 0. So the weird behavior only appeared in this single case, it was enough to change the alpha of the first pixel to 1 and it suddenly started to work as expected. That's why I was calling it "optimization" ;-). I believe it is worth mentioning somewhere in the documentation... something like: BTW, dear Windows user if you create completely transparent 32-bits bitmap, we will ignore the alpha channel.

                  M 1 Reply Last reply
                  0
                  • V Vlasta_

                    yes, I was using ILC_COLOR32 and it worked correctly in all cases except when every pixels' alpha was 0. So the weird behavior only appeared in this single case, it was enough to change the alpha of the first pixel to 1 and it suddenly started to work as expected. That's why I was calling it "optimization" ;-). I believe it is worth mentioning somewhere in the documentation... something like: BTW, dear Windows user if you create completely transparent 32-bits bitmap, we will ignore the alpha channel.

                    M Offline
                    M Offline
                    Mark Salsbery
                    wrote on last edited by
                    #11

                    Vlasta_ wrote:

                    That's why I was calling it "optimization"

                    Not a very optimal optimization. :) What function were you using to draw the bitmap? I'd like to play with that a bit. Mark

                    Mark Salsbery Microsoft MVP - Visual C++ :java:

                    V 1 Reply Last reply
                    0
                    • M Mark Salsbery

                      Vlasta_ wrote:

                      That's why I was calling it "optimization"

                      Not a very optimal optimization. :) What function were you using to draw the bitmap? I'd like to play with that a bit. Mark

                      Mark Salsbery Microsoft MVP - Visual C++ :java:

                      V Offline
                      V Offline
                      Vlasta_
                      wrote on last edited by
                      #12

                      With ImageList_Draw. Hm, "optimization" is not a good word. Older Windows did not support alpha at all and when the support was introduced, the functions were probably extended to handle it. But, I assume, due to compatibility issues someone decided to incorporate this "optimization" and when 32bit bitmap is used and it is completely transparent, it kicks in.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups