【问题标题】:256 grayscale Array for an Histogram VS C++ 2008直方图 VS C++ 2008 的 256 灰度数组
【发布时间】:2013-08-14 05:31:31
【问题描述】:

我正在尝试在 Visual Studio C++ 2008 中创建一个非常简单的“计数”,例如数组。 目标是制作 256 位灰度图像的直方图(不显示)。

#pragma once
using namespace System::Collections::Generic;
using namespace System::Windows::Forms;
using namespace System::Drawing;
using namespace System;

ref class Histograma
{
public:

    Histograma(void);
    Histograma(System::IO::FileStream^ archivo, List<Panel^>^ paneles);
    Array^ ejecutar();

private:
    Array ^resultado;
    Bitmap^ imagen;
};

以及这里的实现

#include "StdAfx.h"
#include "Histograma.h"

Histograma::Histograma(void)
{
    resultado = Array::CreateInstance(int::typeid,256);
}

Histograma::Histograma(System::IO::FileStream^ archivo, List<Panel^> ^paneles)
{
    Histograma();
    imagen = gcnew Bitmap(archivo);
}

Array^ Histograma::ejecutar()
{
    System::Byte valor;
    for(int x=0; x < imagen->Width ; x++)
    {
        for(int y=0; y < imagen->Height ; y++)
        {
            valor = imagen->GetPixel(x,y).ToArgb();
            resultado[valor]++;
        }
    }
    return resultado;
}

我收到 c2039 错误:'default' 不是 'System::Array' 的成员

有什么想法吗?这一定是我做错了非常简单的事情,但我不知道会是什么。

提前致谢

【问题讨论】:

    标签: arrays c++-cli histogram


    【解决方案1】:

    将声明更改为:

    array<int> ^resultado;
    

    在构造函数中:

    resultado = gcnew array<int>(256);
    

    编辑

    您也可以保留原来的 System::Array 声明,而改用这种繁琐的语法:

    resultado->SetValue((int)(resultado->GetValue(valor)) + 1, valor);
    

    【讨论】:

    • 这个其实我试过了,完全一样。我最终发现了问题:我正在调用带有参数的构造函数......它调用了没有参数的构造函数。看来,我不能同时调用两个构造函数。在第二个构造函数中复制粘贴 resultado = Array::CreateInstance(int::typeid,256); 就可以了。谢谢!
    猜你喜欢
    • 2013-08-07
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多