void NonchipTilesetV2Interface::handleBatch(QList<QImage> tl, QString destination){
    QImage outputImage = createOutputImage(tl);
    qDebug()<<"writing output-file with estimated size of"<<(outputImage.width()*outputImage.height()*4)<<"bytes";
    QFile outputFile(destination);
    outputFile.open(QFile::WriteOnly);
    quint8 size = tl.first().width();
    outputFile.write( ( (char*) &size ),1); //1 byte tilesize in pixel
    QRgb pixel;
    quint8 value;
    for (int y = 0; y<outputImage.height(); ++y){
        for (int x = 0; x<outputImage.width(); ++x){
            pixel = outputImage.pixel(x,y);

            value = qRed(pixel);
            outputFile.write( ( (char*) &value ),1); //1 byte red value
            value = qGreen(pixel);
            outputFile.write( ( (char*) &value ),1); //1 byte green value
            value = qBlue(pixel);
            outputFile.write( ( (char*) &value ),1); //1 byte blue value
            value = qAlpha(pixel);
            outputFile.write( ( (char*) &value ),1); //1 byte alpha value
        }
    }
    outputFile.close();
}
void MixtureOfGaussianGPU::init(int imageWidth,
                                int imageHeight, 
                                int workGroupSizeX,
                                int workGroupSizeY,
                                int nmixtures)
{
	nframe = 0;
	createMoGKernel(nmixtures);
	createMixtureDataBuffer(imageWidth * imageHeight, nmixtures);
	createMixtureParamsBuffer();
	createOutputImage(imageWidth, imageHeight);

	width = imageWidth;
	height = imageHeight;

	kernel.setLocalWorkSize(workGroupSizeX, workGroupSizeY);
	kernel.setRoundedGlobalWorkSize(imageWidth, imageHeight);
	kernel.setArg(1, outputImage);
	kernel.setArg(2, mixtureDataBuffer);
	kernel.setArg(3, mixtureParamsBuffer);
	kernel.setArg(4, 0.0f);
}