이미지 데이터를 나타내는 클래스가 있습니다. 그들은 다양한 기본 구조를 가지고 있지만 모두 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 이벤트 처리기 내에 비트 맵을 만드는 것에 대한 아이디어는 매우 불충분합니다.
내 작업을 계속해야하는 방향에 대한 제안이 있습니까?
예, 정확하게 BitmapData를 사용하는 방법을 의미했습니다. System.Runtime.InteropServices.Marshal.Copy 메서드를 사용하여 관리되는 배열을 BitmapData에 복사 할 수 있습니다. –
예, 한 번 비트 맵을 만들고 할당하는 것만으로 충분하지만, 제가 원했던 것은 비트 맵을 전혀 작성하지 않는 것입니다. 내 데이터를 비트 맵에 복사 한 다음 그 데이터를 사용하여 그리면 중복 솔루션처럼 보입니다. –