GDI+ 通用错误

2023-12-09

当我的图像从网络服务器上的数据库加载时,我看到以下错误:

GDI+ 中发生一般错误。在 System.Drawing.Image.Save(Stream流,ImageCodecInfo编码器, 编码器参数(encoderParams) at System.Drawing.Image.Save(Stream 流,ImageFormat 格式) at MyWeb.Helpers.ImageHandler.ProcessRequest(HttpContext上下文)

我所有的代码试图做的就是加载图像,任何人都可以看一下并让我知道我做错了什么吗?

注意 - 如果我在本地计算机上测试它,则此方法有效,但当我将其部署到 Web 服务器时,此方法无效。

public void ProcessRequest(HttpContext context)
{
    context.Response.Clear();          

    if (!String.IsNullOrEmpty(context.Request.QueryString["imageid"]))         
    {
        int imageID = Convert.ToInt32(context.Request.QueryString["imageid"]);
        int isThumbnail = Convert.ToInt32(context.Request.QueryString["thumbnail"]);

        // Retrieve this image from the database
        Image image = GetImage(imageID);

        // Make it a thumbmail if requested
        if (isThumbnail == 1)
        {
            Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
            image = image.GetThumbnailImage(200, 200, myCallback, IntPtr.Zero);
        }

        context.Response.ContentType = "image/png";             

        // Save the image to the OutputStream             
        image.Save(context.Response.OutputStream, ImageFormat.Png);
    }         
    else         
    {             
        context.Response.ContentType = "text/html";             
        context.Response.Write("<p>Error: Image ID is not valid - image may have been deleted from the database.</p>");         
    } 
}

该行发生错误:

image.Save(context.Response.OutputStream, ImageFormat.Png);

UPDATE

我已将代码更改为这样,但问题仍然发生:

var db = new MyWebEntities();

var screenshotData = (from screenshots in db.screenshots
                      where screenshots.id == imageID
                      select new ImageModel
                      {
                           ID = screenshots.id,
                           Language = screenshots.language,
                           ScreenshotByte = screenshots.screen_shot,
                           ProjectID = screenshots.projects_ID
                      });

foreach (ImageModel info in screenshotData) 
 {
    using (MemoryStream ms = new MemoryStream(info.ScreenshotByte))
    {
         Image image = Image.FromStream(ms);

         // Make it a thumbmail if requested
         if (isThumbnail == 1)
         {
              Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
              image = image.GetThumbnailImage(200, 200, myCallback, IntPtr.Zero);
         }

         context.Response.ContentType = "image/png";

         // Save the image to the OutputStream             
         image.Save(context.Response.OutputStream, ImageFormat.Png);

    } }

Thanks.


大概是出于同样的原因this guy遇到了问题 - 因为从一个图像构建的生命周期Stream,流不得被破坏。

所以如果你的GetImage函数从流中构造返回的图像(例如MemoryStream)然后在返回图像之前关闭流,那么上面的操作将会失败。我的猜测是你的GetImage看起来有点像这样:

Image GetImage(int id)
{
    byte[] data = // Get data from database
    using (MemoryStream stream = new MemoryStream(data))
    {
        return Image.FromStream(data);
    }
}

如果是这种情况,请尝试GetImage返回MemoryStream(或者可能是字节数组)直接这样你就可以创建Image实例在你的ProcessRequest仅当该图像的处理完成时才处理该流。

这在文档但它是在小字里写的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDI+ 通用错误 的相关文章

随机推荐

  • jsf 模板中的后台 url 路径

    我在这里遇到麻烦了 我有一个 JSF 应用程序 它有一个名为的模板文件基本模板 xhtml 该文件位于 resources template 文件夹中 遵循文件代码
  • 如何在从datalab运行的数据流管道中使用谷歌云存储

    我们一直在 datalab 中运行一个 Python 管道 该管道从 google 云存储中的存储桶中读取图像文件 导入 google datalab storage 最初我们使用 DirectRunner 效果很好 但现在我们尝试使用 D
  • 为什么 python max('a', 5) 返回字符串值?

    追溯一个ValueError cannot convert float NaN to integer我发现该行 max a 5 max 5 a 将返回a而不是 5 在上面的例子中我使用了示例字符串a但在我的实际情况下 字符串是NaN 拟合过
  • Spring中如何在请求参数中发送特殊字符

    如何处理请求参数中的特殊字符 这是我的控制器 Scope request RestController public class GetOperatorSeries RequestMapping value test method Requ
  • 为什么易失性不能正常工作

    今天我正在使用以下命令创建一项超时作业TimerTask但遇到了一个新问题 我有一个static volatile boolean多变的flag 我的理解是 一旦这个变量的值发生变化 所有正在运行的都会通知它thread 但是当我运行这个程
  • 模拟 Java 输入流

    请提供指针来帮助我模拟 java InputStream 对象 这是我希望模拟的代码行 InputStreamReader inputData new InputStreamReader System in bufferdReader ne
  • 在sql server中执行python脚本

    Experts 只是好奇想知道 有没有办法在任何sql服务器中执行python脚本 如果是这样 请给我提供一些参考链接 要在 sql server 中执行 python 脚本 请参考此question 欲了解更多详细信息 请阅读此内容doc
  • Angular2 Beta 依赖注入

    我有一个加载 QApi 服务的 NavBar 组件 QApi 服务加载 UserService 但出现以下错误 EXCEPTION No provider for UserService NavBarComponent gt QApi gt
  • 如何让Android Service与Activity通信

    我正在编写我的第一个 Android 应用程序 并试图了解服务和活动之间的通信 我有一个服务将在后台运行并执行一些 GPS 和基于时间的日志记录 我将有一个用于启动和停止服务的活动 因此 首先 我需要能够确定活动启动时服务是否正在运行 这里
  • iPhone 所有视图控制器都有一个标题

    我有一个带有选项卡栏控制器 带有 4 个视图控制器 的应用程序 它包含一个导航控制器 所有这些都是以编程方式创建的 我的问题 有没有一种方法可以为所有视图控制器设置一个导航栏标题 例如 当我切换选项卡时 标题是相同的 对我来说理想的解决方案
  • 在 SELECT 列表中的其他位置引用别名

    我有以下查询 select FirstName LastName Case When LastName Jones then N A End as Other Case When Other is not null then 1 else
  • 为什么这些 apt 软件包在 Ubuntu 和 Heroku 上的行为不一样?

    我想用ZBar从Python开始Heroku 在常规 Ubuntu 14 04 服务器上我可以运行 sudo apt get install python qrtools OR sudo apt get install zbar tools
  • 如何使用 ASP.NET 解析 JSON 字符串?

    我正在使用 Sendgrid API 发送和检索已发送邮件的统计信息 我想将 API 的响应存储在数据库中 protected void btnBounces Click object sender EventArgs e try stri
  • android java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行、第 0 列

    我正在开发一个应用程序 它下载一些文件并将其文本保存在 file content 字段中到数据库中 文件大小可以从几 KB 到 10 MB 不等 该应用程序在保存时适用于所有尺寸 在长 file content 记录上使用 select 语
  • Plotly:带有下拉菜单的散点图,用于更改数据和计算注释

    我正在尝试制作一个带有 2 个下拉菜单的散点图 用于选择要绘制 x 轴和 y 轴的数据列 来自 pandas 数据框 我还希望该图具有随下拉选择而变化的相关统计注释 因为注释是根据 x 和 y 数据作为参数计算的 我已经成功地使用下面的代码
  • 使用操作按钮刷新主面板屏幕

    我正在构建一个闪亮的应用程序 我想刷新主面板屏幕 这是示例代码 我有一个提交按钮来显示数据 我有一个刷新按钮来清除屏幕 我不太确定如何在 R 和闪亮中编写重新刷新按钮的代码 因为我对此很陌生 感谢您的关注 library DT ui lt
  • React hooks useEffect 第二次调用 API 和第一次调用 API 响应也返回

    我正在使用 useEffect 获取 API 并且 API 响应正确 例如 response message This is a image link status success error null 第二次 当我收到下一个 API 调用
  • 在 Android 中的 ViewPager 中将子 Fragment 添加到父 Fragment

    I m developing an app that has some tabs something like this 每个选项卡都是一个 Fragment 每个 Fragment 显示文章 类别和一些其他信息的列表视图 我想做的是 当我
  • 千字节/兆字节/太字节的表示

    我对不同字节单位的表示有点困惑 自始至终都认为 1 字节 8 位 然而 在很多来源中我看到 1 KB 2 10 字节 1024 字节 AND 1 KB 1000 字节 这不就是顶撞在这两种情况下都规定 1 字节是 8 位 不同的来源对这些不
  • GDI+ 通用错误

    当我的图像从网络服务器上的数据库加载时 我看到以下错误 GDI 中发生一般错误 在 System Drawing Image Save Stream流 ImageCodecInfo编码器 编码器参数 encoderParams at Sys