- ベストアンサー
Bitmapのディスク容量とは?
- Bitmapのディスク容量は、画素数×4 byteとなる。
- PixelFormatがFormat32bppArgbの場合、保存時に圧縮されるため実際の容量は小さくなる。
- 関連する検索キーワード: Bitmap, ディスク容量, 画素数, フォーマット
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
その .bmp ファイルの中身は、本当にビットマップでしょうか? 作成したファイルを、メモ帳に読み込ませてみましょう。 もちろんメモ帳で画像が表示できるわけではないのですが、ビットマップファイルの先頭2文字は「BM」であるはずなのです。 (「ペイント」アプリでbmp保存したファイルなどを見てみてください。) もしメモ帳で読み込ませた先頭が「臼NG」(※)となっていたならば、それはビットマップファイルのフォーマットではなく、PNGフォーマットの画像データです。 (※)本当は 0x89, "P", "N", "G" というデータで始まっているが、文字として表示すると化ける ファイル名とデータの中身が、一致していないのです。 (読み込む場合は、ファイル名の拡張子など気にせずて実際の画像データを見るので、読めてしまう) PNGフォーマットは、同じ色やパターンが連続している範囲が広いほど、良く圧縮できますし、展開すれば完全に元と同じ画像が得られます(可逆圧縮)。 (ちなみにJPEGは、圧縮展開すると、細い線やエッジがぼけてしまい、元の画像とは完全一致しない「非可逆圧縮」です。) >.NET TIPS 画像をファイルに保存するには? - C# - @IT >https://atmarkit.itmedia.co.jp/fdotnet/dotnettips/020savebmp/savebmp.html Image.Saveメソッドにより、ファイル名だけ指定して保存するとき、そのデフォルトは「PNG形式」だそうです。 きちんとビットマップファイルとして保存したいなら、次のページのような使い方で >画像フォーマットを指定して保存する - .NET Tips (VB.NET,C#...) >https://dobon.net/vb/dotnet/graphics/saveimage.html ImageFormat.Bmp を指定して、.save してみましょう。
その他の回答 (5)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>圧縮形式(png)になってました。 やっぱりそうですよね~ デフォルトPNGだったはずなので (実はここ、確信がなかったのですが、さすがに60KBには、 ならんだろ^^ ってな事で圧縮形式だったことには確信はあったもので) なお、BMPにも、圧縮形式はありますが。 ほぼ使われてません。。
- pfarm
- ベストアンサー率52% (68/130)
保存したBitmapのフォーマットによって、ディスク容量が異なる場合があります。特に、保存するBitmapの圧縮方式によってディスク容量が大きく変化することがあります。 Bitmap.Saveメソッドは、第2引数で圧縮方式を指定できます。デフォルト値はImageFormat.Bmpで、この場合は非圧縮のBitmapが保存されます。一方、ImageFormat.Pngを指定すると、データが圧縮されたPNG形式で保存されます。 例えば、1250x1250のFormat32bppArgb Bitmapを保存する場合、以下のように書くことでPNG形式で保存することができます。 bmp.Save("ファイルパス", System.Drawing.Imaging.ImageFormat.Png) 保存されるディスク容量は、フォーマットや圧縮方式によって変化します。上記の方法でPNG形式で保存すると、ディスク容量は期待通りの6MB程度になる可能性が高いです。
お礼
回答ありがとうございます。 結局、Saveで第二引数を省略するとデフォルトでpngで保存されるとわかりました(意外だった)。 詳しくは#3さんのお礼をご覧ください。思わず笑っちゃいました(^^;)。
- sknbsknb2
- ベストアンサー率38% (1158/3030)
可能性としては、下記くらいでしょうか。 (1)画像として、何らかの圧縮形式が指定されている。 (2)ストレージが、ファイル圧縮して保存する設定になっている。 (2)は、ストレージのフォーマットは多分NTFSだと思いますが、特に指定しなくても圧縮する設定にできるので、そのせいで小さくなっている可能性があります。
お礼
回答ありがとうございます。 (1) GDI+のデフォルトで、Bitmap.Saveメソッドはファイル名のみ指定した場合、pngで保存されると今回知りました。 (2) そういう事もあり得るんですね。 結局(1)だったのですが、詳しくは#3さんへのお礼をご覧ください。
- dell_OK
- ベストアンサー率13% (766/5721)
Saveメソッドの第二引数が指定できますか。 Bitmap.Save(パス名, ImageFormat.Bmp)
お礼
回答ありがとうございます。 Saveの第二引数を指定できるのは知ってましたが、省略した場合、まさか別形式で保存されるとは思ってませんでした。ヘルプを読み返してみるとDefaultでpngだよと、ちゃんと書かれていましたが、まさかなぁ~と(^^;)。 で、ちゃんとbmpで保存してみると期待通り6 MBにはなったのですが、なかなか笑える結果でした(詳しくは、#3さんへのお礼で・・・(^^))。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
何形式でした?それ。 メモリ上がBitmapだとしても、 ファイル形式もBitmapとは限らないかと。 恐らく、圧縮形式になってると思われます。
お礼
回答ありがとうございます。 圧縮形式(png)になってました。で、#3さんのお礼に書くように、保存Formatを指定してBitmapとして保存してみると某事情から、なかなか笑える結果となりました(^^)。
お礼
メモ帳で開いた結果、pngでした。 >Image.Saveメソッドにより、ファイル名だけ指定して保存するとき、そのデフォルトは「PNG形式」だそうです。 ・・・ってヘルプに書いてありました。そんな仕様だったの?、とかなり意外な気持ちでした。今までもbmpに保存したと思っただけのものが、かなりあったわけだ。じっさい単純な拡張子なしのAAAなんていうファイル名でも保存できちゃったし・・・(^^;)。 PNGは可逆圧縮なので便利なデフォルトかも知れませんが、こりゃ落とし穴にもなるなぁ~と。 というのはFormat32bppArgbを利用したのは、単色描画で何回塗ったかをα値で記録し、後でα値を読みだして回数変換し、回数応じて別の画面を色分けするというコードを書いてたところでした。いったんSaveで保存したファイル(png)を読み込んで回数変換したところ、もとに戻ったのですが、ちゃんと保存FormatをBmpに指定してやり直すと、別画面は真っ青になりました(自分の変換規則では、α=255 → Blue)。 なるほど、Format32bppArgb が Format24bpprgb で保存されたわけねと、なかなか笑えました。この辺は、SaveのOver Loadに引数4つのものもあるので、それで調整できるのかも知れませんが・・・(^^;)。 長くなりましたが、色々勉強になりました。ありがとうございます。