C#サムネイルを生成して歪まない方法


最近のハンドヘルドプロジェクトでは、品目の画像の大きさが異なるため、ハンドヘルドに表示される画像の一部だけが大きく表示され、インタフェースが非常に乱れており、お客様の体験度に影響を与えています.サーバにアップロードされた画像を処理し、一定のサイズのフォーマットで保存する方法が必要です.
以下に、画像のサムネイルを取得する方法を2つご紹介します.
方法1:Imageオブジェクトを呼び出すセルフメソッドGetThumbnailImage()による画像変換 /// /// , Image /// /// /// /// Image /// Image public Image GetReducedImage2(int width, int height, Image imageFrom) { // int imageFromWidth = imageFrom.Width; int imageFromHeight = imageFrom.Height; try { // . , ; if (width >= imageFromWidth && height >= imageFromHeight) { return imageFrom; } else { Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(() => { return false; }); // Image GetThumbnailImage() Image reducedImage = imageFrom.GetThumbnailImage(width, height, callb, IntPtr.Zero); // reducedImage.Save(@"E:\640x480.png", ImageFormat.Png); return reducedImage; } } catch (Exception) { // throw new Exception(" , !"); } }
方法2:二重三次補間法を用いて、高品質の収縮を確保するために事前フィルタリングを実行し、このモードは品質の高い変換画像を生成することができる. /// /// /// /// /// /// /// public static Image GetReducedImage(int width, int height, Image imageFrom) { // int imageFromWidth = imageFrom.Width; int imageFromHeight = imageFrom.Height; // . , ; if (width >= imageFromWidth && height >= imageFromHeight) { return imageFrom; } else { // " " int X = 0; int Y = 0; // Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb); bmp.SetResolution(imageFrom.HorizontalResolution, imageFrom.VerticalResolution); using (Graphics g = Graphics.FromImage(bmp)) { // g.Clear(Color.White); // 。 。 。 g.InterpolationMode = InterpolationMode.HighQualityBicubic; // 、 。 g.SmoothingMode = SmoothingMode.HighQuality; // Image 。 g.DrawImage(imageFrom, new Rectangle(X, Y, width, height), new Rectangle(0, 0, imageFromWidth, imageFromHeight), GraphicsUnit.Pixel); // bmp.Save(@"E:\640x480.png", ImageFormat.Png); return bmp; } } }
まずこの2つの方法を共有して、みんなは試してみることができます.