internal NikonImage(int size, NikonImageType type, int number, bool isFragmentOfRawPlusJpeg) { _buffer = new byte[size]; _type = type; _number = number; _isFragmentOfRawPlusJpeg = isFragmentOfRawPlusJpeg; }
void data_DataFile(NikonObject sender, NkMAIDFileInfo fileInfo, IntPtr data) { if (fileInfo.ulStart == 0) { Debug.Assert(_currentImage == null); int size = (int)fileInfo.ulTotalLength; NikonImageType type = (NikonImageType)(_currentItemId >> 27); int number = (int)((_currentItemId << 8) >> 8); bool isFragmentOfRawPlusJpeg = (_currentItemId & (1 << 26)) != 0; _currentImage = new NikonImage(size, type, number, isFragmentOfRawPlusJpeg); } Debug.Assert(_currentImage != null); int offset = (int)fileInfo.ulStart; int length = (int)fileInfo.ulLength; _currentImage.CopyFrom(data, offset, length); bool complete = (fileInfo.ulTotalLength == fileInfo.ulStart + fileInfo.ulLength); if (complete) { NikonImage image = _currentImage; _currentImage = null; Scheduler.Callback(new ImageReadyDelegate(OnImageReady), this, image); } }