기금넷 공식사이트 - 회사 연구 - BMP를 ICO로 변환하기 위해 VB에서 프로그램을 작성하는 방법
BMP를 ICO로 변환하기 위해 VB에서 프로그램을 작성하는 방법
BMP와 ICO 간의 상호 변환을 달성하려면 다음 작업을 따르십시오.
먼저 다음 프로젝트 그림 컨트롤을 만듭니다. picImage picMaskbackcolor 속성은 각각 검은색과 흰색입니다. 다른 네 개의 그림 컨트롤은 위에서 아래로, 왼쪽에서 오른쪽으로 키는 기본값입니다. 왼쪽에서 오른쪽으로. form1에 다음 코드를 입력하세요. :Option ExplicitPrivate 선언 함수 BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, _
ByVal Y As Long, ByVal nWidth As Long) Long, ByVal hSrcDC As Long, _
ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long)
개인 선언 함수 CreateCompatibleBitmap Lib "gdi32"(ByVal hdc 길게, _
ByVal nWidth 길게, ByVal nHeight 길게)
Private 선언 함수 CreateCompatibleDC Lib "gdi32"(ByVal hdc As Long) As LongPrivate 선언 함수 SelectObject Lib "gdi32"(ByVal hdc As Long, _
ByVal hObject As Long)
Private 선언 함수 DeleteDC Lib "gdi32"(ByVal hdc As Long) As LongPrivate 선언 함수 DeleteObject Lib "gdi32"(ByVal hObject As Long) LongPrivate 선언 함수 CreateIconIndirect Lib "user32"(icoinfo As ICONINFO) As LongPrivate 선언 함수 OleCreatePictureIndirect Lib "olepro32.dll"(lppictDesc As _
pictDesc, riid As Guid, ByVal fown As Long, ipic As IPicture) As Long
개인 선언 함수 GetIconInfo Lib "user32"(ByVal hIcon As Long, _
icoinfo as ICONINFO) As Long
p>
개인 선언 함수 SetBkColor Lib "gdi32" (ByVal hdc As Long, _
ByVal crColor As Long) 긴
개인 선언 함수 CreateBitmap Lib "gdi32" ( ByVal nWidth는 길이만큼, ByVal nHeight는 _
길이만큼, ByVal nPlanes는 L만큼
ong, ByVal nBitCount As Long, lpBits As Long
Private Type ICONINFO
fIcon As Long
xHotspot As Long
yHotspot의 길이
hBMMask의 길이
hBMColor의 길이
End TypePrivate 유형 Guid
Data1의 길이
정수형 Data2
정수형 Data3
Data4(7) 바이트형
End TypePrivate 유형 pictDesc
cbSizeofStruct As Long
p>긴 picType
hImage 긴
xExt 긴
yExt 긴
End TypeConst PICTYPE_BITMAP = 1
Const PICTYPE_ICON = 3
Guid로 iGuid를 흐리게
hdcMono를 흐리게
bmpMono를 흐리게
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)
iGuid 사용
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
다음으로 끝남
End Sub
Private Sub command1_Click()
오류 시 다음 재개
긴 mtransp 길이
picImage.BackColor = Picture1. BackColor
mtransp = Picture1.Point(0, 0)
CreateTransparent Picture1, 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 Picture2
SavePicture Picture2.Picture, App.Path & "/F
rombmp.ico"
Sub 종료
Private Sub command2_Click()
오류 발생 시 다음 재개
Dim i, j
어두운 p, q
Picture4.Picture = Picture3.Image
p = Picture4.Point(0, 0)
q = 나. BackColor
For i = 0에서 stdW로
For j = 0에서 stdH로
If Picture4.Point(i, j) = p Then
Picture4.PSet (i, j), q
End If
다음 j
다음 i
SavePicture Picture4. Picture, App.Path & "/Fromico.bmp"
End Sub
개인 함수 CreateMask_viaMemoryDC(Pic1 As PictureBox, Pic2 As PictureBox) As Boolean
On 오류 GoTo errHandler
CreateMask_viaMemoryDC = False
Dim dx는 길게, dy는 길게
dim hdcMono2는 길게, bmpMono2는 길게, bmpMonoTemp2는 길게
dx = Pic1.ScaleWidth
dy = Pic1.ScaleHeight
hdcMono2 = CreateCompatibleDC(0)
hdcMono2 = 0이면
GoTo errHandler
End If
bmpMono2 = CreateCompatibleBitmap(hdcMono2, dx, dy)
bmpMonoTemp2 = SelectObject(hdcMono2, bmpMono2)
mresult = BitBlt(hdcMono2, 0, 0, dx, dy, Pic1.hdc, 0, 0, vbSrcCopy)
mresult = BitBlt(Pic2.hdc, 0, 0, dx, dy, hdcMono2, 0, 0, vbSrcCopy)
SelectObject 호출(hdcMono2, bmpMonoTemp2)
DeleteDC(hdcMono2) 호출
DeleteObject(bmpMono2) 호출
CreateMask_viaMemoryDC = True
함수 종료
errHandler:
MsgBox "MakeMask_viaMemoryDC"
함수 종료
Private Sub ExtractIconComposite(inPic As PictureBox)
오류 발생 시 다음 재개
Dim ipic As IPicture
Dim icoinf
o ICONINFO로
어두운 pDesc pictDesc로
어두운 hDCWork
어두운 hBMOldWork
어두운 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
pDesc 포함
.cbSizeofStruct = Len(pDesc)< /p >
.picType = PICTYPE_BITMAP
.hImage = hNewBM
끝내기
OleCreatePictureIndirect pDesc, iGuid, 1, ipic
picMask = ipic
ipic = 없음 설정
pDesc.hImage = icoinfo.hBMColor
OleCreatePictureIndirect pDesc, iGuid, 1, ipic
picImage = ipic
DeleteObject icoinfo.hBMMask
DeleteDC hDCWork
hBMOldWork = 없음 설정
hBMOldMono = 없음 설정
End Sub
Private Sub BuildIcon(inPic As PictureBox)
오류 발생 시 다음 재개
Dim hOldMonoBM
Dim hDCWork p>
Dim hBMOldWork
Dim hBMWork
Dim ipic As IPicture
Dim pDesc As pictDesc
Dim icoinfo ICONINFO로
BitBlt hdcMono, 0, 0, stdW, stdH, picMask.hdc, 0, 0, vbSrcCopy
SelectObject hdcMono, bmpMonoTemp
hDCWork = CreateCompatibleDC(0)
inPic 사용
hBMWork = CreateCompatibleBitmap(inPic.hdc, stdW, stdH)
끝내기
hBMOldWork = SelectObject(hDCWork, HB
MWork)
BitBlt hDCWork, 0, 0, stdW, stdH, picImage.hdc, 0, 0, vbSrcCopy
SelectObject hDCWork, hBMOldWork
icoinfo 사용
.fIcon = 1
.xHotspot = 16
.yHotspot = 16
.hBMMask = bmpMono
.hBMColor = hBMWork
끝내기
pDesc로
.cbSizeofStruct = Len(pDesc)
.picType = PICTYPE_ICON
.hImage = CreateIconIndirect(icoinfo)
끝내기
OleCreatePictureIndirect pDesc, iGuid, 1, ipic
inPic.Picture = LoadPicture()
inPic = ipic
bmpMonoTemp = SelectObject(hdcMono, bmpMono)
DeleteObject icoinfo.hBMMask
DeleteDC hDCWork
hBMOldWork = 없음 설정
End Sub
Sub CreateTransparent(inpicSrc As PictureBox, inpicDest As PictureBox, _
inTrasparentColor As Long)
오류 발생 시 다음 재개
mMaskDC를 길게 어둡게
mMaskBmp를 길게 어둡게
mTempMaskBMP를 길게 어둡게
mMonoBMP를 길게 어둡게
길게 mMonoDC를 어둡게
길게 mTempMonoBMP를 어둡게
mSrcHDC를 길게 어둡게, mDestHDC를 길게 어둡게
w를 길게, h만큼 어둡게 긴
w = inpicSrc.ScaleWidth
h = inpicSrc.ScaleHeight
mSrcHDC = inpicSrc.hdc
mDestHDC = inpicDest.hdc
mresult = SetBkColor&(mSrcHDC, inTrasparentColor)
mresult = SetBkColor&(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 = SelectObject(mMonoDC, mTempMonoBMP )
mresult = 삭제오브젝트(mMonoBMP)
mresult = 삭제DC(mMonoDC)
mresult = BitBlt(mDestHDC, 0, 0, w, h, mSrcHDC, 0, 0, vbSrcInvert)
mresult = BitBlt(mDestHDC, 0, 0, w, h, mMaskDC, 0, 0, vbSrcAnd)
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
Private Sub Form_QueryUnload(정수로 취소, 정수로 UnloadMode)
SelectObject bmpMono, bmpMonoTemp
DeleteObject bmpMono
DeleteDC hdcMono
End Sub
- 관련 기사
- 바이두클라우드 6개를 미국으로 보내주세요.
- 보쉬 냉장고를 어떻게 평가하나요?
- 지금 Ganji.com, 58.com 및 Baixing.com의 많은 술집 모집 정보는 모두 돈을 사취하는 사기꾼입니다. 돈 때문에 혼동하지 마십시오.
- 생명을 구하기 위해 목숨을 바친 쓰촨성 보조경찰의 마지막 모습이 공개됐다.
- 광저우 지역 신규 확진자 1명에 대한 세부정보가 2월 16일 발표되었습니다.
- 유럽과 미국의 슈퍼 호러 영화를 찾고 있습니다.
- 그때 쥐들은 밥을 얼마나 좋아했나요?
- PC 근육을 가르치는 것이 성기능에 정말 좋은가요?
- 테드로스 아드하놈 게브레예수스
- 북한이 또다시 핵실험을 감행하고 안보리 결의안에 석유 제한과 제재를 명시한다면 어떻게 될까요?