CopyFromStream() public static method

指定された Stream から MemoryImage を作成します。
ストリームの内容はメモリ上に展開した後に使用されるため、 引数に指定した Stream を MemoryImage より先に破棄しても問題ありません。
public static CopyFromStream ( Stream stream ) : MemoryImage
stream Stream 読み込む対象となる Stream
return MemoryImage
Example #1
0
        public void ImagePathInput_ReplaceFileMediaItemTest()
        {
            using var twitter       = new Twitter();
            using var mediaSelector = new MediaSelector { Visible = false, Enabled = false };
            twitter.Initialize("", "", "", 0L);
            mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");

            mediaSelector.BeginSelection(new[] { "Resources/re.gif" });

            // 既に入力されているファイルパスの画像
            var image1 = mediaSelector.ImageSelectedPicture.Image;

            // 別の画像のファイルパスを入力
            mediaSelector.ImagefilePathText.Text = Path.GetFullPath("Resources/re1.png");
            TestUtils.Validate(mediaSelector.ImagefilePathText);

            // 入力したパスの画像が表示される
            using (var imageStream = File.OpenRead("Resources/re1.png"))
            {
                using var image2 = MemoryImage.CopyFromStream(imageStream);
                Assert.Equal(image2, mediaSelector.ImageSelectedPicture.Image);
            }

            // 最初に入力されていたファイルパスの表示用の MemoryImage は破棄される
            Assert.True(image1 !.IsDisposed);
        }
Example #2
0
 public MemoryImage CreateImage()
 {
     using (var fs = this.FileInfo.OpenRead())
     {
         return(MemoryImage.CopyFromStream(fs));
     }
 }
Example #3
0
        public void BeginSelection_FilePathTest()
        {
            using var twitter       = new Twitter();
            using var mediaSelector = new MediaSelector { Visible = false, Enabled = false };
            twitter.Initialize("", "", "", 0L);
            mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");

            var images = new[] { "Resources/re.gif" };

            Assert.Raises <EventArgs>(
                x => mediaSelector.BeginSelecting += x,
                x => mediaSelector.BeginSelecting -= x,
                () => mediaSelector.BeginSelection(images)
                );

            Assert.True(mediaSelector.Visible);
            Assert.True(mediaSelector.Enabled);

            // 2 ページ目まで選択可能な状態
            var pages = mediaSelector.ImagePageCombo.Items;

            Assert.Equal(new[] { "1", "2" }, pages.Cast <object>().Select(x => x.ToString()));

            // 1 ページ目が表示されている
            Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
            Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);

            using var imageStream = File.OpenRead("Resources/re.gif");
            using var image       = MemoryImage.CopyFromStream(imageStream);
            Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
        }
Example #4
0
        public void ImagePathInput_Test()
        {
            using (var twitter = new Twitter())
                using (var mediaSelector = new MediaSelector {
                    Visible = false, Enabled = false
                })
                {
                    twitter.Initialize("", "", "", 0L);
                    mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
                    mediaSelector.BeginSelection();

                    // 画像のファイルパスを入力
                    mediaSelector.ImagefilePathText.Text = Path.GetFullPath("Resources/re1.png");
                    TestUtils.Validate(mediaSelector.ImagefilePathText);

                    // 入力したパスの画像が表示される
                    using (var imageStream = File.OpenRead("Resources/re1.png"))
                        using (var image = MemoryImage.CopyFromStream(imageStream))
                        {
                            Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
                        }

                    // 2 ページ目まで選択可能な状態
                    var pages = mediaSelector.ImagePageCombo.Items;
                    Assert.Equal(new[] { "1", "2" }, pages.Cast <object>().Select(x => x.ToString()));
                }
        }
Example #5
0
        public void BeginSelection_MultiImageTest()
        {
            using (var twitter = new Twitter())
                using (var mediaSelector = new MediaSelector {
                    Visible = false, Enabled = false
                })
                {
                    twitter.Initialize("", "", "", 0L);
                    mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");

                    var images = new[] { "Resources/re.gif", "Resources/re1.png" };
                    mediaSelector.BeginSelection(images);

                    // 3 ページ目まで選択可能な状態
                    var pages = mediaSelector.ImagePageCombo.Items;
                    Assert.Equal(new[] { "1", "2", "3" }, pages.Cast <object>().Select(x => x.ToString()));

                    // 1 ページ目が表示されている
                    Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
                    Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);

                    using (var imageStream = File.OpenRead("Resources/re.gif"))
                        using (var image = MemoryImage.CopyFromStream(imageStream))
                        {
                            Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
                        }
                }
        }
Example #6
0
        public static MemoryImage CreateDummyImage()
        {
            using var bitmap = new Bitmap(100, 100);
            using var stream = new MemoryStream();
            bitmap.Save(stream, ImageFormat.Png);
            stream.Position = 0;

            return(MemoryImage.CopyFromStream(stream));
        }
Example #7
0
        public void PageChange_Test()
        {
            using (var twitter = new Twitter())
                using (var mediaSelector = new MediaSelector {
                    Visible = false, Enabled = false
                })
                {
                    twitter.Initialize("", "", "", 0L);
                    mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");

                    var images = new[] { "Resources/re.gif", "Resources/re1.png" };
                    mediaSelector.BeginSelection(images);

                    mediaSelector.ImagePageCombo.SelectedIndex = 0;

                    // 1 ページ目
                    Assert.Equal("1", mediaSelector.ImagePageCombo.Text);
                    Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text);

                    using (var imageStream = File.OpenRead("Resources/re.gif"))
                        using (var image = MemoryImage.CopyFromStream(imageStream))
                        {
                            Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
                        }

                    mediaSelector.ImagePageCombo.SelectedIndex = 1;

                    // 2 ページ目
                    Assert.Equal("2", mediaSelector.ImagePageCombo.Text);
                    Assert.Equal(Path.GetFullPath("Resources/re1.png"), mediaSelector.ImagefilePathText.Text);

                    using (var imageStream = File.OpenRead("Resources/re1.png"))
                        using (var image = MemoryImage.CopyFromStream(imageStream))
                        {
                            Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image);
                        }

                    mediaSelector.ImagePageCombo.SelectedIndex = 2;

                    // 3 ページ目 (新規ページ)
                    Assert.Equal("3", mediaSelector.ImagePageCombo.Text);
                    Assert.Equal("", mediaSelector.ImagefilePathText.Text);
                    Assert.Null(mediaSelector.ImageSelectedPicture.Image);
                }
        }
