如何使用 VB6 打开 PNG 格式的图像文件?理想情况下,我(即我的客户)希望打开 PNG 文件并将其放入单独的 R(ed)、G(reen) 和 B(lue) 数组中。
VB6 不是我选择的工具(因为缺乏知识),如果有人能为我指出正确的 VB6 解决方案方向,我会很高兴。
感谢您的链接,虽然不是一个流利的 VB 人(更多的 C 和 ASM 风格),但代码似乎非常以 BMP 为中心;不是PNG。
如果是这种情况,我必须相信您建议了该链接,因为使代码PNG'able 是一件简单的事情,但我不知道如何处理。
您可以尝试开源FreeImage 项目。
'1 form with :
' 1 picturebox : name=Picture1
' 1 commandbutton : name=Command1
Option Explicit
Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, ByRef lpObject As Any) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, ByRef lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, ByRef lpBits As Any) As Long
Private mbmpBits() As Byte
Private mudtBmp As BITMAP
Private Sub Command1_Click()
ShowRed
' ShowGreen
' ShowBlue
End Sub
Private Sub Form_Load()
Picture1.Picture = LoadPicture("c:\temp\pic.bmp")
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Form1 = Nothing
End Sub
Private Sub ShowRed()
Dim lngX As Long, lngY As Long
ReadBits
For lngX = 0 To mudtBmp.bmWidth - 1
For lngY = 0 To mudtBmp.bmHeight - 1
mbmpBits(0, lngX, lngY) = 0
mbmpBits(1, lngX, lngY) = 0
Next lngY
Next lngX
ShowBits
End Sub
Private Sub ShowGreen()
Dim lngX As Long, lngY As Long
ReadBits
For lngX = 0 To mudtBmp.bmWidth - 1
For lngY = 0 To mudtBmp.bmHeight - 1
mbmpBits(0, lngX, lngY) = 0
mbmpBits(2, lngX, lngY) = 0
Next lngY
Next lngX
ShowBits
End Sub
Private Sub ShowBlue()
Dim lngX As Long, lngY As Long
ReadBits
For lngX = 0 To mudtBmp.bmWidth - 1
For lngY = 0 To mudtBmp.bmHeight - 1
mbmpBits(1, lngX, lngY) = 0
mbmpBits(2, lngX, lngY) = 0
Next lngY
Next lngX
ShowBits
End Sub
Private Sub ReadBits()
GetObject Picture1.Picture.Handle, Len(mudtBmp), mudtBmp
With mudtBmp
ReDim mbmpBits(0 To (.bmBitsPixel \ 8) - 1, 0 To .bmWidth - 1, 0 To .bmHeight - 1) As Byte
GetBitmapBits Picture1.Picture.Handle, .bmWidthBytes * .bmHeight, mbmpBits(0, 0, 0)
End With 'mudtBmp
End Sub
Private Sub ShowBits()
SetBitmapBits Picture1.Picture.Handle, mudtBmp.bmWidthBytes * mudtBmp.bmHeight, mbmpBits(0, 0, 0)
Erase mbmpBits
Picture1.Refresh
End Sub