1

画像をサムネイル サイズにリサイズしている画像があります。画像サイズ [700(幅)* 600(高さ)] を使用している場合は正常に動作します。元のサイズは、このサイズの画像が 10 個あるとします。

しかし、サイズ[1100 * 1200]の元のサイズの画像を使用すると、画像 のサイズがサムネイルに変更されますが、他のサムネイル画像のサイズと一致しません

リストビュー コントロールで表示する と、[700*600] のサイズのすべての画像が 1 つのサイズで表示されます

[1100*1200] のサイズの画像は 1 つのサイズで表示されます [他の画像より少し小さい]

したがって、リストビューコントロールに画像を表示していると、10個の画像すべてが1つのサイズで表示されますが、1つの画像は小さいサイズで表示されます

そして時々、すべての画像が正常にロードされます

ただし、一部の画像は表示されません 10 画像のうちのいくつかの画像のみが表示されます 2 画像は表示されません

System.Drawing.Image objImage = System.Drawing.Bitmap.FromFile(System.Web.HttpContext.Current.Server.MapPath(@"Images\" + sImageFileName));
if (sImageFileName != null)
{
    if (iThumbSize == 1)
    {

        dHeight = objImage.Height;
        dWidth = objImage.Width;
        dNewHeight = 100;
        dNewWidth = 100;
        objImage = objImage.GetThumbnailImage((int)dNewWidth, (int)dNewHeight, new System.Drawing.Image.GetThumbnailImageAbort(callback), new IntPtr());
}

これは私が使用しているコードで、サイズの高さと幅を100に設定しています

どんな助けでも素晴らしいでしょうありがとう

4

2 に答える 2

1

コードの問題はわかりませんが、Imageオブジェクトを使用する代わりに、Graphicsオブジェクトを使用して画像を描画することをお勧めします。
次に例を示します。

Bitmap newImage = new Bitmap(newWidth, newHeight); using (Graphics gr = Graphics.FromImage(newImage)) {
    gr.SmoothingMode = SmoothingMode.AntiAlias;
    gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
    gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
    gr.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight)); }
于 2009-12-02T07:36:17.920 に答える
0

ListView コントロール (および ImageList も) は、均一なサイズの画像を操作するように設計されています。変かもしれませんが、これが現状です。そのため、ListView を思い通りに動作させます。通常のサムネイルのすべての画像から SquareThumbnail を作成しました。

private void Thumbnail_Square()
{
    Size size = new Size(Settings.Thumbnail.Size, Settings.Thumbnail.Size);
    this._squareThumbnail = new Bitmap(size.Width, size.Height, this._thumbnail.PixelFormat);
    Graphics g = Graphics.FromImage(this._squareThumbnail);
    g.FillRectangle(Brushes.Purple, 0, 0, size.Width, size.Height);
    size = this._thumbnail.Size;
    Point location = new Point(
        (Settings.Thumbnail.Size - size.Width) / 2,
        (Settings.Thumbnail.Size - size.Height) / 2);
    g.DrawImage(this._thumbnail,
    new Rectangle(location.X, location.Y, size.Width, size.Height),
    new Rectangle(0, 0, this._thumbnail.Width, this._thumbnail.Height), GraphicsUnit.Pixel);
    g.Dispose();
}

ImageList.TransparentColor = Color.Purple見栄えを良くするためにフォームで使用しました。

于 2011-01-09T14:31:14.973 に答える