Tengo un HBITMAP mango de ARGB tipo. Cómo dibujar usando GDI+?

He intentado método:
gráficos.DrawImage(mapa de bits::FromHBITMAP(m_hBitmap, NULL), 0, 0);
Pero no utiliza el canal alfa.

InformationsquelleAutor | 2008-10-08

4 Comentarios

  1. 7

    Tengo una muestra de trabajo:

    //1. Obtener información mediante identificador de mapa de bits: tamaño de la imagen, bits

    BITMAP bmpInfo;
    ::GetObject(m_hBitmap, sizeof(BITMAP), &bmpInfo);
    int cxBitmap = bmpInfo.bmWidth;
    int cyBitmap = bmpInfo.bmHeight;
    void* bits = bmpInfo.bmBits;

    //2. Crear & dibujar el nuevo mapa de bits GDI+ mediante bits con formato de píxel PixelFormat32bppARGB

    Gdiplus::Graphics graphics(dcMemory);
    Gdiplus::Bitmap bitmap(cxBitmap, cyBitmap, cxBitmap*4, PixelFormat32bppARGB, (BYTE*)bits);
    graphics.DrawImage(&bitmap, 0, 0);

  2. 0

    .NET ofrece la estática Imagen.FromHbitmap método. Usted puede utilizar esta imagen y la invocación de DrawImage en el destino Graphics objeto.

    • Este método no dibuja de color transparente. Aquí está la pregunta. Cómo notificar a Gdi+ quiero dibujar exactamente ARGB de mapa de bits?
    • GDI+ objeto de mapa de bits tiene un constructor que toma el Ancho, la Altura y PixelFormat como parámetros. Una vez construido, el mapa de bits será en la profundidad de bits deseada, y que incluyen un canal Alfa si se solicita.
  3. 0

    Ah… pero .Net no uso HBITMAP y GDI+ es una biblioteca de C++ en la cima de la básico de la GDI de Windows, así que estoy asumiendo que usted está utilizando non-.Net C++.

    GDI+ tiene una clase de mapa de bits, que tiene un FromHBITMAP() método.

    Una vez que usted tiene el GDI+ de mapa de bits ejemplo, se puede utilizar con el GDI+ biblioteca.

    Por supuesto, si usted puede escribir el programa en C# con .La red será mucho más fácil.

  4. 0

    He tenido los mismos problemas para conseguir mi canal transparente para el trabajo. En mi caso, yo sabía lo que el color de fondo debe ser utilizado para el área transparente (que era sólida). He utilizado el mapa de bits.GetHBITMAP(..) el método y aprobada en el color de fondo para ser utilizado por el área transparente. Esto era mucho más fácil solución que otros intentos que yo estaba tratando de usar LockBits y volver a crear el mapa de bits con PixelFormat32bppARGB, así como la clonación. En mi caso, el mapa de bits se ignorando el canal alfa desde que fue creado a partir de mapa de bits.FromStream.

    También he tenido algunos problemas extraños con el área de fondo de mi imagen ha cambiado ligeramente. Por ejemplo, en lugar de blanco puro, era blanco como 0xfff7f7. Este fue el caso si yo estaba usando JPG (con los colores mezclados) o con PNG transparente y de colores.

    Ver a mi pregunta y la solución en

    GDI+ DrawImage de un JPG con fondo blanco no es blanco

Dejar respuesta

Please enter your comment!
Please enter your name here