我有我自己的代表圖像數據的類。它們具有各種基礎結構,但都具有索引屬性,它返回第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。 –
是的,創建和分配一次位圖就足夠了,但我想要的是避免創建位圖。複製我的數據到位圖,然後使用它來繪製看起來像一個冗餘的解決方案。 –