2012-01-05 6 views
1

私のプログラムは、フォーム内にsplitcontainerを持っています。 Panel1にはボタンがあり、クリックするとpanel2が画像として保存されます(理想的にはjpg)。私は使用しているコードにいくつか問題があります。私のビットマップは、両サイドに黒い棒が付いたjpgを保存するのはなぜですか?

private void btnSave_Click(object sender, EventArgs e) 
    {   
     Bitmap bmp = new Bitmap(splitContainer1.Panel2.Width * 2, splitContainer1.Panel2.Height); 
     splitContainer1.Panel2.DrawToBitmap(bmp, splitContainer1.Panel2.Bounds); 
     bmp.Save(@"C:\Test.jpg",System.Drawing.Imaging.ImageFormat.Jpeg); 
    } 

私の興味をそそられたコードには、次のような問題があります。

  1. そのまま使用すると、正しく保存されたjpgファイルが得られますが、側面に黒が追加されています。 enter image description here
  2. System.Drawing.Imaging.ImageFormat.Jpegを省略するようにコードの最後の行を変更すると、どちらの側にも2つのクリアボックスが表示されますが、これはまだ私が望んでいないものです。 (彼らははっきりしているが、彼らはまだそこにいる)。 enter image description here

は、どのように私はパネルの周りの余分な面積ずに保存されたばかりのjpgファイルを入手できますか?

EDIT: 私はSplitcontainer1.panel2.width *の呼び出しを指摘しました。2.幅を2倍にしないと、実際のパネル2の半分しか下に収まらず、不要なブラックバー/ clearbars: enter image description here

+0

が原因黒色/透明ブロックに、偶然、それがあるべきとして2倍の大き出力です:彼らはに描画するあなたの呼び出しはおそらくあるべきビットマップ内の矩形を表しますか? – phill

+1

Chrisが正しいです。 2番目の質問に答えるには、黒バーと透明バーが表示されます。なぜなら、デフォルトはおそらくPNGで、アルファチャンネル(透明)を許可するのに対して、JPGはアルファチャンネルを含まないからです。 –

+0

私のコードがjpgであると言うと、なぜpngになるのですか? –

答えて

4

あなたは明示的にビットマップが広すぎる作っているように見えます:

splitContainer1.Panel2.Width * 2 

ちょうどそれを作る:

splitContainer1.Panel2.Width 

また、境界を間違って指定しています。 。

Bitmap bmp = new Bitmap(splitContainer1.Panel2.Width, splitContainer1.Panel2.Height); 
splitContainer1.Panel2.DrawToBitmap(bmp, new Rectangle(0,0,splitContainer1.Panel2.Bounds.Width,splitContainer1.Panel2.Bounds.Height)); 
+0

パーフェクト。私は幅を2倍にする理由を指摘しましたが、あなたが指摘したように境界を間違って設定していたようです。調整され、今は正常に動作します。ありがとう! –

関連する問題