Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Cómo escribir un programa en VB para convertir BMP a ICO

Cómo escribir un programa en VB para convertir BMP a ICO

Siga las siguientes operaciones para lograr la conversión mutua entre BMP e ICO.

Primero, cree el siguiente control de imagen del proyecto: picImage picMaskbackcolor Las propiedades son blanco y negro respectivamente. Los otros cuatro controles de imagen tienen valores predeterminados de arriba a abajo y de izquierda a derecha. Las teclas de izquierda a derecha son Command1 y Command2. código en form1: Opción ExplicitPrivate Declarar función BitBlt Lib "gdi32" (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

Función de declaración privada CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, _

ByVal nWidth As Long, ByVal nHeight As Long) As Long

Función de declaración privada CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long Función de declaración privada SelectObject Lib "gdi32" ( ByVal hdc As Long, _

ByVal hObject As Long) As Long

Función de declaración privada DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long Función de declaración privada DeleteObject Lib "gdi32" (ByVal hObject como largo) Como función de declaración LongPrivate CreateIconIndirect Lib "user32" (icoinfo como ICONINFO) Como función de declaración LongPrivate OleCreatePictureIndirect Lib "olepro32.dll" (lppictDesc como _

pictDesc, riid como Guid, ByVal fown Mientras, ipic Como IPicture) Mientras

Función de declaración privada GetIconInfo Lib "user32" (ByVal hIcon Mientras, _

icoinfo Como ICONINFO) Mientras

Función de declaración privada SetBkColor Lib "gdi32" (ByVal hdc As Long, _

ByVal crColor As Long) As Long

Funciones de declaración privada

en CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight _

As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long

Tipo privado ICONINFO

fIcon mientras

xHotspot mientras

yHotspot mientras

hBMMask mientras

hBMColor como Largo

Tipo finalGuía de tipo privado

Datos1 tan largo

Datos2 como entero

Datos3 como entero

Datos4 (7) Como byte

Tipo finalTipo privado pictDesc

cbSizeofStruct Tan largo

picType tan largo

hImagen tan largo

xExt mientras

yExt mientras

End TypeConst PICTYPE_BITMAP = 1

Const PICTYPE_ICON = 3

Atenuar iGuid como Guid

Atenuar hdcMono

Atenuar bmpMono

Atenuar bmpMonoTemp

Const stdW = 32

Const stdH = 32

Dim mresult

Private Sub Form_Load()

hdcMono = CreateCompatibleDC(hdc)

bmpMono = CreateCompatibleBitmap(hdcMono, stdW, stdH)

bmpMonoTemp = SelectObject(hdcMono, bmpMono)

Con iGuid

.Data1 = amp;H20400

.Data4(0) = amp;HC0

.Data4(7) = amp;H46

Finalizar con

End Sub

Subcomando privado1_Click()

En caso de error, reanudar siguiente

Atenuar mtransp mientras

picImage.BackColor = Picture1.BackColor

mtransp = Picture1.Point(0, 0)

Crear Imagen Transparente1, picImage, mtransp

CreateMask_viaMemoryDC picImage, picMask

mresult = BitBlt(Picture2.hdc, 0, 0, stdW, stdH,

picMask.hdc, 0, 0, vbSrcAnd)

mresult = BitBlt(Picture2.hdc, 0, 0, stdW, stdH, picImage.hdc, 0, 0, vbSrcInvert)

BuildIcon Imagen2

Guardar imagen Imagen2.Imagen, App.Path y "/Frombmp.ico"

End Sub

Subcomando privado2_Click()

En caso de error, reanudar siguiente

Atenuar i, j

Atenuar p, q

Imagen4.Imagen = Imagen3.Imagen

p = Imagen4.Point(0, 0)

q = Me.BackColor

Para i = 0 a stdW

Para j = 0 a stdH

Si Imagen4.Point(i, j) = p Entonces

Imagen4.PSet (i, j), q

Finalizar si

Siguiente j

Siguiente i

Guardar imagen Imagen4.Imagen, App.Path amp "/Fromico.bmp"

End Sub

Privado Función CreateMask_viaMemoryDC(Pic1 As PictureBox, Pic2 As PictureBox) como booleano

En caso de error, GoTo errHandler

CreateMask_viaMemoryDC = False

Dim dx As Long, dy As Long

Atenuar hdcMono2 mientras dure, bmpMono2 mientras dure, bmpMonoTemp2 mientras dure

dx = Pic1.ScaleWidth

dy = Pic1.ScaleHeight

hdcMono2 = CreateCompatibleDC(0)

Si hdcMono2 = 0 Entonces

Ir a errHandler

Finalizar si

bmpMono2 = CreateCompatibleBitmap(hdcMono2, dx, dy)

bmpMonoTemp2 = SelectObject(hdcMono2, bmpMono2)

mresult = BitBlt(hdcMono2, 0, 0, dx, dy, Pic1.hdc, 0, 0, vbSrcCopy)< / p>

mresult = BitBlt(Pic2.hdc, 0, 0, dx, dy, hdcMono2, 0, 0, vbSrcCopy)

Llamar a SelectObject(hdcMono2, bmpMonoTemp2)

Llamar a DeleteDC(hdcMono2

)

Llamar a DeleteObject(bmpMono2)

CreateMask_viaMemoryDC = True

Función de salida

errHandler:

MsgBox " MakeMask_viaMemoryDC"

Función final

Sub ExtractIconComposite privado (en imagen como cuadro de imagen)

En caso de error, reanudar siguiente

Atenuar imagen como imagen IP

p>

