Не может представить изображение к HttpContext. Ответ. OutputStream

Объединить с предложением where для меня:

merge into table1
using table2
on (table1.id = table2.id)
when matched then update set table1.startdate = table2.start_date
where table1.startdate > table2.start_date;

Вам нужно предложение WHERE, потому что столбцы, на которые ссылается в предложении ON, не могут быть обновлены.

7
задан casperOne 25 February 2009 в 05:47
поделиться

4 ответа

Писатель действительно должен стремиться записать в потоке правильно.

, Но в Вашем последнем исходном коде, удостоверьтесь, что Вы действительно используете любой MemoryStream. ToArray () для получения надлежащих данных или, если Вы не хотите копировать данные, используют MemoryStream. GetBuffer () с MemoryStream. Длина а не длина возвращенного массива.

GetBuffer возвратит внутренний буфер, используемый MemoryStream и его длиной, обычно больше, чем длина данных, которые были записаны в поток.

Это избежит Вас, чтобы отправить мусор в конце потока и не испортить некоторый строгий декодер изображения, который не терпел бы запаздывание мусора. (И передайте меньше данных...)

6
ответ дан 6 December 2019 в 23:13
поделиться

Я полагаю, что проблема состоит в том что Ответ. OutputStream не поддерживает поиск. Для сохранения PNG (или JPEG), объект изображения должен быть в состоянии записать вывод непоследовательно. Если бы я помню правильно, это работало бы, если Вы сохранили образ как BMP, так как тот формат изображения может быть записан, не ища поток.

1
ответ дан 6 December 2019 в 23:13
поделиться

Хорошо я использовал обертку для Потока (реализует Поток и передает вызовы базовому потоку) определить то Изображение. Сохраните () свойства Position и Length вызовов, не проверяя CanSeek, который возвращает false. Это также пытается установить Положение на 0.

, Таким образом, это кажется, промежуточный буфер требуется.

0
ответ дан 6 December 2019 в 23:13
поделиться

Image.Save(MemoryStream stream) действительно требует объект MemoryStream, который можно искать. Поток context.Response.OutputStream является только прямым и не поддерживает поиск, поэтому вам нужен промежуточный поток. Однако вам не нужен буфер массива байтов. Вы можете писать непосредственно из временного потока памяти в context.Response.OutputStream:

/// <summary>
/// Sends a given image to the client browser as a PNG encoded image.
/// </summary>
/// <param name="image">The image object to send.</param>
private void SendImage(Image image)
{
    // Get the PNG image codec
    ImageCodecInfo codec = GetCodec("image/png");

    // Configure to encode at high quality
    using (EncoderParameters ep = new EncoderParameters())
    {
        ep.Param[0] = new EncoderParameter(Encoder.Quality, 100L);

        // Encode the image
        using (MemoryStream ms = new MemoryStream())
        {
            image.Save(ms, codec, ep);

            // Send the encoded image to the browser
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ContentType = "image/png";
            ms.WriteTo(HttpContext.Current.Response.OutputStream);
        }
    }
}

Полнофункциональный пример кода доступен здесь:

Auto-Generate Anti-Aliased Text Images with ASP.NET

4
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: