Alpha blending un mapa de bits
el Uso de AlphaBlend función en Delphi
la mezcla Alfa se utiliza para mostrar un alfa de mapa de bits, que es un
mapa de bits que se ha transparente o semi-transparente píxeles.
además De rojo, verde y azul de los canales de color, cada píxel
en un alfa de mapa de bits tiene una transparencia componente conocido como el canal alfa. El canal alfa normalmente contiene tantos bits como un canal de color. Por ejemplo, un canal alfa de 8 bits puede representar 256 niveles de transparencia, de 0 (toda la imagen en mapa de bits transparente) a 255 (todo el mapa de bits es opaco). Alpha blending mecanismos se invocan llamando AlphaBlend función. El AlphaBlend función muestra los mapas de bits que se han transparentes o semitransparentes píxeles. No es compatible con Microsoft Windows 95 o en las versiones de Microsoft Windows NT antes de Microsoft Windows 2000.
El siguiente ejemplo de código se divide una ventana en tres áreas horizontales. A continuación, se dibuja una mezcla alfa de mapa de bits en cada una de las áreas de la ventana.
const
AC_SRC_ALPHA = $1
procedimiento DrawAlphaBlend (hWnd : HWND hdcwnd : HDC)
var
& nbsp & nbsp & nbsp & nbsp Ahdc : HDC // identificador de la DC vamos a crear
& nbsp & nbsp & nbsp & nbsp bf : BLENDFUNCTION // estructura para la mezcla alfa
& nbsp & nbsp & nbsp & nbsp Ahbitmap : HBITMAP, / / identificador de mapa de bits
& nbsp & nbsp & nbsp & nbsp imc : BITMAPINFO // encabezado de mapa de bits
& nbsp & nbsp & nbsp & nbsp pvBits : puntero // puntero a la sección DIB
& nbsp & nbsp & nbsp & nbsp ulWindowWidth,
& nbsp & nbsp & nbsp & nbsp ulWindowHeight : ULONG // ancho de la ventana/de altura
& nbsp & nbsp & nbsp & nbsp ulBitmapWidth,
& nbsp & nbsp & nbsp & nbsp ulBitmapHeight : ULONG // mapa de bits de anchura/altura
& nbsp & nbsp & nbsp & nbsp rt : TRect // se utiliza para obtener las dimensiones de la ventana
begin
& nbsp & nbsp & nbsp & nbsp // obtener las dimensiones de la ventana
& nbsp & nbsp & nbsp & nbsp GetClientRect(hWnd, rt)
& nbsp & nbsp & nbsp & nbsp // calcular el ancho de la ventana/de altura
& nbsp & nbsp & nbsp & nbsp ulWindowWidth := rt.derecho - rt.a la izquierda
& nbsp & nbsp & nbsp & nbsp ulWindowHeight := rt.parte inferior - rt.la parte superior
& nbsp & nbsp & nbsp & nbsp // asegúrese de que por lo menos algunos de tamaño de la ventana
& nbsp & nbsp & nbsp & nbsp if ((ulWindowWidth = 0 ) y (ulWindowHeight=0)) a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp salida
& nbsp & nbsp & nbsp & nbsp // dividir la ventana en 3 áreas horizontales
& nbsp & nbsp & nbsp & nbsp ulWindowHeight := trunc(ulWindowHeight / 3)
& nbsp & nbsp & nbsp & nbsp; / / crear un DC para nuestro mapa de bits & la fuente DC para AlphaBlend
& nbsp & nbsp & nbsp & nbsp Ahdc := CreateCompatibleDC(hdcwnd)
& nbsp & nbsp & nbsp & nbsp // cero de la memoria para el mapa de bits de información
& nbsp & nbsp & nbsp & nbsp ZeroMemory(@imc, sizeof(BITMAPINFO))
& nbsp & nbsp & nbsp & nbsp // configuración de mapa de bits de información
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biSize := sizeof(BITMAPINFOHEADER)
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2)
& nbsp & nbsp & nbsp & nbsp ulBitmapWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2)
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2)
& nbsp & nbsp & nbsp & nbsp ulBitmapHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2)
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.los biplanos := 1
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biBitCount := 32 // cuatro de 8 bits componentes
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biCompression := BI_RGB
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biSizeImage := ulBitmapWidth * ulBitmapHeight * 4
& nbsp & nbsp & nbsp & nbsp // crear nuestra sección DIB y seleccione el mapa de bits en el dc
& nbsp & nbsp & nbsp & nbsp Ahbitmap := CreateDIBSection(Ahdc, imc, DIB_RGB_COLORS, pvBits, 0, 0)
& nbsp & nbsp & nbsp & nbsp SelectObject(Ahdc, Ahbitmap)
& nbsp & nbsp & nbsp & nbsp bf.BlendOp := AC_SRC_OVER
& nbsp & nbsp & nbsp & nbsp bf.BlendFlags := 0
& nbsp & nbsp & nbsp & nbsp bf.SourceConstantAlpha := $7f // la mitad de 0xff = 50% de transparencia
& nbsp & nbsp & nbsp & nbsp bf.AlphaFormat := 0 // ignora el origen de canal alfa
& nbsp & nbsp & nbsp & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5), trunc(ulWindowHeight/5),
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ulBitmapWidth, ulBitmapHeight,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf)
& nbsp & nbsp & nbsp & nbsp bf.BlendOp := AC_SRC_OVER
& nbsp & nbsp & nbsp & nbsp bf.BlendFlags := 0
& nbsp & nbsp & nbsp & nbsp bf.AlphaFormat := AC_SRC_ALPHA // uso de la fuente de alfa
& nbsp & nbsp & nbsp & nbsp bf.SourceConstantAlpha := $ff // opaco (deshabilitar la constante alfa)
& nbsp & nbsp & nbsp & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
& nbsp & nbsp & nbsp & nbsp & nbsp trunc(ulWindowHeight/5 ulWindowHeight), ulBitmapWidth, ulBitmapHeight,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf)
& nbsp & nbsp & nbsp & nbsp bf.BlendOp := AC_SRC_OVER
& nbsp & nbsp & nbsp & nbsp bf.BlendFlags := 0
& nbsp & nbsp & nbsp & nbsp bf.AlphaFormat := 0
& nbsp & nbsp & nbsp & nbsp bf.SourceConstantAlpha := $3A
& nbsp & nbsp & nbsp & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp trunc(ulWindowHeight/5 2*ulWindowHeight), ulBitmapWidth,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ulBitmapHeight, bf)
& nbsp & nbsp & nbsp & nbsp // hacer limpieza
& nbsp & nbsp & nbsp & nbsp DeleteObject(Ahbitmap)
& nbsp & nbsp & nbsp & nbsp Deleteobject(Ahdc)
fin
Alpha blending un mapa de bits
Alpha blending un mapa de bits : Multi-millones de consejos para hacer su vida mas facil.
el Uso de AlphaBlend funcion en Delphi
la mezcla Alfa se utiliza para mostrar un alfa de mapa de bits, que es un
mapa de bits que se ha transparente o semi-transparente pixeles.
ademas De rojo, verde y azul de los canales de color, cada pixel
en un alfa de mapa de bits tiene una transparencia componente conocido como el canal alfa. El canal alfa normalmente contiene tantos bits como un canal de color. Por ejemplo, un canal alfa de 8 bits puede representar 256 niveles de transparencia, de 0 (toda la imagen en mapa de bits transparente) a 255 (todo el mapa de bits es opaco). Alpha blending mecanismos se invocan llamando AlphaBlend funcion. El AlphaBlend funcion muestra los mapas de bits que se han transparentes o semitransparentes pixeles. No es compatible con Microsoft Windows 95 o en las versiones de Microsoft Windows NT antes de Microsoft Windows 2000.
El siguiente ejemplo de codigo se divide una ventana en tres areas horizontales. A continuacion, se dibuja una mezcla alfa de mapa de bits en cada una de las areas de la ventana.
const
AC_SRC_ALPHA = $1
procedimiento DrawAlphaBlend (hWnd : HWND hdcwnd : HDC)
var
& nbsp & nbsp & nbsp & nbsp Ahdc : HDC // identificador de la DC vamos a crear
& nbsp & nbsp & nbsp & nbsp bf : BLENDFUNCTION // estructura para la mezcla alfa
& nbsp & nbsp & nbsp & nbsp Ahbitmap : HBITMAP, / / identificador de mapa de bits
& nbsp & nbsp & nbsp & nbsp imc : BITMAPINFO // encabezado de mapa de bits
& nbsp & nbsp & nbsp & nbsp pvBits : puntero // puntero a la seccion DIB
& nbsp & nbsp & nbsp & nbsp ulWindowWidth,
& nbsp & nbsp & nbsp & nbsp ulWindowHeight : ULONG // ancho de la ventana/de altura
& nbsp & nbsp & nbsp & nbsp ulBitmapWidth,
& nbsp & nbsp & nbsp & nbsp ulBitmapHeight : ULONG // mapa de bits de anchura/altura
& nbsp & nbsp & nbsp & nbsp rt : TRect // se utiliza para obtener las dimensiones de la ventana
begin
& nbsp & nbsp & nbsp & nbsp // obtener las dimensiones de la ventana
& nbsp & nbsp & nbsp & nbsp GetClientRect(hWnd, rt)
& nbsp & nbsp & nbsp & nbsp // calcular el ancho de la ventana/de altura
& nbsp & nbsp & nbsp & nbsp ulWindowWidth := rt.derecho - rt.a la izquierda
& nbsp & nbsp & nbsp & nbsp ulWindowHeight := rt.parte inferior - rt.la parte superior
& nbsp & nbsp & nbsp & nbsp // asegurese de que por lo menos algunos de tamaño de la ventana
& nbsp & nbsp & nbsp & nbsp if ((ulWindowWidth = 0 ) y (ulWindowHeight=0)) a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp salida
& nbsp & nbsp & nbsp & nbsp // dividir la ventana en 3 areas horizontales
& nbsp & nbsp & nbsp & nbsp ulWindowHeight := trunc(ulWindowHeight / 3)
& nbsp & nbsp & nbsp & nbsp; / / crear un DC para nuestro mapa de bits & la fuente DC para AlphaBlend
& nbsp & nbsp & nbsp & nbsp Ahdc := CreateCompatibleDC(hdcwnd)
& nbsp & nbsp & nbsp & nbsp // cero de la memoria para el mapa de bits de informacion
& nbsp & nbsp & nbsp & nbsp ZeroMemory(@imc, sizeof(BITMAPINFO))
& nbsp & nbsp & nbsp & nbsp // configuracion de mapa de bits de informacion
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biSize := sizeof(BITMAPINFOHEADER)
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2)
& nbsp & nbsp & nbsp & nbsp ulBitmapWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2)
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2)
& nbsp & nbsp & nbsp & nbsp ulBitmapHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2)
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.los biplanos := 1
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biBitCount := 32 // cuatro de 8 bits componentes
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biCompression := BI_RGB
& nbsp & nbsp & nbsp & nbsp imc.bmiHeader.biSizeImage := ulBitmapWidth * ulBitmapHeight * 4
& nbsp & nbsp & nbsp & nbsp // crear nuestra seccion DIB y seleccione el mapa de bits en el dc
& nbsp & nbsp & nbsp & nbsp Ahbitmap := CreateDIBSection(Ahdc, imc, DIB_RGB_COLORS, pvBits, 0, 0)
& nbsp & nbsp & nbsp & nbsp SelectObject(Ahdc, Ahbitmap)
& nbsp & nbsp & nbsp & nbsp bf.BlendOp := AC_SRC_OVER
& nbsp & nbsp & nbsp & nbsp bf.BlendFlags := 0
& nbsp & nbsp & nbsp & nbsp bf.SourceConstantAlpha := $7f // la mitad de 0xff = 50% de transparencia
& nbsp & nbsp & nbsp & nbsp bf.AlphaFormat := 0 // ignora el origen de canal alfa
& nbsp & nbsp & nbsp & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5), trunc(ulWindowHeight/5),
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ulBitmapWidth, ulBitmapHeight,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf)
& nbsp & nbsp & nbsp & nbsp bf.BlendOp := AC_SRC_OVER
& nbsp & nbsp & nbsp & nbsp bf.BlendFlags := 0
& nbsp & nbsp & nbsp & nbsp bf.AlphaFormat := AC_SRC_ALPHA // uso de la fuente de alfa
& nbsp & nbsp & nbsp & nbsp bf.SourceConstantAlpha := $ff // opaco (deshabilitar la constante alfa)
& nbsp & nbsp & nbsp & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
& nbsp & nbsp & nbsp & nbsp & nbsp trunc(ulWindowHeight/5 ulWindowHeight), ulBitmapWidth, ulBitmapHeight,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf)
& nbsp & nbsp & nbsp & nbsp bf.BlendOp := AC_SRC_OVER
& nbsp & nbsp & nbsp & nbsp bf.BlendFlags := 0
& nbsp & nbsp & nbsp & nbsp bf.AlphaFormat := 0
& nbsp & nbsp & nbsp & nbsp bf.SourceConstantAlpha := $3A
& nbsp & nbsp & nbsp & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp trunc(ulWindowHeight/5 2*ulWindowHeight), ulBitmapWidth,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ulBitmapHeight, bf)
& nbsp & nbsp & nbsp & nbsp // hacer limpieza
& nbsp & nbsp & nbsp & nbsp DeleteObject(Ahbitmap)
& nbsp & nbsp & nbsp & nbsp Deleteobject(Ahdc)
fin
Alpha blending un mapa de bits
By Consejos Y Trucos
Alpha blending un mapa de bits : Multi-millones de consejos para hacer su vida más fácil.