制作最清晰缩略图的完整类(VB.NET版)

先收集一些相关资源
Public Class ClassUpPic

    Private vPicFile As System.Web.UI.HtmlControls.HtmlInputFile

    Private vSmallPicSize, vUpFileSize As Integer

    Private vUpPicPath, vNewPicName, vTmpPicName As String

    Private PicMin, PicMax, vPicMax As System.Drawing.Image

    Private PicFormat As System.Drawing.Imaging.ImageFormat

    Private MinHeight, MinWidth As Decimal

    Private Myfile As IO.File

 

    Public Sub New(ByVal PicFile As System.Web.UI.HtmlControls.HtmlInputFile, ByVal UpPicType As PicType)

        vPicFile = PicFile

        vUpFileSize = HttpContext.Current.Application("UpFileSize")

        Select Case UpPicType

            Case PicType.Face

                vUpPicPath = "upload/images/Face"

                vSmallPicSize = 150

                vNewPicName = HttpContext.Current.Session("MemberID") & "." & GetRightByChar(vPicFile.PostedFile.FileName, ".")

            Case PicType.Photo

                vUpPicPath = "upload/images/Photo"

                vSmallPicSize = 150

                vNewPicName = System.Guid.NewGuid.ToString() & "." & GetRightByChar(vPicFile.PostedFile.FileName, ".")

            Case PicType.Pic

                vUpPicPath = "upload/images/Pic"

                vSmallPicSize = 550

                vNewPicName = System.Guid.NewGuid.ToString() & "." & GetRightByChar(vPicFile.PostedFile.FileName, ".")

        End Select

    End Sub

 

    Public Function GetSavedFileName() As String

        '检验图片类型=================================================================

        If vPicFile.PostedFile.FileName = "" Then

            Throw New NotSupportedException("文件为空,请您选择上传的图片文件!")

        End If

        If Left(vPicFile.PostedFile.ContentType, 5) <> "image" Then

            Throw New NotSupportedException("文件格式不合法,请选取有效的图片文件!" & vPicFile.PostedFile.ContentType)

        End If

        If vPicFile.PostedFile.ContentLength > vUpFileSize Then

            Dim MaxNumber As Decimal = vUpFileSize / 1024 / 1024

            Throw New NotSupportedException("上传的图片文件太大,最大支持" & Format(MaxNumber, "##,##0") & "M!")

        End If

 

        '检验数量限制=================================================================

 

        '保存大文件=================================================================

        vPicFile.PostedFile.SaveAs(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vNewPicName)

        vPicFile.Dispose()

 

        '缩略图片文件=================================================================

        PicMax = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vNewPicName)

        If Not (PicMax.RawFormat Is PicFormat.Gif Or PicMax.RawFormat Is PicFormat.Png) Then

            If PicMax.Height > vSmallPicSize Or PicMax.Width > vSmallPicSize Then

                vTmpPicName = System.Guid.NewGuid.ToString() & ".png"

                vPicMax = PicMax

                PicMax.Save(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vTmpPicName, PicFormat.Png)

                vPicMax.Dispose()

                PicMax = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vTmpPicName)

            End If

        End If

        '保存小文件=================================================================

        GetMinPic(PicMax).Save(HttpContext.Current.Server.MapPath(vUpPicPath & "/min/") & vNewPicName, PicFormat.Jpeg)

        PicMax.Dispose()

 

        '删除临时png文件=================================================================

        If vTmpPicName <> "" Then Myfile.Delete(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vTmpPicName)

 

        Return vNewPicName

    End Function

 

    Private Function GetMinPic(ByVal MaxPic As System.Drawing.Image) As System.Drawing.Image

        If MaxPic.Height > vSmallPicSize Or MaxPic.Width > vSmallPicSize Then

            If MaxPic.Height > MaxPic.Width Then

                MinWidth = MaxPic.Width / (MaxPic.Height / vSmallPicSize)

                MinHeight = vSmallPicSize

            Else

                MinWidth = vSmallPicSize

                MinHeight = MaxPic.Height / (MaxPic.Width / vSmallPicSize)

            End If

            Return MaxPic.GetThumbnailImage(CInt(MinWidth), CInt(MinHeight), Nothing, New System.IntPtr())

        Else

            Return MaxPic

        End If

    End Function

 

    Enum PicType

        Face = 1

        Photo = 2

        Pic = 3

    End Enum

 

    Private Function GetRightByChar(ByVal StrValue As String, ByVal CharValue As String) As String

        Dim MyStr() As String = Split(StrValue, CharValue)

        Return MyStr(MyStr.Length - 1)

    End Function

End Class

转自:http://guoblog.com/blogview.asp?logID=259

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB 做的相册(缩略图预览程序) VB做的小型相册,实际上是一个图片浏览程序,打开时显示缩略图,鼠标点击显示大图片,并可接着浏览下去,程序相关说明:   函数功能: 该函数将指定位图的位拷贝到缓冲区里?   函数原型:LONG GetBitmapBits(HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits);   参数:   hbmp:指向感兴趣的位图的句柄?   cbBuffer:指定要从位图拷贝到缓冲区的字节数?   lpvBits:指向接收位图位数据的缓冲区指针?这些位是按字节型存储在数组中的?   返回值:如果该函数执行成功,那么返回值就是拷贝到缓冲区的字节数;如果该函数执行失败,那么返回值为0。   Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal nwCount As Long, lpBits As Any) As Long      函数功能:该函数将位图的颜色数据位设置成指定值?   函数原型:LONG SetBitmapBits(HBITMAP hmbp, DWORD cBytes, CONST VOID (lpBits);   参数:   hbmp:指向要设置的位图的句柄?   cBytes:指定参数lpBits指向的数组的字节数?   lpBits:指向字节型数组的指针?该数组中包含了指定位图的颜色数据?   返回值:如果该函数执行成功,则返回值就是在设置位图位时使用的字节数;如果失败,则返回值为0。      函数功能:该函数得到指定图形对象的信息,根据图形对象,函数把填满的或结构,或表项(用于逻辑调色板)数目放入一个指定的缓冲区。   函数原型:int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);   参数:   hgdiobj:指向感兴趣的图形对象的句柄,它可以是这样的一个句柄:一个逻辑位图、一个刷子、一种字体、一个调色板、笔或通过调用CreateDIBsection函数创建的与设备无关位图。   cbBuffer:指定将要写到缓冲区的信息的字节数目?‘lpvObject:指向一个缓冲区的指针,该缓冲区将要检索指定图形对象的信息。      函数功能描述:将一块内存的数据从一个位置复制到另一个位置   函数原型:VOID CopyMemory(PVOID Destination,CONST VOID *Source,DWORD Length);   参数:   Destination:要复制内存块的目的地址?   Source:要复制内存块的源地址?   Length:指定要复制内存块的大小,单位为字节   返回值:该函数为VOID型,没有返回值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值