Вопрос

Я пытаюсь наложить изображение на пару других изображений.Я использую этот код для этого:

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 с помощью некоторых программ редактирования изображений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top