Atenuar icoinfo como ICONINFO

Atenuar pDesc ​​​​como pictDesc

Atenuar hDCWork

Atenuar hBMOldWork

Atenuar hNewBM

Dim hBMOldMono

GetIconInfo inPic.Picture, icoinfo

hDCWork = CreateCompatibleDC(0)

hNewBM = CreateCompatibleBitmap(inPic.hdc, stdW , stdH )

hBMOldWork = SelectObject(hDCWork, hNewBM)

hBMOldMono = SelectObject(hdcMono, icoinfo.hBMMask)

BitBlt hDCWork, 0, 0, stdW , stdH , hdcMono, 0, 0, vbSrcCopy

SelectObject hdcMono, hBMOldMono

SelectObject hDCWork, hBMOldWork

Con pDesc

.cbSizeofStruct = Len (pDesc)

.picType = PICTYPE_BITMAP

.hImage = hNewBM

Finalizar con

OleCreatePictureIndirect pDesc, iGuid, 1, ipic

picMask = ipic

Establecer ipic = Nada

pDesc.hImage = icoinfo.hBMColor

OleCreatePictureIndirect pDesc, iGuid, 1, ipic

picImage = ipic

DeleteObject icoinfo.hBMMask

DeleteDC hDCWork

Establecer hBMOldWork = Nada

Establecer hBMOldMono = Nada

End Sub

Private Sub BuildIcon(inPic As PictureBox)

En caso de error, reanudar siguiente

Atenuar hOldMonoBM

Atenuar hDCWork

Atenuar hBM

OldWork

Atenuar hBMWork

Atenuar ipic como IPicture

Atenuar pDesc ​​como pictDesc

Atenuar icoinfo como ICONINFO

BitBlt hdcMono, 0, 0, stdW, stdH, picMask.hdc, 0, 0, vbSrcCopy

SelectObject hdcMono, bmpMonoTemp

hDCWork = CreateCompatibleDC(0)

Con inPic

hBMWork = CreateCompatibleBitmap(inPic.hdc, stdW, stdH)

Finalizar con

hBMOldWork = SelectObject(hDCWork, hBMWork)

BitBlt hDCWork, 0, 0, stdW, stdH, picImage.hdc, 0, 0, vbSrcCopy

SelectObject hDCWork, hBMOldWork

Con icoinfo

.fIcon = 1

.xHotspot = 16

.yHotspot = 16

.hBMMask = bmpMono

.hBMColor = hBMWork

Termina con

Con pDesc

.cbSizeofStruct = Len(pDesc)

.picType = PICTYPE_ICON

.hImage = CreateIconIndirect(icoinfo)

Finalizar con

OleCreatePictureIndirect pDesc, iGuid, 1, ipic

inPic.Picture = LoadPicture()

inPic = ipic

bmpMonoTemp = SelectObject(hdcMono, bmpMono)

DeleteObject icoinfo.hBMMask

DeleteDC hDCWork

Establecer hBMOldWork = Nada

End Sub

Sub CreateTransparent(inpicSrc As PictureBox, inpicDest As PictureBox, _

inTrasparentColor As Long)

Al reanudar con error Siguiente

Atenuar mMaskDC durante el tiempo

Atenuar mMaskBmp durante el tiempo

Atenuar mTempMaskBMP durante el tiempo

Atenuar mMonoBMP durante el tiempo

Atenuar mMonoDC mientras

Atenuar mTempMonoBMP mientras

Atenuar mSrcHDC mientras, mDestHDC

Mientras

Dim w Mientras, h Mientras

w = inpicSrc.ScaleWidth

h = inpicSrc.ScaleHeight

mSrcHDC = inpicSrc.hdc

mDestHDC = inpicDest.hdc

mresult = SetBkColoramp; (mSrcHDC, inTrasparentColor)

mresult = SetBkColoramp; (mDestHDC, inTrasparentColor)

mMaskDC = CreateCompatibleDC(mDestHDC)

mMaskBmp = CreateCompatibleBitmap(mDestHDC, w, h)

mTempMaskBMP = SelectObject(mMaskDC, mMaskBmp)

mMonoDC = CreateCompatibleDC(mDestHDC)

mMonoBMP = CreateBitmap(w, h, 1, 1, 0)

mTempMonoBMP = SelectObject(mMonoDC, mMonoBMP)

mresult = BitBlt(mMonoDC, 0, 0, w, h, mSrcHDC, 0, 0, vbSrcCopy)

mresult = BitBlt(mMaskDC, 0, 0, w, h, mMonoDC, 0, 0, vbSrcCopy)

mMonoBMP = SeleccionarObjeto(mMonoDC, mTempMonoBMP)

mresult = EliminarObjeto(mMonoBMP)

mresult = EliminarDC(mMonoDC)

mresult = BitBlt (mDestHDC, 0, 0, w, h, mSrcHDC, 0, 0, vbSrcInvert)

mresult = BitBlt(mDestHDC, 0, 0, w, h, mMaskDC, 0, 0, vbSrcAnd) p>

BitBlt mDestHDC, 0, 0, w, h, mSrcHDC, 0, 0, vbSrcInvert

inpicDest.Picture = inpicDest.Image

mMaskBmp = SelectObject( mMaskDC, mTempMaskBMP)

mresult = DeleteObject(mMaskBmp)

mresult = DeleteDC(mMaskDC)

End Sub

Sub privado Form_QueryUnload( Cancelar como entero, UnloadMode como entero)

SelectObject bmpMono, bmpMonoTemp

DeleteObject bmpMono

DeleteDC hdcMono

Fin del subtítulo