Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert bmp to jpg in vb6

How to convert bmp to jpg in vb6 ?

like image 726
faressoft Avatar asked Dec 23 '10 09:12

faressoft


2 Answers

check this link

    'Convert BMP to JPG with this code. (Note: Requires vic32.dll available from
'http://www.catenary.com/)

'PLACE ALL THIS IN A NEW MODULE

Declare Function bmpinfo Lib "VIC32.DLL" (ByVal Fname As String, bdat As BITMAPINFOHEADER) As Long
Declare Function allocimage Lib "VIC32.DLL" (image As imgdes, ByVal wid As Long, ByVal leng As Long, ByVal BPPixel As Long) As Long
Declare Function loadbmp Lib "VIC32.DLL" (ByVal Fname As String, desimg As imgdes) As Long
Declare Sub freeimage Lib "VIC32.DLL" (image As imgdes)
Declare Function convert1bitto8bit Lib "VIC32.DLL" (srcimg As imgdes, desimg As imgdes) As Long
Declare Sub copyimgdes Lib "VIC32.DLL" (srcimg As imgdes, desimg As imgdes)
Declare Function savejpg Lib "VIC32.DLL" (ByVal Fname As String, srcimg As imgdes, ByVal quality As Long) As Long



' Image descriptor
Type imgdes
  ibuff As Long
  stx As Long
  sty As Long
  endx As Long
  endy As Long
  buffwidth As Long
  palette As Long
  colors As Long
  imgtype As Long
  bmh As Long
  hBitmap As Long
End Type

Type BITMAPINFOHEADER
   biSize As Long
   biWidth As Long
   biHeight As Long
   biPlanes As Integer
   biBitCount As Integer
   biCompression As Long
   biSizeImage As Long
   biXPelsPerMeter As Long
   biYPelsPerMeter As Long
   biClrUsed As Long
   biClrImportant As Long
End Type

'PLACE THIS IN YOUR FORM DECLERATIONS

Private Sub ConvertToJPEG(bmp_fname As String, jpg_fname As String, Optional quality As Long)
  Dim tmpimage As imgdes    ' Image descriptors
  Dim tmp2image As imgdes
  Dim rcode As Long
  'Dim quality As Long
  Dim vbitcount As Long
  Dim bdat As BITMAPINFOHEADER ' Reserve space for BMP struct
  'Dim bmp_fname As String
  'Dim jpg_fname As String

  'bmp_fname = "test.bmp"
  'jpg_fname = "test.jpg"

  If quality = 0 Then quality = 75

   ' Get info on the file we're to load
  rcode = bmpinfo(bmp_fname, bdat)
  If (rcode <> NO_ERROR) Then
     msgbox "error: Unable to get file info"
     Exit Sub
  End If

  vbitcount = bdat.biBitCount
  If (vbitcount >= 16) Then  ' 16-, 24-, or 32-bit image is loaded into 24-bit buffer
     vbitcount = 24
  End If

   ' Allocate space for an image
  rcode = allocimage(tmpimage, bdat.biWidth, bdat.biHeight, vbitcount)
  If (rcode <> NO_ERROR) Then
    msgbox "error: Not enough memory"
    Exit Sub
  End If

   ' Load image
  rcode = loadbmp(bmp_fname, tmpimage)
  If (rcode <> NO_ERROR) Then
     freeimage tmpimage ' Free image on error
     msgbox "error: Cannot load file"
     Exit Sub
  End If

  If (vbitcount = 1) Then ' If we loaded a 1-bit image, convert to 8-bit grayscale
      ' because jpeg only supports 8-bit grayscale or 24-bit color images
    rcode = allocimage(tmp2image, bdat.biWidth, bdat.biHeight, 8)
    If (rcode = NO_ERROR) Then
        rcode = convert1bitto8bit(tmpimage, tmp2image)
        freeimage tmpimage  ' Replace 1-bit image with grayscale image
        copyimgdes tmp2image, tmpimage
    End If
  End If

  ' Save image
  rcode = savejpg(jpg_fname, tmpimage, quality)
  freeimage tmpimage
  Kill bmp_fname
  msgbox "picture saved: " & jpg_fname

End Sub
like image 198
Binil Avatar answered Nov 17 '22 06:11

Binil


Well, for XP SP1 and later you could use the tool provided: the WIA 2.0 Library.

To simply convert BMP to JPG you can strip out nearly half of the lines here:

Option Explicit
'
'Requires a reference to:
'   Microsoft Windows Image Acquisition Library v2.0
'

Private Const TIFF_LZW As String = "LZW"
Private Const TIFF_RLE As String = "RLE"       'Pixel Depth must be 1.
Private Const TIFF_CCITT3 As String = "CCITT3" 'Pixel Depth must be 1.
Private Const TIFF_CCITT4 As String = "CCITT4" 'Pixel Depth must be 1.
Private Const TIFF_Uncompressed As String = "Uncompressed"

Private Sub ImgConvert( _
    ByVal InFileName As String, _
    ByVal OutFileName As String, _
    ByVal OutFormat As String, _
    Optional ByVal Quality As Integer = 100, _
    Optional ByVal Compression As String = TIFF_LZW)

    Dim Img As WIA.ImageFile
    Dim ImgProc As WIA.ImageProcess

    Set Img = New WIA.ImageFile
    Img.LoadFile InFileName
    Set ImgProc = New WIA.ImageProcess
    With ImgProc.Filters
        .Add ImgProc.FilterInfos("Convert").FilterID
        .Item(1).Properties("FormatID").Value = OutFormat
        If OutFormat = wiaFormatJPEG Then
            .Item(1).Properties("Quality").Value = Quality
        ElseIf OutFormat = wiaFormatTIFF Then
            .Item(1).Properties("Compression").Value = Compression
        End If
    End With
    Set Img = ImgProc.Apply(Img)

    On Error Resume Next
    Kill OutFileName
    On Error GoTo 0
    Img.SaveFile OutFileName
End Sub

Private Sub Main()
    ImgConvert "sample.bmp", "sample.jpg", wiaFormatJPEG, 70
    ImgConvert "sample.bmp", "sample.gif", wiaFormatGIF
    ImgConvert "sample.bmp", "sample.png", wiaFormatPNG
    ImgConvert "sample.bmp", "sample.tif", wiaFormatTIFF, , TIFF_Uncompressed
    MsgBox "Complete"
End Sub

For XP you'll need to deploy it: Windows® Image Acquisition Automation Library v2.0 Tool: Image acquisition and manipulation component for VB and scripting.

For anything later it's part of the OS already.

like image 25
Bob77 Avatar answered Nov 17 '22 05:11

Bob77