C # — Почему, когда я пытаюсь загрузить изображение с Windows Phone, оно загружает случайную вещь?

Я пытаюсь загрузить изображение из моего приложения Магазина Windows (Windows Phone 8.1) на хостинг (используя PHP), но всегда, когда я «загружаю» изображение, и я проверяю его результат «изображение» — это поврежденный файл. Я думаю, что это связано с преобразованием байтового массива, но я не нашел другого способа сделать это. Это мой код:

Код C #:

byte[] ConvertBitmapToByteArray()
{
WriteableBitmap bmp = bitmap;

using (Stream stream = bmp.PixelBuffer.AsStream())
{
MemoryStream memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
return memoryStream.ToArray();
}
}

public async Task<string> Upload()
{
try
{
using (var client = new HttpClient())
{
using (var content =
new MultipartFormDataContent())
{
byte[] data = ConvertBitmapToByteArray();
content.Add(new StreamContent(new MemoryStream(data)), "userfile", fileNewImage);

using (
var message =
await client.PostAsync("http://xplace.com/uploadtest.php", content))
{
var input = await message.Content.ReadAsStringAsync();

return input;
}
}
}
}
catch (Exception ex)
{
return null;
}
}

Код PHP:

<?php
header('Content-Type: application/json');
$uploaddir = getcwd();
$uploadfile = $uploaddir . "/" . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo '{"result": "sucessfull"}';
} else {
echo '{"result": "-1"}';
}
?>

Я хотел бы, чтобы кто-то мог дать мне представление о том, в чем я моя ошибка и как ее исправить. Заранее спасибо за ваши достойные знания.

2

Решение

Вы должны передать byte[] data через BitmapEncoder преобразовать его в общий формат изображения (например, BMP, PNG, JPEG) перед загрузкой. В данный момент вы просто отправляете необработанные данные пикселей ARGB без информации о том, как их следует интерпретировать.

Например, чтобы закодировать как BMP:

...
byte[] data = bitmap.PixelBuffer.ToArray();

using (var stream = new InMemoryRandomAccessStream())
{
// encoder *outputs* to stream
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);

// encoder's input is the bitmap's pixel data
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight,
(uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, data);

await encoder.FlushAsync();

content.Add(new StreamContent(stream.AsStream()), "userfile", fileNewImage);
...
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]