Autor Tema: [Duda] Reflección imagenes.  (Leído 2188 veces)

0 Usuarios y 1 Visitante están viendo este tema.

skyweb07

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +1/-2
    • Ver Perfil
[Duda] Reflección imagenes.
« en: Febrero 11, 2010, 08:22:40 pm »
Hola chicos, pués he estado buscando algo de ayuda pero no he podido encontrar nada acerca del tema , lo que más o menos necesito es algún modo de hacerle reflejo a una imagen. Lo he logrado poniendo 2 picturebox y a la de abajo bajandole un poco la opacidad y haciendo unos arreglos pero queda un poco feo. Por lo que estaba mirando si me pueden ayudar con eso. Saludos ;)

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:[Duda] Reflección imagenes.
« Respuesta #1 en: Febrero 12, 2010, 12:48:50 am »
hola fijate si es asi lo que buscas



es casi el mismo metodo que use con el DrawTextReflection

Código: [Seleccionar]
Option Explicit
'-----------------------------'
'Autor: Leandro Ascierto
'web:   www.leandroascierto.com.ar
'Fecha: 12/02/2010
'-----------------------------'
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long
Private Declare Function CreateCompatibleDC Lib "GDI32.dll" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "GDI32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "GDI32.dll" (ByVal hdc As Long) As Long
Private Declare Sub RtlMoveMemory Lib "Kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function BitBlt Lib "GDI32.dll" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function MulDiv Lib "Kernel32.dll" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long
Private Declare Function GetDeviceCaps Lib "GDI32.dll" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Private Type BLENDFUNCTION
    BlendOp As Byte
    BlendFlags As Byte
    SourceConstantAlpha As Byte
    AlphaFormat As Byte
End Type

Private Const LOGPIXELSX    As Long = 88  ' Logical pixels/inch in X
Private Const LOGPIXELSY    As Long = 90  ' Logical pixels/inch in Y
Private Const HimetricInch  As Long = 2540


Public Function DrawPicReflection(ByVal DestDC As Long, ByVal Left As Long, ByVal Top As Long, ByVal SrcPic As StdPicture, Optional Alpha As Byte)

    Dim BF As BLENDFUNCTION, lBF As Long
    Dim i As Long
    Dim Percent As Single
    Dim PicWidth As Long, PicHeight As Long
    Dim PicDC As Long, OldBmp As Long
    Dim lngAlpha As Long
   
    PicDC = CreateCompatibleDC(0)
    OldBmp = SelectObject(PicDC, SrcPic.Handle)
   
    PicWidth = MulDiv(SrcPic.Width, GetDeviceCaps(PicDC, LOGPIXELSX), HimetricInch)
    PicHeight = MulDiv(SrcPic.Height, GetDeviceCaps(PicDC, LOGPIXELSY), HimetricInch)
   
    BitBlt DestDC, Left, Top, PicWidth, PicHeight, PicDC, 0, 0, vbSrcCopy
   
    For i = 0 To PicHeight
        Percent = ((i * 100) / PicHeight)
        lngAlpha = 255 - (255 * Percent / 100) - Alpha
        BF.SourceConstantAlpha = IIf(lngAlpha > 0, lngAlpha, 0)
        RtlMoveMemory lBF, BF, 4
        AlphaBlend DestDC, Left, Top + PicHeight - 1 + i, PicWidth, 1, PicDC, 0, PicHeight - i, PicWidth, 1, lBF
    Next

    SelectObject PicDC, OldBmp
    DeleteDC PicDC
End Function

Código: [Seleccionar]
Private Sub Command1_Click()
Dim StdPic As StdPicture
Set StdPic = LoadPicture("D:\Escritorio 5\Descargar Imagenes\Imagenes\18-year-old-virgin-2009-vose.jpg")

DrawPicReflection Picture1.hdc, 60, 30, StdPic, 100
End Sub

fijate que el ulitmo parametro es opcional de 0  a 255 , seria para regular la transparencia.

Saludos.

skyweb07

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +1/-2
    • Ver Perfil
Re:[Duda] Reflección imagenes.
« Respuesta #2 en: Febrero 12, 2010, 04:47:19 am »
Es perfecto Leandro, muchas gracias, y es verdad se me habia olvidado el modulo que habias hecho para lo de las letras o.O quedo lindisimo. Gracias de nuevo y Saludos ;)