0

我正在使用以下方法从 DICOM 文件动态生成图像:

   public ActionResult Generatemage()
        {
            FileContentResult data;
.....
    objImage = im.Bitmap(outputSize, PixelFormat.Format24bppRgb, m);

    using (var memStream = new MemoryStream())
    {
        objImage.Save(memStream, ImageFormat.Png);
        data = this.File(memStream.GetBuffer(), "image/png");
    }
      return data;
        }

我可以将图像存储为会话变量,以便使用 Point3D 对其进行修改吗?我尝试使用:

 Bitmap data = (Bitmap)Session["newimage"];

得到这两个错误:

Cannot implicitly convert type 'System.Drawing.Bitmap' to 'System.Web.Mvc.FileContentResult' and 
A local variable named 'data' is already defined in this scope

我会很感激你的建议,在此先感谢。

4

1 回答 1

0

我可以将图像存储为会话变量,以便使用 Point3D 对其进行修改吗?

我建议不要那样做。如果您还没有阅读 Nathanael 关于图像调整大小陷阱的帖子,那么我建议您现在就阅读。它可能是在谈论调整大小,但它也给出了一般处理图像的提示。在第 3 点它说:

通过将文件加载到内存来从磁盘提供文件。想想你的服务器有多少内存,单个图像有多大,在用户下载它之前它必须在内存中保留多长时间,以及你有多少用户请求图像。

在您的特定情况下,您可以将“在用户完成下载之前”替换为“在 Point3D 完成处理图像之前”。所以,我的建议是你得到那个文件的句柄,比如说可能有一个Id唯一标识每个用户Id的文件,当需要用 Point3D 处理它时使用它来检索文件,将它加载到一个MemoryStream(假设 Point3D 可以使用 mem.stream),处理它,然后处理它。以这种方式,您仅在“Point3D 处理”期间保留图像。

无法将类型“System.Drawing.Bitmap”隐式转换为“System.Web.Mvc.FileContentResult”,并且此范围内已定义名为“data”的局部变量

这很可能是因为您已这样定义data

FileContentResult data;

然后你正在做一个:

Bitmap data = (Bitmap)Session["newimage"];

同一范围内两种不同类型的相同变量。

于 2013-04-23T17:15:36.173 回答