早些时候,在几个论坛中似乎都提出了类似的问题,但最终似乎没有给出任何解决方案。
我得到一个 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 机器上也是如此。