예제 #1
0
파일: WpfPayload.cs 프로젝트: alexiej/YATE
        private static BitmapEncoder GetBitmapEncoder(ImageContentType imageContentType)
        {
            BitmapEncoder bitmapEncoder;

            switch (imageContentType)
            {
                case ImageContentType.ImageBmpContentType:
                    bitmapEncoder = new BmpBitmapEncoder();
                    break;
                case ImageContentType.ImageGifContentType:
                    bitmapEncoder = new GifBitmapEncoder();
                    break;
                case ImageContentType.ImageJpegContentType:
                    bitmapEncoder = new JpegBitmapEncoder();
                    break;
                case ImageContentType.ImageTiffContentType:
                    bitmapEncoder = new TiffBitmapEncoder();
                    break;
                case ImageContentType.ImagePngContentType:
                    bitmapEncoder = new PngBitmapEncoder();
                    break;
                default:
                    bitmapEncoder = new PngBitmapEncoder();
                    break;
            }
            return bitmapEncoder;
        }
예제 #2
0
파일: WpfPayload.cs 프로젝트: alexiej/YATE
 // Generates a image part Uri for the given image index
 private static string GetImageName(int imageIndex, ImageContentType imageContentType)
 {
     string imageFileExtension = GetImageFileExtension(imageContentType);
     return XamlImageName + (imageIndex + 1) + imageFileExtension;
 }
예제 #3
0
파일: WpfPayload.cs 프로젝트: alexiej/YATE
 private static string GetImageContentName(ImageContentType imageContentType)
 {
     return ImageContentTypeName[(int)imageContentType];
 }
예제 #4
0
파일: WpfPayload.cs 프로젝트: alexiej/YATE
 // Returns a file extension corresponding to a given imageContentType
 private static string GetImageFileExtension(ImageContentType imageContentType)
 {
     return ImageFileExtension[(int)imageContentType];
 }
예제 #5
0
파일: WpfPayload.cs 프로젝트: alexiej/YATE
        internal static Stream SaveImage(BitmapSource bitmapSource, ImageContentType imageContentType)
        {
            MemoryStream stream = new MemoryStream();
            // Create the wpf package in the stream
            WpfPayload wpfPayload = new WpfPayload();
            using (wpfPayload.CreatePackage(stream))
            {
                PackagePart xamlEntryPart = wpfPayload.CreateWpfEntryPart();

                Stream xamlPartStream = xamlEntryPart.GetStream();
                using (xamlPartStream)
                {
                    // int imageIndex = 0;
                    imageIndex++;
                    string imageReference = GetImageReference(GetImageName(imageIndex, imageContentType));

                    StreamWriter xamlPartWriter = new StreamWriter(xamlPartStream);
                    using (xamlPartWriter)
                    {
                        string xamlText =
                            "<Span xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">" +
                            "<InlineUIContainer><Image " +
                            "Width=\"" +
                            bitmapSource.Width + "\" " +
                            "Height=\"" +
                            bitmapSource.Height + "\" " +
                            "><Image.Source><BitmapImage CacheOption=\"OnLoad\" UriSource=\"" +
                            imageReference +
                            "\"/></Image.Source></Image></InlineUIContainer></Span>";
                        xamlPartWriter.Write(xamlText);
                    }
                    wpfPayload.CreateImagePart(xamlEntryPart, bitmapSource, imageContentType, imageIndex);
                }
            }
            return stream;
        }
예제 #6
0
파일: WpfPayload.cs 프로젝트: alexiej/YATE
        private void CreateImagePart(PackagePart sourcePart, BitmapSource imageSource, ImageContentType imageContentType, int imageIndex)
        {
            // Generate a new unique image part name
            string imagePartUriString = GetImageName(imageIndex, imageContentType);

            // Define an image part uri
            Uri imagePartUri = new Uri(XamlPayloadDirectory + imagePartUriString, UriKind.Relative);

            // Create a part for the image
            PackagePart imagePart = _package.CreatePart(imagePartUri, GetImageContentName(imageContentType), CompressionOption.NotCompressed);

            // Create the relationship referring from the enrty part to the image part
            PackageRelationship componentRelationship = sourcePart.CreateRelationship(imagePartUri, TargetMode.Internal, XamlRelationshipFromXamlPartToComponentPart);

            // Encode the image data
            BitmapEncoder bitmapEncoder = GetBitmapEncoder(imageContentType);
            bitmapEncoder.Frames.Add(BitmapFrame.Create(imageSource));

            // Save encoded image data into the image part in the package
            Stream imageStream = imagePart.GetStream();
            using (imageStream)
            {
                bitmapEncoder.Save(imageStream);
            }
        }
예제 #7
0
        /// <summary>
        /// Commands the insert image.
        /// </summary>
        /// <param name="image">The image.</param>
        /// <param name="contnt_type">The contnt_type.</param>
        /// <param name="stretch">The stretch.</param>
        public void cmdInsertImage(
            BitmapSource image,
            ImageContentType contnt_type = ImageContentType.ImagePngContentType,
            Stretch stretch = Stretch.Uniform)
        {
            Span element = YATEHelper.GetImage(image, contnt_type, stretch);
            if (element == null) return;

            Image i = YATEHelper.ImageFromSpan(element);
            YATEHelper.AdjustWidth(i, this.PageWidth);
            i.Stretch = stretch;

            cmdInsertInline(element as Span);
        }