2013-09-19 5 views
1

Я сохраняю как высокое разрешение, так и сжатую версию изображения с высоким разрешением в базе данных.Дисплей с высоким разрешением изображения

Когда пользователь запрашивает изображение с высоким разрешением, мне нужно отобразить это еще сжатое. вот мой код.

Проблема заключается в том, что когда я установил этот байтовый массив изображений в поток и растровое изображение, размер файла сжат с 2,27 МБ до 339 КБ.

Что я здесь делаю неправильно?

private void DisplayImageFromBytes(byte[] byteArray, int resizeWidth, bool isHiResImage) { 

if (isHiResImage) 
{ 
    Stream stream = new MemoryStream(byteArray); 
    System.Drawing.Image img = System.Drawing.Image.FromStream(stream); 
    Bitmap bitmap = null; 

    if (resizeWidth > 0 && img.Width > resizeWidth) 
    { 
     int newHeight = (int)((float)img.Height * ((float)resizeWidth/(float)img.Width)); 
     bitmap = new Bitmap(img, resizeWidth, newHeight); 
    } 
    else 
    { 
     bitmap = new Bitmap(img); 
    } 
    Response.ContentType = "image/Jpeg"; 
    bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
    stream.Dispose(); 
    img.Dispose(); 
    bitmap.Dispose(); 
} 
else 
{ 
    DisplayImageFromBytes(byteArray, resizeWidth); 
} 

}

+0

SO делает ваш формат изображения с высоким разрешением Jpeg? – Rezoan

+0

да .. в настоящее время любой тип изображения может быть загружен! – Aruna

+1

Вы используете тот же формат изображения для всего изображения, которое вам попало. Просто попробуйте использовать img.RawFormat insted of System.Drawing.Imaging.ImageFormat.Jpeg. в bitmap.Save(); и посмотреть, работает ли это для вас. – Rezoan

ответ

1

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

Сейчас просто заменить

bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 

с

bitmap.Save(Response.OutputStream, img.RawFormat); 

RawFormat: получите текущий формат файла этого изображения.

N.B: Вам не нужно создавать новое растровое изображение, которое не требует никакого преобразования. вы можете напрямую сохранить его в потоке от System.Drawing.Image img

Смежные вопросы