سؤال

أحاول التراكي صورة مع بضعة صور أخرى. يمكنني استخدام هذا الرمز للقيام بذلك:

Dim gbkn As Bitmap = New Bitmap(7001, 7001, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(CType(gbkn, Image))
g.DrawImage(Image.FromFile("C:\background.png"), New Point(0, 0))
g.DrawImage(Image.FromFile("C:\firstlayer.png"), New Point(0, 0))
g.DrawImage(Image.FromFile("C:\secondlayer.png"), New Point(0, 0))

هذا يعمل مع أول صورتين. بعد ذلك يتم إلقاء outofmemoryException. أدرك حجم الصور كبيرة. ولكن أليس كذلك من الممكن بطريقة أو بأخرى أن تفعل التراكبات و Chache لهم في مكان ما؟

حتى إذا قمت بحفظ نتيجة التراكب الأول للقرص والذاكرة المجانية وإضافة طبقة أخرى ما زلت أحصل على الاستثناء.

كيف يمكنني الاقتراب من هذه المشكلة؟

جوسم

هل كانت مفيدة؟

المحلول

لا أعرف ما إذا كانت هذه هي المشكلة في الواقع، لكنك لا تتخلص من الصور التي ترسمها على الصورة النقطية. هل هذه المساعدة؟

Dim gbkn As Bitmap = New Bitmap(7001, 7001, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(CType(gbkn, Image))
Dim img As Image = Image.FromFile("C:\background.png")
g.DrawImage(img, New Point(0, 0))
img.Dipose()
img As Image = Image.FromFile("C:\firstlayer.png")
g.DrawImage(img, New Point(0, 0))
img.Dispose()
img As Image = Image.FromFile("C:\secondlayer.png")
g.DrawImage(Image.FromFile("C:\secondlayer.png"), New Point(0, 0))
img.Dispose()

أشك بجدية في أن يكون لديه أي علاقة بالصور، كما عملت مع الصور 2-3 مرات هذا الحجم دون هذه المشكلة. كما يبدو استثناء outofmemoryError واحد منu003Csarcasm> مفيدة للغايةu003C/sarcasm> الأخطاء التي يرميها GDI والتي كثيرا ما لا علاقة لها بالذاكرة.

نصائح أخرى

هل تحتاج إلى أول صورة نقطية فارغة؟ بدونها، تخصص فقط 3 * 200 ميغابايت فقط بدلا من 4 * 200 ميغابايت، ربما هذا سيعمل:

Dim g As Graphics = Graphics.FromImage("C:\background.png")
g.DrawImage(Image.FromFile("C:\firstlayer.png"), New Point(0, 0))
// and so on

من الغريب أن تراكب العديد من الخطوات لا يعمل، وأعتقد أنك لا تحرير الذاكرة بشكل صحيح في هذه الحالة. ربما سيكون من الأفضل نشر الرمز الذي تستخدمه لهذا النهج.

أفترض أيضا أنك بحاجة إلى الصور الأصلية في مكان آخر أو القيام به على وجه التحديد القيام بذلك باستخدام C # / GDI +، لأنه سيكون من السهل جدا دمج ملفات PNG باستخدام بعض برامج تحرير الصور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top