2014-11-10 12 views
0

Я пытаюсь создать небольшую игру с C# и GDI +. В учебных целях я стараюсь избегать как можно большего количества фреймворков и т. Д. Поэтому у меня есть некоторые конкретные вопросы к GDI +Некоторые конкретные вопросы для GDI + в C#

Возможно ли заполнить объект региона в GDI изображением? -Если нет, есть ли ручной способ для этого?

Вы можете читать и устанавливать одиночные пиксели в графическом объекте (а не в растровом изображении)?

У вас есть какие-либо советы для увеличения общей производительности в GDI?

Спасибо за любую помощь

+0

Это слишком широкое для переполнения стека. Для начала задайте один вопрос на вопрос. Ваши первые два в порядке (любые образцы кода, которые у вас в настоящее время есть, будут приятными). Третий * определенно * слишком широк. – BradleyDotNET

ответ

1

Возможно ли заполнить объект области в GDI изображением?

Регион не может быть заполнен, он не хранит пиксели. То, что вы почти наверняка ищете, это свойство Graphics.Clip. Присвойте регион ему и нарисуйте изображение, оно будет обрезано областью.

Вы можете читать и устанавливать одиночные пиксели в графическом объекте (а не в растровое изображение)?

Нет, объект Graphics не сохраняет ни одного пикселя, он отслеживает только то, куда вы рисуете. Говорит «контекст устройства» в Windows. Каким может быть растровое изображение, экран, принтер, метафайл. Не все из этих контекстов устройства позволяют вам читать пиксель после рисования (не для принтера, а не для метафайла, например). Но без проблем, конечно, когда вы рисуете растровое изображение.

У вас есть какие-либо советы для увеличения общей производительности в GDI?

Существует один решающий вопрос.NET делает его очень легко упускать. Формат пикселей растрового изображения, который вы рисуете, является супер-пуперным. Самая дорогая вещь, которую вы когда-либо делаете с растровым изображением, - копирование, от памяти процессора до памяти видеоадаптера. Эта копия выполняется только в том случае, если формат пикселей в точности соответствует формату, который использует видеоадаптер. На всех современных машинах это PixelFormat.Format32bppPArgb. Разница огромна, это десять раз быстрее, чем все остальные.

0

Многие ответы, которые будут подробно описаны эти пункты:

  1. После того, как у вас есть Region он будет ограничивать, где пиксели рисуются. Используйте Graphics.DrawImage затем
  2. Ни в коем случае читать и только perverted way установить Pixel по Graphics.FillRectangle(br, x,y,1,1); Причиной этого, вероятно, что Graphics может не только работать в режиме Pixel, но и с различными другими Units от точек до дюймов и мм ..
    • Lockbits. Всего один example using one Bitmap. Другие общие задания требуют блокировки двух (один входной один выход) или даже трех (двух входов и одного расчетного выходного) растровых изображений.
    • Знайте, что вы признаете недействительным, часто нужна только небольшая часть.
    • Узнать больше ImageList, он не может сделать много, но полезно для того, что он делает, что кэш изображений один размера и глубины цвета
    • Узнайте, когда использовать Panel и когда Picturebox
+0

В другом ответе упоминается [полезная ссылка] (http://www.codeproject.com/Tips/66909/Rendering-fast-with-GDI-What-to-do-and-what-not-to) о рекомендациях по производительности , –

+0

Немного короткий, но прекрасный у меня! – TaW

 Смежные вопросы

  • Нет связанных вопросов^_^