private byte[] GetArwBitmap() { TiffIFD tagSub = _header.IFDs[0]; var tIImageStartOffset = (from t in tagSub.tiffTags where t.TagID == 513 select t).FirstOrDefault().DataOffset; var tIImageLengthOffset = (from t in tagSub.tiffTags where t.TagID == 514 select t).FirstOrDefault().DataOffset; return(CreateBitmap(tIImageStartOffset, tIImageLengthOffset, tagSub)); }
private byte[] CreateBitmap(uint tIImageStartOffset, uint tIImageLengthOffset, TiffIFD tiffIFD) { byte[] Img = new byte[tIImageLengthOffset]; Array.Copy(_content, tIImageStartOffset, Img, 0, tIImageLengthOffset); if (tiffIFD.Compression == 1 && tiffIFD.BitsPerSample[0] == 8 && tiffIFD.BitsPerSample[1] == 8 && tiffIFD.BitsPerSample[2] == 8) { return(ImageHelper.ConvertFromUncompressed((int)tiffIFD.Width, (int)tiffIFD.Height, ref Img)); } if (tiffIFD.Compression == 1 && tiffIFD.BitsPerSample.Length == 1 && tiffIFD.BitsPerSample[0] == 16) { //byte[] bs = ImageHelper.ConvertFrom16bits565((int)tiffIFD.Width, (int)tiffIFD.Height, ref Img); byte[] bs = ImageHelper.ConvertFromCFA((int)tiffIFD.Width, (int)tiffIFD.Height, ref Img); //bs = ImageHelper.BayerDemosaic24((int)tiffIFD.Width, (int)tiffIFD.Height, ref bs); //bs = ImageHelper.BayerDemosaic24((int)tiffIFD.Width, (int)tiffIFD.Height, ref bs); //byte[] bs = ImageHelper.ConvertFromCFA((int)tiffIFD.Width, (int)tiffIFD.Height, ref Img); ////return bs; //bs = ImageHelper.BayerDemosaic24((int)tiffIFD.Width, (int)tiffIFD.Height, ref bs); return(ImageHelper.byteArrayToBMP((int)tiffIFD.Width, (int)tiffIFD.Height, ref bs)); } if (tiffIFD.Compression == 1 && tiffIFD.BitsPerSample.Length == 1 && tiffIFD.BitsPerSample[0] == 12) { return(ImageHelper.byteArrayToBMP((int)tiffIFD.Width, (int)tiffIFD.Height, ref Img)); } return(Img); }