2010-12-23 28 views
8

Nasıl bmp jpg içinde vb6 için dönüştürmek için?Nasıl bmp jpg jpg dönüştürmek için

+0

Tam olarak bir kopya değil, çünkü BMP'den JPG'ye sormuşsunuzdur, ancak [GIF'i JPG veya TIF'e dönüştürme] ile ilgili olarak bu soruyla da ilgilenebilirsiniz (http://stackoverflow.com/ sorular/1333901/visual-basic-6-image-conversion-from-gif-to-jpg-veya-tif) – MarkJ

+1

Bkz. http://www.vbaccelerator.com/home/VB/Code/vbMedia/Saving_Pictures_to_JPG/Using_Intel_JPG_Library/ Söz konusu makale. –

cevap

3

onay bu 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 
+0

VIC32.DLL yalnızca yaklaşık 250 kb'dir. Victor Library fiyatı, dağıtım için hiçbir telif hakkı olmaksızın sadece 499 $ 'dır. Dosyalar ağ paylaşımında olduğunda işe yaramıyor –

1

From here: Diğer biçimlerde dosya kaydetmek için mevcut olan çeşitli üçüncü taraf denetimleri bu çoğu kez 'koltuk başına' kabul edilemez sahip lisans politikaları ve inanılmaz olabilir, orada iken

pahalı. Bu makalede, VB resimleri kaydetmek için ücretsiz bir JPEG DLL kitaplığı nasıl kullanılacağını gösterir. PS

: sadece jpg görüntüleri kaydetmek için VIC32 gibi bir kütüphane için 500 $ ödeme çok fazla görünüyor ...

2

ImageMagick ile Gemi bunu ve bunu gibi bir şey

shell "convert.exe image.bmp image.jpg" 
+0

. Bunu nasıl aşabilirim? – Rick

+0

@Rick Önce yerel bir sürücüye kopyalayın? ImageMagick'in bir ağ paylaşımındaki dosyaları çalışmadığını bilmiyordum. Ağ paylaşımlarıyla ilgili deneyimim yok. – Robert

2

Sen use GDI+ can VB6 için JPG'ye kaydet.

+0

Uyarı: GDI + bir Windows Hizmetinde güvenli değildir ve aynı zamanda IIS altında güvenli olmayan bir şekilde çalışıyor gibi görünüyor. – Bob77

3

Peki, XP SP1 ve sonrası için sağlanan aracı kullanabilirsiniz: WIA 2.0 Kitaplığı. Eğer gerekir XP için

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 

dağıtmak için: Windows® Image Acquisition Automation Library v2.0 Tool: Image acquisition and manipulation component for VB and scripting

sadece burada hatlarının yaklaşık yarısını dışarı şerit olabilir JPG BMP dönüştürmek için.

Daha sonra herhangi bir şey için zaten işletim sisteminin bir parçası.

+0

XP'de DLL manuel olarak kaydedilmeli, doğru mu? Kayıt için başka bir alternatif var mı? – Rick

+0

@Rick Bunu bir soru olarak yayınlayabilirsiniz –

+0

SDK'nin ZIP arşivinden aldığınız zaman WIAAut.dll dosyasını kopyalamaya ve kaydettirmeye ihtiyacınız vardır.Ancak yeniden dağıtım için herhangi bir kurulum/yükleyici teknolojisini kullanmak üzere kullanacaksınız, bu da herhangi bir ActiveX kütüphanesi gibi yükleme ve kaydetme aracı almalıdır. – Bob77

2

Sadece!
1) Bu EN KISA yöntemdir:

SavePicture(LoadPicture("c:\YourFile.BMP"),"c:\YourFile.JPG") 

2) herhangi bir biçimde (ile/sıkıştırma olmadan) dönüştürmek istiyorsanız, ben FFMpeg öneriyoruz.

Shell("ffmpeg.exe -i YourFile.bmp -q <qualityNumber*> ConverTo.Any") 

* write ffmpeg /? cmd cinsinden kullanımın bilinmesi

+0

Teknik olarak uzantıyı değiştirirken, aslında dosyayı .jpg'ye dönüştürmez. Sadece bir yeniden adlandırılmış bitmap (buna göre: http://msdn.microsoft.com/en-us/library/aa445827%28v=vs.60%29.aspx). – nerdherd

+0

@nerdherd, anlıyorum. Ama "dönüştürme" dedi, sıkıştırma ile dönüştürmek değil;) – Searush

+0

Sadece diğer okuyucuların farkında olduğundan emin olmak istedim. Daha kullanışlı dönüşüm için alternatif bir seçenek eklemek için +1. – nerdherd

İlgili konular