【发布时间】:2014-09-19 12:59:37
【问题描述】:
我有一个图像的byte[],它是直接从图像本身读取的,我正在尝试将此字节[] 转换为Bitmap 对象。
我正在使用代码:
var provider = new MultipartMemoryStreamProvider();
var multipart = Request.Content.ReadAsMultipartAsync(provider).ContinueWith(t => {
foreach (var item in provider.Contents) {
var filename = item.Headers.ContentDisposition.FileName.Trim('\"');
var buffer = item.ReadAsByteArrayAsync();
MemoryStream mss = new MemoryStream(buffer.Result);
Bitmap bmpImage = (Bitmap)Image.FromStream(mss);
//bmpImage.GetPixel(10,10) returns ARGB values of 255,255,255,255
}
});
但是,当我调用bmpImage.GetPixel(10,10) 时,ARGB 值是255,255,255,255。这对我来说毫无意义。有谁知道为什么这种转换会导致我的像素信息丢失?
以上代码封装在ApiControllerPost()方法中:
public async Task<IHttpActionResult> Post()
【问题讨论】:
-
来源是什么格式?
-
你的缓冲区,是原始像素值吗? Image.FromStream 需要像 PNG 或 JPEG 等格式。
-
我添加了代码的其余部分来显示它的来源。数据直接从 POSTed 图像中读取。我检查了十六进制编辑器中的值,
byte[]确实具有正确的图像字节值。但由于某种原因,它仍然无法正确转换。 -
你不应该检查
t.Result吗?我对这些类型没有经验,所以我可能错了,但这是我所期望的。 -
@Brett 我的意思不是
provider.Contents。看起来依赖于类的可变性。至少,使用t.Result.Contents不是更好的做法吗?同样,我不熟悉这些课程。但它确实看起来不像是常规的设计模式。