【发布时间】:2010-10-29 14:59:09
【问题描述】:
我正在使用System.Drawing 类从用户上传的照片中生成缩略图和带水印的图像。上传原件后,用户还可以使用 jCrop 裁剪图像。我从其他人那里接手了这段代码,并希望对其进行简化和优化(它正被用于高流量的网站)。
前面的人有静态方法,接收位图作为参数并返回一个,内部分配和处置Graphics 对象。我的理解是Bitmap实例包含内存中的整个图像,而Graphics基本上是一个绘制操作队列,并且是幂等的。
目前流程如下:
- 接收图像并将其存储在临时文件中。
- 接收裁剪坐标。
- 将原始位图加载到内存中。
- 从原始位图创建一个新位图,应用裁剪。
- 在新位图上做一些疯狂的亮度调整,也许(?)返回一个新位图(我不想碰这个;指针算法比比皆是!),我们称之为 A。
- 从生成的位图创建另一个位图,应用水印(我们称之为 B1)
- 从 A 创建一个 175x175 的缩略图位图。
- 从 A 创建一个 45x45 的缩略图位图。
这似乎是很多内存分配;我的问题是:重写部分代码并重用Graphics 实例是否是一个好主意,实际上是创建一个管道?实际上,我只需要内存中的 1 张图像(原始上传),其余的可以直接写入磁盘。所有生成的图像都需要裁剪和亮度转换,以及该版本独有的单一转换,从而有效地创建操作树。
有什么想法或想法吗?
哦,我可能应该提一下,这是我第一次真正使用 .NET,所以如果我说的有些混乱,请耐心等待并给我一些提示。
【问题讨论】:
-
很遗憾,这是您第一次与 .NET 交互。 IDisposable 模式是我对框架真正唯一持久的挫败感。这种“使用”业务是最深奥的常用功能 - 大多数事情都非常简单。
-
好问题,我说! +1
-
我不得不查找“幂等”...好词。
-
发现您有性能问题?
-
+1 表示“疯狂的亮度调节”