teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

修正

2017/02/27 13:32

投稿

turbgraphics200
turbgraphics200

スコア4269

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  通常のビットマップといっているのはたぶん24ビット以上のビットマップのことだと思いますが、パレットがありません。ですのでパレットの数が0です。
2
- パレットのないBMPからインデックスあり(256色以下)のビットマップに変換するにはGraphics.DrawImage
2
+ パレットのないBMPからインデックスあり(256色以下)のビットマップに変換するには単純なものだとcloneでできます。
3
3
  ```c#
4
4
  using (var srcFs = new FileStream(@"src.bmp", FileMode.Open))
5
5
  {

2

修正

2017/02/27 13:32

投稿

turbgraphics200
turbgraphics200

スコア4269

answer CHANGED
@@ -1,14 +1,15 @@
1
1
  通常のビットマップといっているのはたぶん24ビット以上のビットマップのことだと思いますが、パレットがありません。ですのでパレットの数が0です。
2
2
  パレットのないBMPからインデックスあり(256色以下)のビットマップに変換するにはGraphics.DrawImage
3
3
  ```c#
4
- Bitmap ConvertToIndexedBMP(Image img)
4
+ using (var srcFs = new FileStream(@"src.bmp", FileMode.Open))
5
5
  {
6
- // 256色インデックスBMPインスタンス生成
7
- var indexedBMP= new Bitmap(img.Width, img.Height, PixelFormat.Format8bppIndexed);
8
- using (var gr = Graphics.FromImage(indexedBMP))
6
+ using (var srcBmp = new Bitmap(srcFs))
9
7
  {
8
+ using (var dstFs = new FileStream(@"dst.bmp", FileMode.Create, FileAccess.Write))
9
+ {
10
- gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));
10
+ var dstBmp = srcBmp.Clone(new Rectangle(0, 0, srcBmp.Width, srcBmp.Height), PixelFormat.Format8bppIndexed);
11
+ dstBmp.Save(dstFs, ImageFormat.Bmp);
12
+ }
11
13
  }
12
- return indexedBMP;
13
14
  }
14
15
  ```

1

修正

2017/02/27 13:31

投稿

turbgraphics200
turbgraphics200

スコア4269

answer CHANGED
@@ -4,7 +4,8 @@
4
4
  Bitmap ConvertToIndexedBMP(Image img)
5
5
  {
6
6
  // 256色インデックスBMPインスタンス生成
7
- var indexedBMP= new Bitmap(img.Width, img.Height, PixelFormat.Format8bppIndexed); using (var gr = Graphics.FromImage(indexedBMP))
7
+ var indexedBMP= new Bitmap(img.Width, img.Height, PixelFormat.Format8bppIndexed);
8
+ using (var gr = Graphics.FromImage(indexedBMP))
8
9
  {
9
10
  gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));
10
11
  }