Example #1
0
            public IComposedLut GetLut(LutCollection sourceLuts)
            {
                IComposedLut lut = _realComposedLut;

                if (lut != null)
                {
                    return(lut);
                }

                lock (_syncLock)
                {
                    if (_realComposedLut != null)
                    {
                        return(_realComposedLut);
                    }

                    //Trace.WriteLine(String.Format("Creating Composed Lut '{0}'", Key), "LUT");

                    _realComposedLut = new ComposedLut(sourceLuts, _bufferCache);
                    //just use the creation time as the "last access time", otherwise it can get expensive when called in a tight loop.
                    _largeObjectData.UpdateLastAccessTime();
                    _largeObjectData.BytesHeldCount   = _realComposedLut.Data.Length * sizeof(int);
                    _largeObjectData.LargeObjectCount = 1;
                    MemoryManager.Add(this);
                    Diagnostics.OnLargeObjectAllocated(_largeObjectData.BytesHeldCount);

                    return(_realComposedLut);
                }
            }
Example #2
0
        private static int[] ConstructFinalLut(IComposedLut outputLut, IColorMap colorMap, bool invert)
        {
            CodeClock clock = new CodeClock();

            clock.Start();

            colorMap.MinInputValue = outputLut.MinOutputValue;
            colorMap.MaxInputValue = outputLut.MaxOutputValue;

            int[] outputLutData = outputLut.Data;
            int[] colorMapData  = colorMap.Data;

            if (_finalLutBuffer == null || _finalLutBuffer.Length != outputLutData.Length)
            {
                _finalLutBuffer = new int[outputLutData.Length];
            }

            int numberOfEntries = _finalLutBuffer.Length;

            fixed(int *pOutputLutData = outputLutData)
            {
                fixed(int *pColorMapData = colorMapData)
                {
                    fixed(int *pFinalLutData = _finalLutBuffer)
                    {
                        int *pFinalLut = pFinalLutData;

                        if (!invert)
                        {
                            int firstColorMappedPixelValue = colorMap.FirstMappedPixelValue;
                            for (int i = 0; i < numberOfEntries; ++i)
                            {
                                *(pFinalLut++) = pColorMapData[*(pOutputLutData + i) - firstColorMappedPixelValue];
                            }
                        }
                        else
                        {
                            int lastColorMappedPixelValue = colorMap.FirstMappedPixelValue + colorMap.Data.Length - 1;
                            for (int i = 0; i < numberOfEntries; ++i)
                            {
                                *(pFinalLut++) = pColorMapData[lastColorMappedPixelValue - *(pOutputLutData + i)];
                            }
                        }
                    }
                }
            }

            clock.Stop();
            PerformanceReportBroker.PublishReport("ImageRenderer", "ConstructFinalLut", clock.Seconds);

            return(_finalLutBuffer);
        }
Example #3
0
        private static int[] ConstructFinalLut(IComposedLut outputLut, bool invert)
        {
#if DEBUG
            CodeClock clock = new CodeClock();
            clock.Start();
#endif
            int[] outputLutData = outputLut.Data;

            if (_finalLutBuffer == null || _finalLutBuffer.Length != outputLutData.Length)
            {
                _finalLutBuffer = new int[outputLutData.Length];
            }

            int numberOfEntries = _finalLutBuffer.Length;

            fixed(int *pOutputLutData = outputLutData)
            fixed(int *pFinalLutData = _finalLutBuffer)
            {
                int *pOutputLut = pOutputLutData;
                int *pFinalLut  = pFinalLutData;

                if (!invert)
                {
                    int firstColorMappedPixelValue = outputLut.MinOutputValue;
                    for (int i = 0; i < numberOfEntries; ++i)
                    {
                        *pFinalLut++ = *pOutputLut++ - firstColorMappedPixelValue;
                    }
                }
                else
                {
                    int lastColorMappedPixelValue = outputLut.MaxOutputValue;
                    for (int i = 0; i < numberOfEntries; ++i)
                    {
                        *pFinalLut++ = lastColorMappedPixelValue - *pOutputLut++;
                    }
                }
            }

#if DEBUG
            clock.Stop();
            PerformanceReportBroker.PublishReport("ImageRenderer", "ConstructFinalLut", clock.Seconds);
#endif
            return(_finalLutBuffer);
        }
Example #4
0
		private static int[] ConstructFinalLut(IComposedLut outputLut, bool invert)
		{
			CodeClock clock = new CodeClock();
			clock.Start();

			int[] outputLutData = outputLut.Data;

			if (_finalLutBuffer == null || _finalLutBuffer.Length != outputLutData.Length)
				_finalLutBuffer = new int[outputLutData.Length];

			int numberOfEntries = _finalLutBuffer.Length;

			fixed (int* pOutputLutData = outputLutData)
			{
				fixed (int* pFinalLutData = _finalLutBuffer)
				{
					int* pFinalLut = pFinalLutData;

					if (!invert)
					{
						int firstColorMappedPixelValue = outputLut.MinOutputValue;
						for (int i = 0; i < numberOfEntries; ++i)
							*(pFinalLut++) = *(pOutputLutData + i) - firstColorMappedPixelValue;
					}
					else
					{
						int lastColorMappedPixelValue = outputLut.MaxOutputValue;
						for (int i = 0; i < numberOfEntries; ++i)
							*(pFinalLut++) = lastColorMappedPixelValue - *(pOutputLutData + i);
					}
				}
			}

			clock.Stop();
			PerformanceReportBroker.PublishReport("ImageRenderer", "ConstructFinalLut", clock.Seconds);

			return _finalLutBuffer;
		}
Example #5
0
		private static int[] ConstructFinalLut(IComposedLut outputLut, IColorMap colorMap, bool invert)
		{
#if DEBUG
			CodeClock clock = new CodeClock();
			clock.Start();
#endif
			colorMap.MinInputValue = outputLut.MinOutputValue;
			colorMap.MaxInputValue = outputLut.MaxOutputValue;

			int[] outputLutData = outputLut.Data;
			int[] colorMapData = colorMap.Data;

			if (_finalLutBuffer == null || _finalLutBuffer.Length != outputLutData.Length)
				_finalLutBuffer = new int[outputLutData.Length];

			int numberOfEntries = _finalLutBuffer.Length;

			fixed (int* pOutputLutData = outputLutData)
			fixed (int* pColorMapData = colorMapData)
			fixed (int* pFinalLutData = _finalLutBuffer)
			{
				int* pOutputLut = pOutputLutData;
				int* pFinalLut = pFinalLutData;

				if (!invert)
				{
					int firstColorMappedPixelValue = colorMap.FirstMappedPixelValue;
					for (int i = 0; i < numberOfEntries; ++i)
						*pFinalLut++ = pColorMapData[*pOutputLut++ - firstColorMappedPixelValue];
				}
				else
				{
					int lastColorMappedPixelValue = colorMap.FirstMappedPixelValue + colorMapData.Length - 1;
					for (int i = 0; i < numberOfEntries; ++i)
						*pFinalLut++ = pColorMapData[lastColorMappedPixelValue - *pOutputLut++];
				}
			}

#if DEBUG
			clock.Stop();
			PerformanceReportBroker.PublishReport("ImageRenderer", "ConstructFinalLut", clock.Seconds);
#endif
			return _finalLutBuffer;
		}