.bmp 不是 Windows 位图?

发布于 2024-11-02 13:53:13 字数 1610 浏览 3 评论 0原文

当我创建这样的位图时:

var testImage = new Bitmap(320, 240);
                var testDataLock = testImage.LockBits(new Rectangle(new Point(), testImage.Size),
                                    System.Drawing.Imaging.ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

                unsafe
                {
                    var aaa = CamData.ToArray();
                    UInt32 lOffset = 0;
                    UInt32 lPos = 0;
                    byte* lDst = (byte*)testDataLock.Scan0;
                    byte bitshift = 8;
                    fixed (UInt16* lSrc = aaa)
                    {
                        while (lOffset < testImage.Width * testImage.Height)
                        {
                            lDst[lPos] = (byte)(lSrc[lOffset] >> bitshift);
                            lDst[lPos + 1] = lDst[lPos];
                            lDst[lPos + 2] = lDst[lPos];

                            lOffset++;
                            lPos += 3;

                            // take care of the padding in the destination bitmap
                            if ((lOffset % testImage.Width) == 0)
                                lPos += (UInt32)testDataLock.Stride - (uint)(testImage.Width * 3);
                        }

                    }
                }
                testImage.UnlockBits(testDataLock);
                testImage.Save(@"H:\Test.bmp");

尝试使用可视化库打开此文件时总是出现错误:

Unknown file type! H:\test.bmp is not a Windows BMP file!

但在 Windows 中我可以使用查看器等打开该文件...没有问题 有人知道为什么我会收到这个错误吗?

谢谢

when I create a bitmap like this:

var testImage = new Bitmap(320, 240);
                var testDataLock = testImage.LockBits(new Rectangle(new Point(), testImage.Size),
                                    System.Drawing.Imaging.ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

                unsafe
                {
                    var aaa = CamData.ToArray();
                    UInt32 lOffset = 0;
                    UInt32 lPos = 0;
                    byte* lDst = (byte*)testDataLock.Scan0;
                    byte bitshift = 8;
                    fixed (UInt16* lSrc = aaa)
                    {
                        while (lOffset < testImage.Width * testImage.Height)
                        {
                            lDst[lPos] = (byte)(lSrc[lOffset] >> bitshift);
                            lDst[lPos + 1] = lDst[lPos];
                            lDst[lPos + 2] = lDst[lPos];

                            lOffset++;
                            lPos += 3;

                            // take care of the padding in the destination bitmap
                            if ((lOffset % testImage.Width) == 0)
                                lPos += (UInt32)testDataLock.Stride - (uint)(testImage.Width * 3);
                        }

                    }
                }
                testImage.UnlockBits(testDataLock);
                testImage.Save(@"H:\Test.bmp");

I alway get an error while trying to open this file with an visualisation lib:

Unknown file type! H:\test.bmp is not a Windows BMP file!

but in windows I can open the file with the viewer etc... there are no problems
does anybody know why I get this error?

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

紫竹語嫣☆ 2024-11-09 13:53:13

您可以将 System.Drawing.Bitmap 保存到有效的 windows .bmp,如下所示:

//bmp is a System.Drawing.Bitmap
bmp.Save("MyBitmap.bmp", ImageFormat.Bmp);

第二个参数(您未包含)指定必须保存位图的格式。

另外,请务必检查您的可视化库是否支持 24 位每像素位图,
因为这是您创建位图的格式。

请参阅:
PixelFormat.Format24bppRgb

you can save a System.Drawing.Bitmap to a valid windows .bmp like this:

//bmp is a System.Drawing.Bitmap
bmp.Save("MyBitmap.bmp", ImageFormat.Bmp);

The second parameter (which you did not include) specifies the format in which the bitmap must be saved.

Also, be sure to check if your visualisation lib supports 24Bit Per Pixel bitmaps,
since this is the format you are creating your bitmap in.

see:
PixelFormat.Format24bppRgb

入怼 2024-11-09 13:53:13

正如您可以阅读 MSDN 中的“备注”部分,您的图像将被保存如果未指定编码器,则为 PNG。

As you can read at MSDN in the Remarks section your image will be saved as PNG if no encoder is specified.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文