bmp格式转换PNG格式 c语言或c++编程

作者&投稿:聊叔 (若有异议请与网页底部的电邮联系)
C语言如何实现bmp图片转换成png图片?~

自己写,要想明白,如何从BMP图片读取每个像素,然后根据PNG图片的格式以及RGB色彩算法,将BMP像素转换成png图片,最后根据PNG格式输出到文件。

打开图片之后,保存时将图片格式换成PIG格式就好了。图片格式是计算机存储图片的格式,常见的存储的格式有:bmp,jpg,tiff,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw等。

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、如何从BMP图片读取每个像素,然后根据PNG图片的格式以及RGB色彩算法,将BMP像素转换成png图片,最后根据PNG格式输出到文件。

例程:

FILE *fp = NULL;
char buf[PNG_BYTES_TO_CHECK];
LPSTR lpszFileName = lpszPathName;
if(!lpszFileName) return false;
//打开PNG文件
if(NULL == (fp = fopen(lpszFileName,"rb")))
{
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
//验证是否为PNG文件
if(fread(buf,1,PNG_BYTES_TO_CHECK,fp) != PNG_BYTES_TO_CHECK)
{
fclose(fp);
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
if( 0 != png_sig_cmp((unsigned char*)buf,(png_size_t)0,PNG_BYTES_TO_CHECK))
{
fclose(fp);
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
//以下代码读取PNG文件
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
unsigned int sig_read = PNG_BYTES_TO_CHECK;
int color_type = 0,interlace_type = 0;
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
if( NULL == png_ptr)
{
fclose(fp);
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
info_ptr = png_create_info_struct(png_ptr);
if(NULL == info_ptr)
{
 fclose(fp);
 png_destroy_read_struct(&png_ptr,&info_ptr,png_infopp_NULL);
 delete []lpszFileName;
 lpszFileName = NULL;
 return false;
}
png_init_io(png_ptr,fp);
png_set_sig_bytes(png_ptr,sig_read);
png_read_info(png_ptr,info_ptr);
if(info_ptr->bit_depth == 16)png_set_strip_16(png_ptr);
if(info_ptr->color_type == PNG_COLOR_TYPE_GRAY && info_ptr->pixel_depth < 8)
      png_set_gray_1_2_4_to_8(png_ptr);
switch (info_ptr->pixel_depth)
{
case 32:
if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)png_set_bgr(png_ptr);
png_set_invert_alpha(png_ptr);
//当为32位图像是应该如何处理,例如
//pDib->CreateDIB(info_ptr->width, info_ptr->height,32);
break;
case 24:
{
png_color_16 my_background={0,255,255,255,0};
png_set_background(png_ptr,&my_background,
PNG_BACKGROUND_GAMMA_SCREEN,0,1.0);
if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)png_set_bgr(png_ptr);
//当为32位图像是应该如何处理,例如
//pDib->CreateDIB(info_ptr->width, info_ptr->height,24);
}
break;
case 8:
case 4:
//当为32位图像是应该如何处理,例如
//if(info_ptr->num_palette>0)
//{
// DWORD *pRQ=new DWORD[info_ptr->num_palette];
// for(int i=0;i<info_ptr->num_palette;i++)
// {
// pRQ[i]=RGB(info_ptr->palette[i].red,info_ptr->palette[i].green,info_ptr->palette[i].blue);
// }
// pDib->CreateDIB(info_ptr->width, info_ptr->height,info_ptr->pixel_depth,pRQ,info_ptr->num_palette);
// delete[] pRQ;
//}
break;
default:
return false;
}
png_bytepp  prow_pointers = new png_bytep[info_ptr->height];
UINT nRowBytes = png_get_rowbytes(png_ptr,info_ptr);
UINT row;
for(row=0;row<info_ptr->height;row++)  
prow_pointers[row]=new BYTE[nRowBytes];
png_read_image(png_ptr,prow_pointers);
png_read_end(png_ptr,info_ptr);
//拷贝转换后的图像数据
for(row=0;row<info_ptr->height;row++)
memcpy(pDib->m_lpImage+(info_ptr->height-row-1)*pDib->m_nByteWidth,
prow_pointers[row],pDib->m_nByteWidth);

2、更简单的方法:用windows自带的图片和传真查看器打开要转换的图片,点击右下角的保存按钮,弹出保存对话框,选择要保存的类型。笔者经实验可转换的类型为gif,bmp,png,jpg.最大的优点是方便且不失。



查找关于图像的函数。
VB.NET的话是IMAGE类下面有相关的类来实现。


电脑文件后缀名(扩展名)大全
.pdf 便携式文档格式,内含图片文字等等 Adobe Acrobat, Adobe Acrobat Reader .pm5 PageMaker 5 排版文件 Page Maker .ppt Power Point 文件 Microsoft Power Point .ps GhostScript .psd Photoshop文件 Adobe Photoshop .pic PC Paint 图象文件 .png Portable Network Graphics 图象文件 .ppm Portable ...

电脑上哪里下载软件好一点?
所有类型音频转到 MP3, WMA, APE, FLAC, AAC, AC3, MMF, AMR, M4A, M4R, OGG, WAV, WavPack, MP2 所有类型图片转到 WebP, JPG, PNG, ICO, BMP, GIF, TIF, TGA 抓取 DVD 到视频文件,抓取音乐 CD 到音频文件 支持转换为适用于各类移动设备的 MP4、AVI、3GP、HD AVC、HD HEVC 等格式 ...

reg文件是什么类型的文件?
MOD、ST3、XT、S3M、FAR、669:该格式的文件里存放乐谱和乐曲使用的各种音色样本,。现在已经逐渐淘汰,目前只有MOD迷及一些游戏程序中尚在使用。 MOV:QUICKTIME的视频影像格式,同样采用有损压缩方法,在Windows下必须安装QuickTime程序才能播放; MP2、音乐文件; MP3:音频格式,MPEG-1 Audio Layer-3 I格式; NO:一般是...

谁能给我一个NBA2K10MP模式乔丹的存档..需带面补
乔丹MP方法: 把 png1677.iff 放到 NBA 2K10 目录,然后把 MichaelJordan.CMG 放到 Saves 文件夹,游戏里读取即可

cs能不能从网上下载```要能的话下载网站是多少 `???
输入命令mp_fadetoblack 1\/0 (1是屏幕变黑,啥也看不到,0是可以看到) 输入命令mp_forcechasecam 0\/1\/2 (0是自由模式、1只能跟着自己队友走动、2尸体视线留在原地) 10、CS窗口化问题 假如你需要用窗口模式来玩CS,请在CS参数里加上 -windows 即可。 如果又不需要窗口模式了,去掉参数-windows ,并在视频...

如何申请微信公众号?
第一步:打开微信公众号申请官网:https:\/\/mp.weixin.qq.com\/。第二步:点击网站上的“注册”链接,填写你的基本资料,如图:\/iknow-pic.cdn.bcebos.com\/3ac79f3df8dcd100f5d1a55d7e8b4710b9122f78"target="_blank"title="点击查看大图"class="ikqb_img_alink">\/iknow-pic.cdn.bcebos.com...

psp2000使用全过程
这时候在记忆棒的根目录下可以看见4个文件夹,分别是ISO, ISOMISC, PSP, MP_ROOT, 就对了。下载了的 ISO 游戏(有的ISO文件需要解压,有的不需要,怎么确认,请继续看,下面有教大家怎么确认),把整个 ISO 游戏文件夹复制到ISO的文件夹里面去。 好了。玩游戏的时间到了。从USB连接退出(记得每次拔掉USB连接,都要...

购买PSP应该注意哪些问题?
(不是所有系统的PSP都可以随意更换壁纸)壁纸文件可以为:*.BMP,*.JPG,*.PNG等格式,放于ms0:\\PSP\\PHOTO\\目录内,可再建立子目录,可任意命名,建议采用480*272大小的图片,以完全适合PSP屏幕大小。设置时先在Setting(设置)模式下,将Theme Settings(界面设置)中的Wallpaper设置为Use。然后返回Photo(照片)按三角键,...

长安CS55如何使用多媒体?
支持的视频文件格式:WMV、F4V、FLV、MP4(MPEG2\/4\/AVC)、MOV、MPG、3GP(H.264)、AVI(MPEG2\/4\/AVC)、MKV(MPEG2\/4\/AVC)、RMVB、TS、VOB。支持的图片文件格式:JPG、JPEG、BMP、PNG、GIF(仅静态第一帧)。1.本地存储 单击本地存储,进入音乐播放界面,点击列表可选择音频\/视频\/图片进行...

vivox3t的基本简介
最佳拍照 影音娱乐视频格式支持avi,mkv,mp4,3gp等格式,支持第三方应用软解 视频播放支持1080P视频播放 音乐格式支持mp3,aac,amr,mid,wav等格式 音乐特性Hi-Fi音效 图片格式支持jpg,png,gif,bmp等格式 文档格式通过安装软件支持QuickOffice,AdobePDF,ZIP管理 定位与传感器 GPS内置GPS芯片,支持A-GPS网络辅助导航功能 ...

瓮安县17190644157: bmp格式转换PNG格式 c语言或c++编程 -
桓克贝唐: BMP是最简单的图形存储格式,在c++里有朋友封装了一个类CDib.只要把图片使用附件中编辑--粘贴来源找到图画打开另存为选择你想要的格式保存就可以了.也可以右键点击选择打开方式使用图画打开相同的方法.另外photoshop 和office...

瓮安县17190644157: C语言如何实现bmp图片转换成png图片? -
桓克贝唐: 自己写,要想明白,如何从BMP图片读取每个像素,然后根据PNG图片的格式以及RGB色彩算法,将BMP像素转换成png图片,最后根据PNG格式输出到文件.

瓮安县17190644157: bmp转png怎么转 -
桓克贝唐: 批量转换任何图形格式:在ACD See中,采用浏览模式,选择要转换的所有图像文件,然后选择菜单中“工具”--->“转换文件格式”,或快捷键Ctrl+F.在“转换文件格式”对话框中,选择一个格式,如你所要求的png,点击“下一步”,再点击“下一步”,直到出现“开始转换”按键,点击即可.我用的是ACD See8,其它版本的操作也类似.

瓮安县17190644157: 如何把BMP图像格式转换成jip,gif或png格式 -
桓克贝唐: 系统自带的画图工具就可以开始——程序——附件——画图 把图片用它打开 再选择另寸为 选则 jpg格式如果gif和png 那就只能是photoshop最好了

瓮安县17190644157: 有什么办法将BMP格式变为png格式图片?
桓克贝唐: 开始---程序---附件---画图---文件---打开(打开你的照片)---图像---文件---另存为---保存类型---选你要的格式---保存.

瓮安县17190644157: 怎样把bmp 格式改变成jpg、.gif或.png格式?? -
桓克贝唐: 用图片编辑软件,比如Windows自带的画图、Acdsee、PhotoShop等,打开bmp文件,然后另存为,可以存为jpg、gif、png或其他图片格式

瓮安县17190644157: 怎么把BMP格式的图片变成PNG格式的?
桓克贝唐: 用画图板打开,然后点另存为,在文件格式中选择.png就可以了

瓮安县17190644157: 怎么把bmp格式的图片转成jpg、gif、jpeg、png格式?
桓克贝唐: 鼠标右键点你想转换的图片--打开方式--画图--然后点左上角的文件--另存为--在保存类型里选择你想转换的格式就可以

瓮安县17190644157: 怎么样把BMP格式的照片改成jpg,jpeg,gif或png格式呢?
桓克贝唐: 最简单的是 用windows自带的 [画图] 工具. 你在 开始>所有程序>附件>画图>打开要编辑的图片>在菜单栏点击文件>保存为>在保存类型那里选择 jpg、gif、png 任意一种,一般用jpg.

瓮安县17190644157: 怎么把BMP图像改为PNG格式?
桓克贝唐: 用PS打开,再另存为PNG格式就好了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网