私は自分の作業環境で画像を切り取るために使用される小さなアプリケーションを作成しました。画像を含むウィンドウフォーム(.NET 3.5)には、画像のセクションをドラッグしたり、ボタンを押して長方形の背後にあるものを取得したりするために使用する透明な四角形があります。長方形の背後にある画像をキャプチャする
現在、以下のコードを使用していますが、これはキャプチャしている領域がかなりのピクセルだけ外れているためです。私はCopyFromScreen関数と関係があると思います。
//Pass in a rectangle
private void SnapshotImage(Rectangle rect)
{
Point ptPosition = new Point(rect.X, rect.Y);
Point ptRelativePosition;
//Get me the screen coordinates, so that I get the correct area
ptRelativePosition = PointToScreen(ptPosition);
//Create a new bitmap
Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
//Sort out getting the image
Graphics g = Graphics.FromImage(bmp);
//Copy the image from screen
g.CopyFromScreen(this.Location.X + ptPosition.X, this.Location.Y + ptPosition.Y, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
//Change the image to be the selected image area
imageControl1.Image.ChangeImage(bmp);
}
画像がかなり出て再描画されたとき、私はこの時点で永遠に感謝されるだろう、なぜ誰もが見つけることができます。また、ChangeImage
関数はうまくいきます - 選択領域としてフォームを使用すると機能しますが、四角形を使用するとちょっとジャズになります。
フム、そのまだ間違ったエリアをつかんで、Y座標+ 50何らかの理由で。 –
ああ、コード内のPointの名前は 'relativePosition'ですが、あなたはそれをptRelativePositionとして参照しています。 –
@AdLib:プロジェクトなどをアップロードできますか? (遅れて申し訳ありませんが何らかの理由でコメント通知がありませんでした。) – Ryan