Bazen çok büyük bir yapı çizimleri var, bazen 22466x3999, biraz derinlik 24 veya daha büyük. Bunları daha küçük sürümlere yeniden boyutlandırabilir ve görüntünün bölümlerini daha küçük resimlere ayırabilmem gerekir. görüntü kırpmaC# Büyük resimleri kırp ve yeniden boyutlandır
public static void ResizeImage(string OriginalFile, string NewFile, int NewWidth, int MaxHeight, bool OnlyResizeIfWider)
{
System.Drawing.Image FullsizeImage = System.Drawing.Image.FromFile(OriginalFile);
if (OnlyResizeIfWider)
{
if (FullsizeImage.Width <= NewWidth)
{
NewWidth = FullsizeImage.Width;
}
}
int NewHeight = FullsizeImage.Height * NewWidth/FullsizeImage.Width;
if (NewHeight > MaxHeight)
{
NewWidth = FullsizeImage.Width * MaxHeight/FullsizeImage.Height;
NewHeight = MaxHeight;
}
System.Drawing.Image NewImage = FullsizeImage.GetThumbnailImage(NewWidth, NewHeight, null, IntPtr.Zero);
FullsizeImage.Dispose();
NewImage.Save(NewFile);
}
Ve bu kodu:
ben here bulunan resimlerden yeniden boyutlandırmak için aşağıdaki kodu kullanıyoruz
public static MemoryStream CropToStream(string path, int x, int y, int width, int height)
{
if (string.IsNullOrWhiteSpace(path)) return null;
Rectangle fromRectangle = new Rectangle(x, y, width, height);
using (Image image = Image.FromFile(path, true))
{
Bitmap target = new Bitmap(fromRectangle.Width, fromRectangle.Height);
using (Graphics g = Graphics.FromImage(target))
{
Rectangle croppedImageDimentions = new Rectangle(0, 0, target.Width, target.Height);
g.DrawImage(image, croppedImageDimentions, fromRectangle, GraphicsUnit.Pixel);
}
MemoryStream stream = new MemoryStream();
target.Save(stream, image.RawFormat);
stream.Position = 0;
return stream;
}
}
Sorunum i elde ediyoruz Görüntüyü yeniden boyutlandırmaya çalıştığımda Sytem.OutOfMemoryException ve tam görüntüyü FullsizeImage'a yükleyemem.
Ne bilmek isterim, görüntünün tamamını belleğe yüklemeden nasıl yeniden boyutlandırırım?
görürseniz ancak * * sanal bellek artırma makinenizin boyutunu deneyebilirsiniz ve bakın. – Kurubaran
Bu resim boyutları için LockBits ile çalışıyor olmalısınız – Vajura
@Kurubaran Çalışmayan bellek boyutunu artırmaya çalıştım ve bunun bir web projesi için doğru çözüm olduğunu düşünmüyorum. –