Tôi mới sử dụng C#. Vì vậy, tôi không chắc chắn vấn đề là gì với chương trình của tôi. Chương trình hoạt động với hình ảnh nhỏ nhưng nó cho thấy "Out of memory exeception" khi nó hoạt động với một hình ảnh lớn có kích thước A4. Tuy nhiên, chương trình sẽ vô ích nếu nó không thể hoạt động với hình ảnh lớn. Tôi có thể giải quyết vấn đề bằng cách nào? Với cảm ơn.Hết bộ nhớ ngoại lệ trong C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
//Bitmap objects
//input image
Bitmap bmOrg = (Bitmap)Bitmap.FromFile(@"C:\B.png");
Bitmap bmTransparentLayover = new Bitmap(bmOrg.Width, bmOrg.Height);
//Create Graphic Objects.
Graphics gOriginal = Graphics.FromImage(bmOrg);
Graphics gTransparentLayover = Graphics.FromImage(bmTransparentLayover);
//Set Transparent Graphics back ground to an "odd" color
// that hopefully won't be used to
//Be changed to transparent later.
gTransparentLayover.FillRectangle
(Brushes.Pink,
new Rectangle
(0,
0,
bmTransparentLayover.Width,
bmTransparentLayover.Height
)
);
//Draw "transparent" graphics that will look through
// the overlay onto the original.
//Using LimeGreen in hopes that it's not used.
Point[] points = new Point[5];
points[0] = new Point(130, 140);
points[1] = new Point(130, 370);
points[2] = new Point(420, 370);
points[3] = new Point(420, 140);
points[4] = new Point(130, 140);
System.Drawing.Drawing2D.GraphicsPath gp = new
System.Drawing.Drawing2D.GraphicsPath();
gp.AddPolygon(points);
gTransparentLayover.FillPath(Brushes.LimeGreen, gp);
//Now make the LimeGreen Transparent to see through overlay.
bmTransparentLayover.MakeTransparent(Color.LimeGreen);
//draw the overlay on top of the original.
gOriginal.DrawImage(bmTransparentLayover,
new Rectangle(0, 0, bmTransparentLayover.Width, bmTransparentLayover.Height));
//Create new image to make the overlays background tranparent
Bitmap bm3 = new Bitmap(bmOrg);
bm3.MakeTransparent(Color.Pink);
//Save file.
//to save the output image
bm3.Save(@"save.png",System.Drawing.Imaging.ImageFormat.Png);
Image img = new Bitmap(480, 480);
//the background image
img = Image.FromFile(@"a.png");
Graphics g = Graphics.FromImage(img);
//to save the combined image
g.DrawImage(Image.FromFile(@"save.png"), new Point(-50, -70));
img.Save(@"final.png", ImageFormat.Png);
}
}
}
Không liên quan đến việc trả lời câu hỏi của bạn, bạn phải lưu ý rằng bạn phải đóng và xử lý các đối tượng đồ họa của mình. Các đoạn mã pad với các câu lệnh 'using'. Điều đó sẽ làm công việc. –
Kích thước A4 không nói bất cứ điều gì. Tôi có thể tạo ra một hình ảnh kích thước A4 chỉ với 4 pixel trong nó :) –
Không chắc chắn vấn đề là gì, nhưng cố gắng thêm bằng cách sử dụng các câu lệnh xung quanh mọi đối tượng thực hiện IDisposable (Bitmap, Graphics). Bao nhiêu bộ nhớ là quá trình sử dụng khi bạn nhìn vào trình quản lý tác vụ? – Maarten