コード例 #1
0
//---------------------------------------------------------------------------
int __stdcall run(Block *aBlock)
{
	if(aBlock->input.size() != 1 || aBlock->input[0].getConnectedType().IsEmpty())
		return 1;

	Graphics::TBitmap* picture = new Graphics::TBitmap();
	AnsiString connectedType(aBlock->input[0].getConnectedType());
	
	if(connectedType == "Bitmap1bit")
		picture->Assign(const_cast<Graphics::TBitmap*>(&(IBitmap1bit::getBitmap(aBlock->input[0].getObject()))));

	else	if(connectedType == "Bitmap4bit")
		picture->Assign(const_cast<Graphics::TBitmap*>(&(IBitmap4bit::getBitmap(aBlock->input[0].getObject()))));

	else	if(connectedType == "Bitmap8bit")
		picture->Assign(const_cast<Graphics::TBitmap*>(&(IBitmap8bit::getBitmap(aBlock->input[0].getObject()))));

	else	if(connectedType == "Bitmap16bit")
		picture->Assign(const_cast<Graphics::TBitmap*>(&(IBitmap16bit::getBitmap(aBlock->input[0].getObject()))));

	else	if(connectedType == "Bitmap24bit")
		picture->Assign(const_cast<Graphics::TBitmap*>(&(IBitmap24bit::getBitmap(aBlock->input[0].getObject()))));

	else	if(connectedType == "Bitmap32bit")
		picture->Assign(const_cast<Graphics::TBitmap*>(&(IBitmap32bit::getBitmap(aBlock->input[0].getObject()))));

	int mode=aBlock->getConfig()->getInt("mode");

	if(mode == 0)
	{
		if(!Binarization(picture))
		{
			aBlock->output[0].setErrorCode(2);
			aBlock->output[0].setErrorDescription("Pusta bitmapa");
			picture->Free();
			return 2;
		}
	}
	else
	{
		int limitB(aBlock->getConfig()->getInt("limitB"));
		if(!BinarizationBalance(picture,limitB,clWhite,clBlack))
		{
			aBlock->output[0].setErrorCode(2);
			aBlock->output[0].setErrorDescription("Pusta bitmapa");
			picture->Free();
			return 2;
		}
	}
    
	TypeConfig* copy = IBitmap1bit::getNew();

	IBitmap1bit::setBitmap(copy, *picture);
	aBlock->output[0].setObject(*copy);

	picture->Free();
	delete copy;

	return 0;
}
const QImage& ImageTransformer::
Etch(const int step)
{
    Binarization(_DataHandled);

    QImage newImage = _DataHandled;

    int width = _DataHandled.width();
    int height = _DataHandled.height();
    int depth = _DataHandled.depth();

    if(depth == 32)
    {
        for(int i=0;i<width;++i)
        {
            for(int j=0;j<height;++j)
            {
                QColor pixTmp = _DataHandled.pixel(i,j);
                if(pixTmp.red() == 0)
                {
                    continue;
                }

                bool fit = true;
                for(int m=(i-step)>0?(i-step):0;m<=i+step&&m<width;++m)
                {
                    for(int n=(j-step)>0?(j-step):0;n<=j+step&&n<height;++n)
                    {
                        pixTmp =_DataHandled.pixel(m,n);
                        if(pixTmp.red() == 0)
                        {
                            fit = false;
                            break;
                        }
                    }
                    if(!fit)
                    {
                        break;
                    }
                }
                if(!fit)
                {
                    newImage.setPixel(i,j,QColor(0,0,0).rgb());
                }
            }
        }
    }
    _DataHandled.swap(newImage);
    return _DataHandled;
}