наложение изображений с помощью GDI+
Вопрос
Я пытаюсь наложить изображение на пару других изображений.Я использую этот код для этого:
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.Я понимаю, что изображения большие.А нельзя ли как-нибудь сделать накладки и зачесать их куда-нибудь?
Даже если я сохраняю результат первого наложения на диск, освобождаю память и добавляю еще один слой, я все равно получаю исключение.
Как мне подойти к этой проблеме?
ЖосП
Решение
Не знаю, действительно ли это проблема, но вы не избавляетесь от изображений, которые рисуете на растровом изображении.Это помогает?
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 кажется одной из <sarcasm>чрезвычайно полезных</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 с помощью некоторых программ редактирования изображений.