У меня есть свои собственные классы, которые представляют данные изображения. Они имеют различную базовую структуру, но все имеют индексированное свойство, которое возвращает i, j-й элемент изображения. Мне нужно отображать такие изображения в форме. Прямо сейчас я предварительно конвертирую их в System.Drawing.Bitmap
и затем отображаю их в стандартном Winforms PictureBox
. Моя идея заключается в создании пользовательского элемента управления, который будет иметь свойство моего типа изображения и будет отображать изображение без предварительного преобразования его в System.Drawing.Bitmap
или System.Drawing.Image
.
Я полагаю, что ключом к этой проблеме является создание нарисованного пользователем элемента управления и переопределение события OnPaint там.
protected override void OnPaint(PaintEventArgs e)
{
for(int i=e.ClipRectangle.Left; i<=e.ClipRectangle.Right; i++)
{
for (int j = e.ClipRectangle.Top; j <= e.ClipRectangle.Bottom; j++)
{
//do something with i and j here
//calculate the corresponding k and l indices
//assign _myCustomClassImage[k,l] somewhere
}
}
}
Да, я понимаю, что могу создать растровое изображение размера прямоугольника клипа и использовать SetPixel для назначения его элементов, но SetPixel работает очень медленно.
Другая идея состоит в том, чтобы использовать маршаллинг для назначения пикселей растрового изображения, но сама идея создания растрового изображения в обработчике события OnPaint выглядит довольно неубедительной.
Есть ли какие-либо предложения в каком направлении мне продолжать свою работу?