前提・実現したいこと
前提
- .NET Framework 4.7.2 コンソールアプリケーション
- TIFF:ピクセルサイズ 325*325、カラー形式 RGB、圧縮形式 なし
実現したい事:
C#でtiffファイルをpngファイルに変換するプログラムを作りたいです。
まずはtiffファイルを読み込み、bitmapに代入したいです。
試した事
1.Bitmap.Fromfileで直接読み込む
2.Filestreamに入れ、Bitmap.FromStreamで読み込む
3.TiffBitmapDecoderを使う。deccoder.Frame[]はBitmapSource形式で、それをBitmapに変換した
該当のソースコード
C#
11. 2var image = Bitmap.FromFile(path);
C#
12. 2Stream tiffStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); 3var image = Bitmap.FromStream(tiffStream);
C#
13. 2Stream tiffStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); 3Stream pngStream = new FileStream(savePath, FileMode.Create); 4 5var decoder = new TiffBitmapDecoder(tiffStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); 6if(decoder.Frames.Count() > 1) 7{ 8 Console.WriteLine("the number is {0}, we need other process", decoder.Frames.Count()); 9} 10else 11{ 12 BitmapSource bitmapSource = decoder.Frames[0]; 13 Bitmap bmp = new Bitmap( 14 bitmapSource.PixelWidth, 15 bitmapSource.PixelHeight, 16 System.Drawing.Imaging.PixelFormat.Format32bppPArgb 17 ); 18 System.Drawing.Imaging.BitmapData data = bmp.LockBits( 19 new Rectangle(System.Drawing.Point.Empty, bmp.Size), 20 System.Drawing.Imaging.ImageLockMode.WriteOnly, 21 System.Drawing.Imaging.PixelFormat.Format32bppPArgb 22 ); 23 bitmapSource.CopyPixels( 24 Int32Rect.Empty, 25 data.Scan0, 26 data.Height * data.Stride, 27 data.Stride 28 ); 29 bmp.UnlockBits(data); 30 31 bmp.Save(savePath, System.Drawing.Imaging.ImageFormat.Png); 32 bmp.Dispose(); 33 34} 35tiffStream.Dispose(); 36pngStream.Dispose();
発生している問題・エラーメッセージ
実行前のエラーではなく、実行時に発生した「ハンドルされていない例外」です。
error
11. 2System.OutOfMemoryException: 'メモリが不足しています。'
error
12. 2System.ArgumentException: '使用されたパラメーターが有効ではありません。'
error
13. 2 3 bitmapSource.CopyPixels( 4 Int32Rect.Empty, 5 data.Scan0, 6 data.Height * data.Stride, 7 data.Stride 8 ); 9 10System.ArgumentOutOfRangeException: 'パラメーター値は、'2600' 未満にできません。 11パラメーター名:stride'
補足情報(FW/ツールのバージョンなど)
エラーの原因や解消法もちろん知りたいですが、
それより、目的のプログラムをどう作ればよいのかわかりません。
よろしくお願いいたします。
参考したサイト
https://stackoverflow.com/questions/1566188/converting-tiff-files-to-png-in-net
https://docs.microsoft.com/ja-jp/dotnet/framework/wpf/graphics-multimedia/how-to-encode-and-decode-a-tiff-image
https://dobon.net/vb/dotnet/graphics/saveimage.html
https://qiita.com/YSRKEN/items/a24bf2173f0129a5825c
回答3件
あなたの回答
tips
プレビュー