Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 512x512 bmp图像如何具有1MB的大小_Vb.net_Bmp_System.drawing.imaging - Fatal编程技术网

Vb.net 512x512 bmp图像如何具有1MB的大小

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是一种非常简单的图

保存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