实现高效的图像类

时间:2012-01-19 16:34:23

标签: c# image

我有一个设计问题......

我想创建一个名为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会破坏封装

可能这种设计完全是错误的方式,但我很高兴能够了解更好/更正确的方法。

感谢您的帮助

1 个答案:

答案 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抽象类则处理加载图像及其数据。

如果我错过了这一点,请道歉:)