用C语言实现bmp文件转为jpg文件

用C语言实现bmp文件转为jpg文件,第1张

BMP是最简单的图形存储格式,在c++里有朋友封装了一个类CDib.

只要把图片羡袜使用附件中编辑--粘贴来源找到图画打开另存为选择你想要的格式保存就可以了。也可以右键点击选择兄侍激打开方式使用图画打开相同的方法。另谈老外photoshop 和office2003的picture manage也有这个功能。

Private Sub mnuconvertBMPtoJPG_Click()

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"

quality = 75

' Get info on the file we're to load

rcode = bmpinfo(bmp_fname, bdat)

If (rcode <>NO_ERROR) Then

MsgBox "Cannot find file", 0, "Error encountered!"

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 "Not enough memory", 0, "Error encountered!"

Exit Sub

End If

' Load image

rcode = loadbmp(bmp_fname, tmpimage)

If (rcode <>NO_ERROR) Then

freeimage tmpimage ' Free image on error

MsgBox "Cannot load file", 0, "Error encountered!"

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

End Sub

........... Add these defines and declarations to your Global module ...........

' 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

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

《图像处理----做一个自己的photoshop》

大部分都是源码,其中有bmp<-->jgep<-->GIF的代码.

方法步骤如下:

1、 在散丛芹我的电脑或资源郑掘管理器中右击图片文件

 冲毕 2、 选择打开方式为画图;

3、 在打开的画图程序中选择文件,点击另存为,选择JPEG图片即可。

您好,

其实只需要简单得几步就可以。镇基谨如:

private void SaveBmpToJpegFile(string filename)

{

Image bmpImage = Image.FromFile(filename)

string newFileName = filename.Substring(0, filename.LastIndexOf('.')) + ".jpg"

bmpImage.Save(newFileName, System.Drawing.Imaging.ImageFormat.Jpeg)

}

首先根据BMP文件名建立一个System.Drawing.Image对象,然后直接调用Image.Save方法就OK了。

或者也可以这御基样:

private void SaveToJpegFile(string filename)

{

Image bmpImage = Image.FromFile(filename)

Graphics bmpGra = Graphics.FromImage(bmpImage)

bmpGra.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality//设置高复合级别

bmpGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High//设置高差值算法

bmpGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality//设置高呈现模式

string newFileName = filename.Substring(0, filename.LastIndexOf('.')) + "锋扰.jpg"

bmpImage.Save(newFileName, System.Drawing.Imaging.ImageFormat.Jpeg)

}

其实上面的方法就可以了,默认的转换质量就很不错了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12359842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存