我想在c#中動態地裁剪圖像。使用c裁剪圖像或縮小比例#
我已經提到了一些鏈接和實現如下。
參考:
- http://www.c-sharpcorner.com/blogs/resizing-image-in-c-sharp-without-losing-quality1
- http://www.c-sharpcorner.com/blogs/resizing-image-in-c-sharp-without-losing-quality1
但我越來越低質量的圖像。我在他們的服務器看到的網站,他們所上傳圖片和縮小網頁不失品質
他們是如何做呢?爲什麼我們不能在c#中完成?
CODE
public static Image ScaleImage(Image image, int width, int height)
{
if (image.Height < height && image.Width < width) return image;
using (image)
{
double xRatio = (double)image.Width/width;
double yRatio = (double)image.Height/height;
double ratio = Math.Max(xRatio, yRatio);
int nnx = (int)Math.Floor(image.Width/xRatio);
int nny = (int)Math.Floor(image.Height/yRatio);
Bitmap resizedImage = new Bitmap(nnx, nny, PixelFormat.Format64bppArgb);
using (Graphics graphics = Graphics.FromImage(resizedImage))
{
graphics.Clear(Color.Transparent);
// This is said to give best quality when resizing images
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(image,
new Rectangle(0, 0, nnx, nny),
new Rectangle(0, 0, image.Width, image.Height),
GraphicsUnit.Pixel);
}
return resizedImage;
}
}
我以前有過這個問題並解決了它,但我不記得自動櫃員機和我在工作的方式。我不知道怎麼說,你可以將它轉換爲JPEG,縮小它,然後回到位圖,因爲我認爲位圖的縮放比較不好......我不確定這甚至是我做的,但它感覺像是什麼我做到了。已經有幾年了......除非你測試並看到它,否則這將有所幫助。 –
[調整圖像C#]的可能的重複(http://stackoverflow.com/questions/1922040/resize-an-image-c-sharp) – Nino
裁剪不應該失去質量。如果你縮小它,你將永遠失去信息。請務必爲這兩個圖像設置__same dpi__設置! - 請參閱[這裏是一個類似的問題](http://stackoverflow.com/questions/26612057/where-does-this-quality-loss-on-images-come-from/26614735?s=6|0.0626#26614735) 。注意第二部分! - 也[見這裏關於你的像素格式](http://stackoverflow.com/questions/34590509/pixelformat-format32bppargb-vs-pixelformat-format64bppargb) – TaW