1

高解像度画像と高解像度画像の圧縮バージョンの両方をデータベースに保存しています。

ユーザーが高解像度の画像を要求した場合、圧縮された画像を表示する必要があります。これが私のコードです。

問題は、その画像バイト配列をストリームとビットマップに設定すると、ファイル サイズが 2.27MB から 339kB に圧縮されることです。

ここで何が間違っていますか?

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);
}

}

4

1 に答える 1

1

同じ画像形式を使用して、受け取ったすべての異なる形式の画像をストリーミングして保存しています。

とりあえず交換するだけ

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

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

RawFormat : この画像の現在のファイル形式を取得します。

注意: 変換を必要としない新しいビットマップを作成する必要はありません。ストリームに直接保存できますSystem.Drawing.Image img

于 2013-09-19T07:29:55.173 に答える