我遇到的问题是这样的,我本来要做一个把图片录成AVI的程序,在网上查了很多源码几乎都是用bmp格式的图片录的,但是我手上的图片是jpg格式的,所以我首先需要在程序里把jpg格式的图片转成bmp格式。然后我接着找jpg转bmp的程序源码,找到了几个,试了下可以运行,于是乎我就想把转成的bmp录成avi,可是失败了。但是图片是转成功了的。
我又试着用ACDSEE批量转换图片,也就是批量的把jpg格式的文件转换成bmp格式的,然后拿这些图片进行avi的录像,结果成功了,而且效果很好。
我就纳闷了,为什么我用自己下的程序转的图片就录不成功呢,我对比了一下转换后的两种bmp图片,无论是文件大小,像素大小,还是位深度都是一模一样的。然后我就用二进制的形式打开了文件查看,发现里边文件信息一点都不一样,可是显示的图片却是一模一样的。希望高手给解答一下我的困惑,我把两种bmp格式文件的二进制码贴上来一点,作为对比。以下二进制码为ACDSEE转过来的bmp的前几行
BM6 6 ( € ? BF@BF@DF@DF@GE@HFALFALFARGCQFBTEBTEBZGD\IF_JHaLJZPI
以下二进制码为我下的程序转成的bmp的前几行
BM6 6 ( € ? ? ? BG>BG>DG>DG>HF>HF>KE>KE>QG@PF?UE?UE?YFA[HC^JE
我又试着用ACDSEE批量转换图片,也就是批量的把jpg格式的文件转换成bmp格式的,然后拿这些图片进行avi的录像,结果成功了,而且效果很好。
我就纳闷了,为什么我用自己下的程序转的图片就录不成功呢,我对比了一下转换后的两种bmp图片,无论是文件大小,像素大小,还是位深度都是一模一样的。然后我就用二进制的形式打开了文件查看,发现里边文件信息一点都不一样,可是显示的图片却是一模一样的。希望高手给解答一下我的困惑,我把两种bmp格式文件的二进制码贴上来一点,作为对比。以下二进制码为ACDSEE转过来的bmp的前几行
BM6 6 ( € ? BF@BF@DF@DF@GE@HFALFALFARGCQFBTEBTEBZGD\IF_JHaLJZPI
以下二进制码为我下的程序转成的bmp的前几行
BM6 6 ( € ? ? ? BG>BG>DG>DG>HF>HF>KE>KE>QG@PF?UE?UE?YFA[HC^JE
bfType As Integer
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End Type
Public Type BITMAPINFOHEADER '40 bytes
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其中如果biHeight 的值为正的,表示下面的图像数据是从图像的左下角开始向由向上保存的,而如果这个biHeight 是负值,则和我们计算机的屏幕坐标一致了,即下面的图像数据是从图像的左上角开始向右向下保存的,这也就是Photoshop中保存BMP图像时的”翻转行序“的意义。