歸結你的問題,你希望能夠有一類具有USHORT [,]像素場(每像素16位)有時和UINT32 [,]像素場(32一些像素)。有幾種不同的方法來實現這一點。
您可以通過使用32位和16位子類的Pixel類,在wazoo上重寫各種操作符來創建ushort/uint32的替代品,但這會產生大量開銷,很難得到正確的甚至更難以確定它的權利。或者,您可以爲像素數據創建代理類(它將包含ushort [,]或uint32 [,]數組,並且將具有所有必要的訪問器)。不利的一面是,您可能最終會在ImageData類中產生大量特殊情況代碼,這些代碼根據某些16位/ 32位模式標誌以某種方式執行。
我認爲更好的解決方案是將ImageData分類爲16位和32位類,並使用工廠方法創建實例。例如。 ImageData是基類,ImageData16bpp和ImageData32bpp是子類,靜態方法ImageData.Create(string imageFilename)是根據標題數據創建ImageData16bpp或ImageData32bpp的工廠方法。例如:
public static ImageData Create(string imageFilename)
{
// ...
ImageDataHeader imageHeader = ParseHeader(imageFilename);
ImageData newImageData;
if (imageHeader.bpp == 32)
{
newImageData = new ImageData32(imageFilename, imageHeader);
}
else
{
newImageData = new ImageData16(imageFilename, imageHeader);
}
// ...
return newImageData;
}