Sono nuovo in C#. Quindi, non sono sicuro di quale sia il problema con il mio programma. Il programma funziona con un'immagine piccola ma mostra "Esaurimento memoria esaurita" quando funziona con un'immagine grande che è circa A4. Tuttavia, il programma sarebbe inutile se non può funzionare con un'immagine grande. Come posso risolvere il problema? Grazie.Eccezione memoria insufficiente in 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);
}
}
}
Non correlato alla risposta alla domanda, è necessario tenere presente che è necessario chiudere e disporre gli oggetti grafici. Frammenti di codice pad con istruzioni 'using'. Quello farebbe il lavoro. –
La dimensione A4 non dice nulla. Posso creare un'immagine in formato A4 con solo 4 pixel in essa :) –
Non sei sicuro di quale sia il problema, ma prova ad aggiungere usando le istruzioni attorno ad ogni oggetto che implementa IDisposable (Bitmap, Grafica). Quanta memoria utilizza il processo quando si guarda il task manager? – Maarten