//--------------------------------------------------------------------------- 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; }