2012-01-19 5 views
1

효율적인 이미지 클래스 ... 나는 System.Drawing.Bitmap을하고 변환하는 잠금 비트를 사용하는로드를 포함 EfficientImage라고 내 자신의 이미지 클래스를 생성 할구현 내가 디자인 질문이

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를 사용하여 성능 향상을 잃지 않고 객체 내 이미지 배열에 접근하는 가장 좋은 방법은 무엇인가가있을 수 있습니다? 액세서 나 속성을 사용하면 GetMap/SetPixel을 복제 할 때 비트 맵 객체가 효율적이지 않고 이미지 필드를 공용으로 설정하면 캡슐화가 중단됩니다.

이 디자인은 완전히 잘못된 방법 일 수 있습니다. 나는 더 좋고/올바른 길을 배울 수있어서 매우 기뻐할 것입니다. 당신의 도움이

+0

그냥 호기심, 당신이 당신의 제안 클래스에서 기존의 이미지 클래스에 어떤 비 효율성을 해결하는 :) 나는 점을 놓친

사과하면? 아니면 그냥 학습 운동입니까? – Mikeb

+0

정직해야 할 학습 학습이 더 많아서 다른 문제를 배울 수 있습니다. – TomP89

답변

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 추상 클래스 거래하면서 이미지와 그 데이터를로드하는 것.

+0

답변을 주셔서 감사합니다.하지만이 상황이 정말 좋긴하지만 Form 클래스에서 Image 개체를 만들고 있습니다. 그래서 Image base 클래스를 상속받을 수는 없을 것입니다. 주위에 어떤 생각을 할 수 있습니까? – TomP89

+0

'ImageFilter'에서 상속받은 필터 ('MyFilter'와 같은)는 여러분이 새로 생성 한 클래스이며,'Form' 내에서 여러분은 그러한 필터의 새로운 인스턴스를 생성 할 수 있고'Image'에'Apply()'할 수 있습니다. 너는 우연히 만난다. –

+0

예, 죄송합니다. 당신의 도움을 주셔서 감사합니다! – TomP89

관련 문제