在 VB6 中缩放/调整 StdPicture
Scale / Resize StdPicture in VB6
我看了很远很广,想弄清楚如何做到这一点。我查看了 XtremeVBTalk.com 和互联网上的其他内容,了解如何调整该死的 StdPicture 的大小!
有人知道怎么做吗?这可能吗?
在此先感谢您。我不想使用任何类型库等,所以如果在解决方案中提供了它,我认为我将无法使用它。
我根本没有使用 A picturebox 控件。
假设我有以下函数头,并且传入了一个 StdPicture:
Private Function EncodeImageToBase64(ByRef Image As StdPicture) As String
然后我有以下声明,我打算将 StdPicture 编码为 base64:
Dim xmlDoc As DOMDocument60
Dim xmlNode As MSXML2.IXMLDOMElement
Dim bColor() As Byte
Dim bMask() As Byte
Dim bImage() As Byte
Dim lCrcTable() As Long
Dim lWidth As Long
Dim lHeight As Long
EncodeImageToBase64 = vbNullString
If Image Is Nothing Then
Exit Function
End If
Call CRCTable(lCrcTable)
Call Icon2Arrays(Image, bColor, bMask, lWidth, lHeight)
If Not CreatePngByteArray(bImage, lWidth, lHeight, bColor, bMask, lCrcTable) Then
Debug.Assert False
Exit Function
End If
但是,在调用它之前,我想将图像的宽度和高度减半。 我该怎么做? CreatePngByteArray 仅支持 16x16 的 PNG,而我使用的是 32x32,所以我想削减它们以便传递它们的断言。
您是指在 PICTUREBOX 控件内还是在 IMAGE CONTROL 内?因为如果我没记错的话它有一个 STRETCH 属性 可以自动将图像适应容器
@Zaf Khan 打败了我。我有一个类似的东西,我有一个 PictureBox。在行为下,我将 SizeMode 设置为 StretchImage 然后当我像这样加载图像时
LoadWebImageToPictureBox(ImagePreview, SelectedFile)
它会自动适应。
好吧,我花了很多时间在这个问题上,因为我一开始并不知道答案,但我仍然有兴趣找出潜在的解决方案。
以下回答是我对你想做的事情的理解,但可能不是问题本身的答案,所以很可能被认为是错误的。
所以,这就是我的想法。您将需要使用 IPictureDisp 对象 而不是 StdPicture 对象。您还需要使用 PictureBox 控件,即使您并不是真的想要。
创建一个新项目。添加表格,或打开现有表格(如果提供)。将窗体的 ScaleMode 设置为像素。在窗体上添加一个 PictureBox 控件。将 PictureBox 控件的 AutoRedraw 属性 设置为 'True',将控件的 BorderStyle 属性 设置为 'None',将控件的 Height 和 Width 属性分别设置为 16 像素。将以下代码添加到窗体中,并修改要调整大小的图像的位置和类型,然后将其保存到的位置:
Private Sub Form_Load()
Dim TestPic As IPictureDisp
Set TestPic = LoadPicture("C:\Users\Your Name\Desktop\image.gif")
With TestPic
.Render Picture1.hDC, 0, 16, 16, -17, 0, 0, .width, .height, 0
End With
SavePicture Picture1.Image, "C:\Users\Your Name\Desktop\image2.bmp"
End Sub
图像可以以 Visual Basic 6 支持的任何类型(.bmp、.cur、.gif、.ico、.jpeg 或 .jpg 和 .wmf)开头,但必须始终以位图形式保存格式。请注意,Visual Basic 6 根本不支持 PNG 文件格式,因此您将无法使用任何 VB6 函数打开或创建 PNG 文件。
我会对其他人提出的其他解决方案感兴趣。
编辑:固定尺寸。
我看了很远很广,想弄清楚如何做到这一点。我查看了 XtremeVBTalk.com 和互联网上的其他内容,了解如何调整该死的 StdPicture 的大小!
有人知道怎么做吗?这可能吗?
在此先感谢您。我不想使用任何类型库等,所以如果在解决方案中提供了它,我认为我将无法使用它。
我根本没有使用 A picturebox 控件。
假设我有以下函数头,并且传入了一个 StdPicture:
Private Function EncodeImageToBase64(ByRef Image As StdPicture) As String
然后我有以下声明,我打算将 StdPicture 编码为 base64:
Dim xmlDoc As DOMDocument60
Dim xmlNode As MSXML2.IXMLDOMElement
Dim bColor() As Byte
Dim bMask() As Byte
Dim bImage() As Byte
Dim lCrcTable() As Long
Dim lWidth As Long
Dim lHeight As Long
EncodeImageToBase64 = vbNullString
If Image Is Nothing Then
Exit Function
End If
Call CRCTable(lCrcTable)
Call Icon2Arrays(Image, bColor, bMask, lWidth, lHeight)
If Not CreatePngByteArray(bImage, lWidth, lHeight, bColor, bMask, lCrcTable) Then
Debug.Assert False
Exit Function
End If
但是,在调用它之前,我想将图像的宽度和高度减半。 我该怎么做? CreatePngByteArray 仅支持 16x16 的 PNG,而我使用的是 32x32,所以我想削减它们以便传递它们的断言。
您是指在 PICTUREBOX 控件内还是在 IMAGE CONTROL 内?因为如果我没记错的话它有一个 STRETCH 属性 可以自动将图像适应容器
@Zaf Khan 打败了我。我有一个类似的东西,我有一个 PictureBox。在行为下,我将 SizeMode 设置为 StretchImage 然后当我像这样加载图像时
LoadWebImageToPictureBox(ImagePreview, SelectedFile)
它会自动适应。
好吧,我花了很多时间在这个问题上,因为我一开始并不知道答案,但我仍然有兴趣找出潜在的解决方案。
以下回答是我对你想做的事情的理解,但可能不是问题本身的答案,所以很可能被认为是错误的。
所以,这就是我的想法。您将需要使用 IPictureDisp 对象 而不是 StdPicture 对象。您还需要使用 PictureBox 控件,即使您并不是真的想要。
创建一个新项目。添加表格,或打开现有表格(如果提供)。将窗体的 ScaleMode 设置为像素。在窗体上添加一个 PictureBox 控件。将 PictureBox 控件的 AutoRedraw 属性 设置为 'True',将控件的 BorderStyle 属性 设置为 'None',将控件的 Height 和 Width 属性分别设置为 16 像素。将以下代码添加到窗体中,并修改要调整大小的图像的位置和类型,然后将其保存到的位置:
Private Sub Form_Load()
Dim TestPic As IPictureDisp
Set TestPic = LoadPicture("C:\Users\Your Name\Desktop\image.gif")
With TestPic
.Render Picture1.hDC, 0, 16, 16, -17, 0, 0, .width, .height, 0
End With
SavePicture Picture1.Image, "C:\Users\Your Name\Desktop\image2.bmp"
End Sub
图像可以以 Visual Basic 6 支持的任何类型(.bmp、.cur、.gif、.ico、.jpeg 或 .jpg 和 .wmf)开头,但必须始终以位图形式保存格式。请注意,Visual Basic 6 根本不支持 PNG 文件格式,因此您将无法使用任何 VB6 函数打开或创建 PNG 文件。
我会对其他人提出的其他解决方案感兴趣。
编辑:固定尺寸。