我有三个类,TImageProcessingEngineTImageTProcessing

TImageProcessingEngine是我用来向世界公开我所有方法的一种。

我计划使用TImage使用通用图像读取和图像写入功能。

TProcessing包含将执行成像操作的方法。

class TImageProcessingEngine
{
    public:
        TImage* mpImageProcessingEngine;

};

class TImage
{
    public:
        int ReadImage();
        int WriteImage();

    private:
            //a two dimensional array holding the pixel values
        tImageMatrix*  mpImageMatrix;
};

class TProcessing
{
    public:
        int ConvertToBinary();
        int ConvertToGrayScale();
};


我的问题是如何访问类mpImageMatrix中的对象TProcessing?这样我的调用应用程序可以使用以下内容

TImageProcessingEngine* vEngine = new TImageProcessingEngine;

//Converts an input gray scsale image to binary image
vEngine->ReadImage().ConvertToBinary();

//Write the converted image to disk
vEngine->WriteImage();

delete vEngine;
vEngine = NULL;

//During this whole processing internally,
//the image is read in to `mpImageMatrix`
//and will also be holding the binarised image data,
//till writing the image to disk.


还是您对我的课堂设计推荐其他方法?

最佳答案

我当然会推荐其他实现,但是让我们先检查一下设计。

我不太了解TImageProcessingEngine的附加值,它没有带来任何功能。

我的建议实际上非常简单:


Image类,用于保存值
Processing类(接口),以应用操作
EncoderDecoder类(接口),以读写不同的格式


仅当您可以从中获得效率时,Processing类才可以访问内部图像(这很可能),这是有意义的,在这种情况下,您可以简单地与Processing成为朋友并为其解包其值派生的

class Image
{
public:
  Image();

  void Accept(Processing& p);
  void Encode(Encoder& e) const; // Image is not modified by encoding

  void Decode(Decoder& d); // This actually resets the image content

private:
  friend class Processing;

  size_t mHeight;
  size_t mWidth;
  std::vector<Pixel> mPixels; // 2D array of Pixels
};

class Processing
{
public:
  void apply(Image& image)
  {
    this->applyImpl(image.mHeight, image.mWidth, image.mPixels);
  }

private:
  virtual void applyImpl(size_t h, size_t w, std::vector<Pixel>& pixels) = 0;
};


EncoderDecoder遵循相同的原理。

请注意,我永远不需要显式指针,以及由此产生的保证正确性。

10-06 03:50