0

早些时候,在几个论坛中似乎都提出了类似的问题,但最终似乎没有给出任何解决方案。

我得到一个 Base64 字符串,它被转换为字节数组。然后我正在创建位图标题并将其放入内存流中。然后尝试创建位图对象传递流。

当我将网站部署到 32 位服务器时,代码运行成功。但在 64 位服务器(windows server 2008 R2)的情况下,它不起作用。

代码如下:

            using (MemoryStream BmpStream = new MemoryStream())
            {
                using (BinaryWriter BitmapWriter = new BinaryWriter(BmpStream))
                {
                    //m_BinaryData is the byte array
                    m_DataOffset = 54 + m_Palette.Count * 4;
                    m_DataSize = m_BinaryData.Length;
                    m_FileSize = m_DataOffset + m_DataSize;

                    //Create 54 bytes long bitmap header
                    ....

                    //Write palette
                    WriteColorTable(BitmapWriter);
                    BitmapWriter.Write(m_BinaryData);
                    BmpStream.Position = 0;                        
                    using (Bitmap TempB = new Bitmap(BmpStream))
                    {
                        m_GifStream = new MemoryStream();
                        m_GifStream.Seek(0, SeekOrigin.Begin);
                        TempB.Save(m_GifStream,    System.Drawing.Imaging.ImageFormat.Gif);
                    } 

注意:我们正在使用 32 位机器 Visual Studio 2010 开发应用程序。我尝试将平台构建到任何 CPU,也没有显示任何变化,并且每次都会出现相同的问题。

请帮忙

更新

它只发生在具有调色板、每像素深度为 8 位的图像上。

更新

只有 8bpp 图像才会发生这种情况。使用 1bpp、4bpp、24bpp 图像进行测试,但仅在 8bpp 时发生。还有一点,我尝试使用所有 256 种颜色创建调色板,并为 8bpp 图像传递相同的颜色,然后不会引发错误。但是创建的图像全是黑色的。

与 8bpp 调色板有什么关系?在 x64 机器上也是如此。

4

1 回答 1

1

我找到了答案。调色板包含 Alpha 通道。链接

类似问题

帮助我找出问题的根本原因。.NET Bitmap 类似乎无法读取具有 64 位以下 alpha 通道的颜色。解决方法是使用 Aurigma 位图,它(与 .NET 位图不同)可以处理带或不带 Alpha 通道的 CMYK 图像。

于 2013-05-21T08:04:37.300 回答