Vb.net 512x512 bmp图像如何具有1MB的大小
保存bmp格式的我的代码:Vb.net 512x512 bmp图像如何具有1MB的大小,vb.net,bmp,system.drawing.imaging,Vb.net,Bmp,System.drawing.imaging,保存bmp格式的我的代码: ImgResult.Save(dlgSavePicture.FileName、System.Drawing.Imaging.ImageFormat.Bmp) 我已经尝试了代码,输出是一个512x512 bmp图像,大小为1兆字节 如果使用ms paint创建515x512 bmp图像,则大小为768kb 我试着打开图像并以bmp格式重新保存,但大小仍然为1MB 512x512中的512x512 bmp图像大小能否达到1mb?或者我的代码有问题?BMP是一种非常简单的图
ImgResult.Save(dlgSavePicture.FileName、System.Drawing.Imaging.ImageFormat.Bmp)
我已经尝试了代码,输出是一个512x512 bmp图像,大小为1兆字节
如果使用ms paint创建515x512 bmp图像,则大小为768kb
我试着打开图像并以bmp格式重新保存,但大小仍然为1MB
512x512中的512x512 bmp图像大小能否达到1mb?或者我的代码有问题?BMP是一种非常简单的图像文件格式。只是一个描述图像的小标题(大小、像素格式、分辨率、颜色表),后面是一个像素数据块。从技术上讲,它可以压缩与RLE,但编码器不再麻烦。像素数据取决于像素格式,古老的是1bpp、4bpp和8bpp,它们需要颜色表。16bpp是可以发生的,不寻常的,正常的是24bpp(RGB)和32bpp(ARGB)。换句话说,每像素3或4字节 是的,512 x 512 x 4~=1兆字节。MSPaint非常明确地说明了它使用的像素格式。这是一个非常简单的绘画程序,不支持alpha混合效果。所以使用24bpp(无alpha),512x512x3~=786KB。您可以使用Paint.NET创建32bpp BMP 在您自己的程序中获得哪一个取决于您如何创建位图对象。简单版本使用与视频适配器相同的像素格式。在所有现代机器上都是32bpp。16个基点可能发生,这是非常不寻常的。如果需要其他格式,则必须使用接受PixelFormat参数的 这样做还有一个很好的理由,默认的像素格式通常不是最理想的。最好的10倍是与视频适配器的像素格式完全匹配的格式。选择在32bppArgb和32bppPArgb之间。P表示“预乘”,alpha值应用于前面的RGB值。如果您自己使用Graphics.FromImage()对位图进行大量绘制,则Argb的效率最高。PArgb对于绘画来说是最有效的,像素数据可以直接被分插到视频帧缓冲区,而无需进行转换。快十倍。您通常关心绘制速度,这是程序中最明显的瑕疵
如果您关心图像文件的大小,那么没有比PNG更好的选择了。它使用LZW压缩对像素数据进行压缩,典型的压缩率为50%或更高。JPEG也是一个不错的选择,压缩率要高得多,但它是有损的。它通过丢弃图像细节来实现高速率。适用于没有文字或线条艺术的照片,通常不需要多次压缩。BMP是一种非常简单的图像文件格式。只是一个描述图像的小标题(大小、像素格式、分辨率、颜色表),后面是一个像素数据块。从技术上讲,它可以压缩与RLE,但编码器不再麻烦。像素数据取决于像素格式,古老的是1bpp、4bpp和8bpp,它们需要颜色表。16bpp是可以发生的,不寻常的,正常的是24bpp(RGB)和32bpp(ARGB)。换句话说,每像素3或4字节 是的,512 x 512 x 4~=1兆字节。MSPaint非常明确地说明了它使用的像素格式。这是一个非常简单的绘画程序,不支持alpha混合效果。所以使用24bpp(无alpha),512x512x3~=786KB。您可以使用Paint.NET创建32bpp BMP 在您自己的程序中获得哪一个取决于您如何创建位图对象。简单版本使用与视频适配器相同的像素格式。在所有现代机器上都是32bpp。16个基点可能发生,这是非常不寻常的。如果需要其他格式,则必须使用接受PixelFormat参数的 这样做还有一个很好的理由,默认的像素格式通常不是最理想的。最好的10倍是与视频适配器的像素格式完全匹配的格式。选择在32bppArgb和32bppPArgb之间。P表示“预乘”,alpha值应用于前面的RGB值。如果您自己使用Graphics.FromImage()对位图进行大量绘制,则Argb的效率最高。PArgb对于绘画来说是最有效的,像素数据可以直接被分插到视频帧缓冲区,而无需进行转换。快十倍。您通常关心绘制速度,这是程序中最明显的瑕疵 如果您关心图像文件的大小,那么没有比PNG更好的选择了。它使用LZW压缩对像素数据进行压缩,典型的压缩率为50%或更高。JPEG也是一个不错的选择,压缩率要高得多,但它是有损的。它通过丢弃图像细节来实现高速率。适用于没有文字或线条艺术的照片,通常不需要多次压缩。我已经尝试过此代码
Public Function ConvertTo24bpp(img As Image) As Bitmap
Dim bmp = New Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
Using gr = Graphics.FromImage(bmp)
gr.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height))
End Using
Return bmp
End Function
ImgResult = New Bitmap(Original)
For j = 0 To Original.Height - 1
For i = 0 To Original.Width - 1
ImgResult.SetPixel(i, j, Color.FromArgb(resultArray2(j, i, 0), originalArray(j, i, 1), resultArray2(j, i, 2)))
Next
Next
Dim clone As Bitmap
clone = ConvertTo24bpp(ImgResult)
clone.Save(dlgSavePicture.FileName)
输出为24位512x512 bmp图像,但大小为~640 KB,而不是~678 KB
我认为输出是带有bmp扩展的png格式
我的代码出错了吗?我试过这个代码
Public Function ConvertTo24bpp(img As Image) As Bitmap
Dim bmp = New Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
Using gr = Graphics.FromImage(bmp)
gr.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height))
End Using
Return bmp
End Function
ImgResult = New Bitmap(Original)
For j = 0 To Original.Height - 1
For i = 0 To Original.Width - 1
ImgResult.SetPixel(i, j, Color.FromArgb(resultArray2(j, i, 0), originalArray(j, i, 1), resultArray2(j, i, 2)))
Next
Next
Dim clone As Bitmap
clone = ConvertTo24bpp(ImgResult)
clone.Save(dlgSavePicture.FileName)
输出为24位512x512 bmp图像,但大小为~640 KB,而不是~678 KB
我认为输出是带有bmp扩展的png格式
我的代码出错了吗?快速返回信封计算:512 x 512 x 32位/像素=1048576字节,因此即使没有优化,10MB也太多了;某处出了问题…很抱歉,图像是1mb(1.048.630字节)而不是10mb,因此如果我使用此代码System.Drawing.Imaging.ImageFormat.Bmp,它将自动保存32位Bmp?快速返回信封计算:512 x 512 x 32位/像素=1048576字节,因此即使没有优化,10mb也太多了;某处出了问题…很抱歉,图像是1mb(1.048.630字节)而不是10mb,因此如果我使用此代码System.Drawing.Imaging.ImageFormat.Bmp