↑新しい記事を書いたので
↓この記事はあんまり意味ないかも?
WindowsFormのBitmapはそのままでも
シリアライズできたけど
WPFのBitmapSourceはできない!けど文字列に変化すればできるみたい
複数のBitmapSource(画像)をシリアライズして1つのファイルに保存
Imports System.IO
Imports System.Runtime.Serialization
Class MainWindow
Private bmps As New List(Of BitmapSource)
Private Sub testBitmap()
Dim encoder As New TiffBitmapEncoder
Dim frame As BitmapFrame
For i As Integer = 0 To bmps.Count - 1
frame = BitmapFrame.Create(bmps(i))
encoder.Frames.Add(frame)
Next
Dim str As String
Using ms As New MemoryStream()
encoder.Save(ms)
str = Convert.ToBase64String(ms.ToArray)
End Using
Dim fileName As String = "D:\ブログ用\WPF\BitmapSerializeString.bin"
Using fs As New FileStream(fileName, FileMode.Create)
Dim bf As New Formatters.Binary.BinaryFormatter
bf.Serialize(fs, str)
End Using
Dim deStr As String
Using fs As New FileStream(fileName, FileMode.Open)
Dim bf As New Formatters.Binary.BinaryFormatter
deStr = bf.Deserialize(fs)
End Using
Dim bytes() As Byte = Convert.FromBase64String(deStr)
Using ms As New MemoryStream(bytes)
Dim decoder As New TiffBitmapDecoder(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad)
img3.Source = decoder.Frames.Item(0)
img4.Source = decoder.Frames.Item(1)
End Using
End Sub
Private Sub MainWindow_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
Dim filepath As String = "D:\ブログ用\テスト用画像\hueRect030.png"
Dim bmpi As New BitmapImage(New Uri(filepath))
img1.Source = New BitmapImage(New Uri(filepath))
bmps.Add(bmpi)
filepath = "D:\ブログ用\テスト用画像\hueRect210.png"
bmpi = New BitmapImage(New Uri(filepath))
img2.Source = bmpi
bmps.Add(bmpi)
End Sub
Private Sub bt1_Click(sender As Object, e As RoutedEventArgs) Handles bt1.Click
Call testBitmap()
End Sub
End Class
ファイルに保存までの流れ
Tiff画像を文字列(Base64String)に変換
ファイルを読み込んで画像表示までの流れ
文字列をbyte配列に変換
それぞれの画像を表示
こんな感じ(よくわかっていない)
今回のは複数の画像を1つのファイルに入れることができる
TIFF画像を使った
MemoryStreamとかConvert.ToBase64String
この辺初めて使ったかも
こういう編集状態を保存しておいて、次にアプリを起動した時に編集の続きを再開できるようにしたかった
ってことでググッてコピペしてなんとかなったのでメモしたのが今回の記事
シリアライズして保存されたファイルは元の画像ファイルよりサイズが大きくなる
3.39KB→9.39KB
34KB →275KB
3~10倍になってしまうけど
TIFFは可逆圧縮形式だし、それを文字列に変換もしているからこれくらいはね
TIFFは馴染みがなかったけど複数画像を別々のまま1つのファイルにできるのは便利な規格だなあ