C# 使用c语言裁剪图像或缩小比例

C# 使用c语言裁剪图像或缩小比例,c#,image,C#,Image,我想在c中实时裁剪图像 我已经参考了一些链接和实现如下 参考: 但是我得到了低质量的图像。我已经看到网站,他们上传的图像在他们的服务器和规模缩小网站没有失去质量 他们做得怎么样?为什么我们不能用c语言呢 密码 你可以使用imagemagic。它有自己的dll来与VS一起工作,所以有一个很好的论坛,在那里你可以找到各种各样的例子。我用它做了一个程序。我花了大约半个小时的时间,这不是一个大的应用程序,它只用于商业公司制作大量大小为4 TB的裁剪图片。 在这里你可以找到一些例子 ImageMagick

我想在c中实时裁剪图像

我已经参考了一些链接和实现如下

参考:

但是我得到了低质量的图像。我已经看到网站,他们上传的图像在他们的服务器和规模缩小网站没有失去质量

他们做得怎么样?为什么我们不能用c语言呢

密码
你可以使用imagemagic。它有自己的dll来与VS一起工作,所以有一个很好的论坛,在那里你可以找到各种各样的例子。我用它做了一个程序。我花了大约半个小时的时间,这不是一个大的应用程序,它只用于商业公司制作大量大小为4 TB的裁剪图片。 在这里你可以找到一些例子


ImageMagick绝对是一个可行的解决方案,GraphicsMagick也是,尽管我不确定libvips是否有C特定的绑定,但确实如此

您可能还想尝试或其他类似的功能齐全的第三方图像优化和交付解决方案来为您调整大小。

您可以尝试使用C绑定。它是一个懒惰的、流式的、需求驱动的图像处理库,因此它可以执行类似这样的操作,而无需加载整个图像

例如,它附带了一个方便的图像缩略图:

Image Image=Image.Thumbnailimage.jpg,300300; image.WriteToFilemy-thumboil.jpg;
我过去曾遇到过这个问题,并解决了它,但我不记得我和ATM是如何工作的。我想说,你可以把它转换成JPEG格式,缩小它,然后再回到位图,因为我觉得位图的缩放效果不太好。。。我甚至不确定我是怎么做到的,但感觉就像我做的一样。已经好几年了。。。我会调查的,除非你测试并看到这一点,这很有帮助。可能的重复种植不应该失去质量。如果你缩小它,你总是会丢失信息。确保两幅图像的dpi设置相同!!-看见注意第二部分你也试过了吗?这对于DrawImage的正确结果是必需的:Bitmap resizedImage=新的Bitmapnnx、nny、PixelFormat。???;resizedImage.SetResolutionimage.HorizontalResolution,image.VerticalResolution;
 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;
            }
        }