我有一个设计问题......
我想创建一个名为EfficientImage的图像类,它将包含一个Load,它将采用System.Drawing.Bitmap并使用锁定位将其转换为2D字节数组。
class EfficientImage
{
private byte[,] image;
private int width;
private int height;
public Load(System.Drawing.Bitmap inImage)
{
}
//etc...
}
所以我可能有
EfficentImage ef = new EfficientImage();
ef.Load(myBitmap);
访问对象中的图像数组的最佳方法是什么,而不会失去首先使用LockBits的性能提升?我相信拥有一个访问器或属性会在正常的Bitmap对象中复制GetPixel / SetPixel,这对象效率不高并且将图像字段设置为public会破坏封装
可能这种设计完全是错误的方式,但我很高兴能够了解更好/更正确的方法。
感谢您的帮助
答案 0 :(得分:3)
我假设你想对图像应用某种滤镜,或者进行其他一些修改多个像素的处理。
如果是这种情况,我会将您的课程称为ImageFilter
,例如:
public abstract class ImageFilter
{
protected abstract void ApplyFilter(byte[,] imageData);
public Bitmap Apply(Bitmap image)
{
// lockbits etc
ApplyFilter(imageData);
// unlockbits
}
}
public class MyFilter : ImageFilter
{
protected override ApplyFilter(byte[,] imageData)
{
// work on the bits
}
}
Bitmap newBitmap = new MyFilter().Apply(oldBitmap);
通过这种方式,您可以编写仅处理原始数据的自定义过滤器,而ImageFilter
抽象类则处理加载图像及其数据。
如果我错过了这一点,请道歉:)