Example #8
0
        public void ImagePathInput_ReplaceMemoryImageMediaItemTest()
        {
            using (var twitter = new Twitter())
                using (var mediaSelector = new MediaSelector {
                    Visible = false, Enabled = false
                })
                {
                    twitter.Initialize("", "", "", 0L);
                    mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");

                    using (var bitmap = new Bitmap(width: 200, height: 200))
                    {
                        mediaSelector.BeginSelection(bitmap);
                    }

                    // 既に入力されているファイルパスの画像
                    var image1 = mediaSelector.ImageSelectedPicture.Image;

                    // 内部で保持されている MemoryImageMediaItem を取り出す
                    var selectedMedia = mediaSelector.ImagePageCombo.SelectedItem;
                    var mediaProperty = selectedMedia.GetType().GetProperty("Item");
                    var mediaItem     = (MemoryImageMediaItem)mediaProperty.GetValue(selectedMedia);

                    // 別の画像のファイルパスを入力
                    mediaSelector.ImagefilePathText.Text = Path.GetFullPath("Resources/re1.png");
                    TestUtils.Validate(mediaSelector.ImagefilePathText);

                    // 入力したパスの画像が表示される
                    using (var imageStream = File.OpenRead("Resources/re1.png"))
                        using (var image2 = MemoryImage.CopyFromStream(imageStream))
                        {
                            Assert.Equal(image2, mediaSelector.ImageSelectedPicture.Image);
                        }

                    // 最初に入力されていたファイルパスの表示用の MemoryImage は破棄される
                    Assert.True(image1.IsDisposed);

                    // 参照されなくなった MemoryImageMediaItem も破棄される
                    Assert.True(mediaItem.IsDisposed);
                }
        }
Example #9
0
        private void ImageFromSelectedFile(int index, string fileName, bool suppressMsgBox)
        {
            var serviceName = this.ServiceName;

            if (string.IsNullOrEmpty(serviceName))
            {
                return;
            }

            var selectedIndex = ImagePageCombo.SelectedIndex;

            if (index < 0)
            {
                index = selectedIndex;
            }

            if (index >= ImagePageCombo.Items.Count)
            {
                throw new ArgumentOutOfRangeException("index");
            }

            var imageService   = this.pictureService[serviceName];
            var isSelectedPage = (index == selectedIndex);

            if (isSelectedPage)
            {
                this.ClearImageSelectedPicture();
            }

            if (string.IsNullOrEmpty(fileName))
            {
                ClearImagePage(index);
                return;
            }

            try
            {
                FileInfo fl  = new FileInfo(fileName);
                string   ext = fl.Extension;

                if (!imageService.CheckFileExtension(ext))
                {
                    //画像以外の形式
                    ClearImagePage(index);
                    if (!suppressMsgBox)
                    {
                        MessageBox.Show(
                            string.Format(Properties.Resources.PostPictureWarn3, serviceName, MakeAvailableServiceText(ext, fl.Length), ext, fl.Name),
                            Properties.Resources.PostPictureWarn4,
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Warning);
                    }
                    return;
                }

                if (!imageService.CheckFileSize(ext, fl.Length))
                {
                    // ファイルサイズが大きすぎる
                    ClearImagePage(index);
                    if (!suppressMsgBox)
                    {
                        MessageBox.Show(
                            string.Format(Properties.Resources.PostPictureWarn5, serviceName, MakeAvailableServiceText(ext, fl.Length), fl.Name),
                            Properties.Resources.PostPictureWarn4,
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Warning);
                    }
                    return;
                }

                try
                {
                    using (var fs = File.OpenRead(fileName))
                    {
                        var image = MemoryImage.CopyFromStream(fs);
                        if (isSelectedPage)
                        {
                            ImageSelectedPicture.Image = image;
                        }
                        else
                        {
                            image.Dispose();  //画像チェック後は使わないので破棄する
                        }
                    }
                    SetImagePage(index, fileName, MyCommon.UploadFileType.Picture);
                }
                catch (InvalidImageException)
                {
                    SetImagePage(index, fileName, MyCommon.UploadFileType.MultiMedia);
                }
            }
            catch (FileNotFoundException)
            {
                ClearImagePage(index);
                if (!suppressMsgBox)
                {
                    MessageBox.Show("File not found.");
                }
            }
            catch (Exception)
            {
                ClearImagePage(index);
                if (!suppressMsgBox)
                {
                    MessageBox.Show("The type of this file is not image.");
                }
            }
        }
Example #10
0
        /// <summary>
        /// MemoryImage インスタンスを複製します
        /// </summary>
        /// <remarks>
        /// メソッド実行中にストリームのシークが行われないよう注意して下さい。
        /// 特に PictureBox で Gif アニメーションを表示している場合は Enabled に false をセットするなどして更新を止めて下さい。
        /// </remarks>
        /// <returns>複製された MemoryImage</returns>
        public MemoryImage Clone()
        {
            this.Stream.Seek(0, SeekOrigin.Begin);

            return(MemoryImage.CopyFromStream(this.Stream));
        }