C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■89602 / )  Re[12]: 画像ファイルのヘッダーに文字列を埋め込む方法
□投稿者/ なり (9回)-(2018/12/07(Fri) 19:12:32)
ありがとうございます。

とりあえず、掲示板に書かれた通りのまま、
既に保存してある画像がイメージを読み込む方法を試してみました。


        Using StreamIn As New MemoryStream(File.ReadAllBytes(bmpFilename))
            Dim dec As New PngBitmapDecoder(StreamIn, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None)

            Using StreamOut As FileStream = File.Open(bmpFilename, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite)
                Dim enc As New BitmapEncoder
                Dim frm As BitmapFrame = BitmapFrame.Create(dec.Frames(0))
                enc.Frames.Add(frm)
                Dim meta As BitmapMetadata = DirectCast(frm.Metadata, BitmapMetadata)
                meta.Comment = "Data"
                enc.Frames.Add(BitmapFrame.Create(frm, Nothing, meta, Nothing))
                enc.Save(StreamOut)
            End Using

        End Using

しかし、
Dim enc As New BitmapEncoder
のところで、
'MustInherit' として宣言されたクラスでは、'New' を使用することはできません。

というエラーが出ます。

仕方なく、

        Using StreamIn As New MemoryStream(File.ReadAllBytes(bmpFilename))
            Dim dec As New PngBitmapDecoder(StreamIn, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None)

            Using StreamOut As FileStream = File.Open(bmpFilename, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite)
                Dim enc As BitmapEncoder = Nothing
                Dim frm As BitmapFrame = BitmapFrame.Create(dec.Frames(0))
                enc.Frames.Add(frm)
                Dim meta As BitmapMetadata = DirectCast(frm.Metadata, BitmapMetadata)
                meta.Comment = "Data"
                enc.Frames.Add(BitmapFrame.Create(frm, Nothing, meta, Nothing))
                enc.Save(StreamOut)
            End Using

        End Using

のようにすると、

enc.Frames.Add(frm)
のところでインスタンスが設定されていない、というエラーが出ます。

一体、どうすれば良いですか?



更に、画像をファイルではなく、イメージから読み込む方法も試してみたのですが、



        Dim bitmapStream As MemoryStream = New MemoryStream
        img.Save(bitmapStream, ImageFormat.Png)
        bitmapStream.Position = 0
        Dim enc As BitmapEncoder = Nothing

        Dim dec As New PngBitmapDecoder(StreamIn, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None)

        Dim frm As BitmapFrame = BitmapFrame.Create(dec.Frames(0))
        enc.Frames.Add(BitmapFrame.Create(bitmapStream))


        Dim meta As BitmapMetadata = DirectCast(frm.Metadata, BitmapMetadata)
        meta.Comment = "Data"
        enc.Frames.Add(BitmapFrame.Create(frm, Nothing, meta, Nothing))

        Dim StreamOut As FileStream = File.Open(bmpFilename, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite)
        enc.Save(StreamOut)



        Dim dec As New PngBitmapDecoder(StreamIn, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None)


のところで、画像ファイルのパスを指定する必要があります。

どのようにすれば、一度も画像ファイルを書き出さずに
文字列を書き込んだ画像ファイルを保存することができますか?



返信 編集キー/


管理者用

- Child Tree -