2010-12-14 5 views
3

私は受け入れ答えhereを以下が、そのまだだ私は、画像のためのトリミングツールを作ってるんだし、それが生産だ画像を生成だ、なぜ私は私の人生のために把握することはできません...このイメージ・クロッパーの何が問題なのですか?

奇妙な...ここに私のコード:

public void Crop(
    string FileName, 
    Crop Crop) { 
    using (Bitmap Source = ((Bitmap)Image.FromFile(FileName))) { 
     using (Bitmap Target = new Bitmap(Crop.Width, Crop.Height)) { 
      using (Graphics Graphics = Graphics.FromImage(Target)) { 
       Graphics.DrawImage(Source, new Rectangle(new Point(Crop.Left, Crop.Top), new Size(Crop.Width, Crop.Height)), new Rectangle(new Point(0, 0), new Size(Target.Width, Target.Height)), GraphicsUnit.Pixel); 
      }; 

      Target.Save((FileName + ".temp"), JpegCodecInfo, HighQualityEncoder); 
     }; 
    }; 


    this.NormalizeFileName(FileName); 
} 

私を助けてください。私は @Aarononthewebについては

は、ここにCropクラスだalt text

UPDATE ...私が取得しています何の画像を添付していますどのようにそれが読み込まれます:

public class Crop { 
    [Required] 
    public short Height { get; set; } 

    [Required] 
    public short Left { get; set; } 

    [Required] 
    public short Top { get; set; } 

    [Required] 
    public short Width { get; set; } 
} 

とjQueryをそれはそれを移入:

$("#Image input:submit").bind("click", function() { 
    $("#Crop\\.Height").val(Crop.height()); 
    $("#Crop\\.Left").val(Crop.position().left); 
    $("#Crop\\.Top").val(Crop.position().top); 
    $("#Crop\\.Width").val(Crop.width()); 
}); 

UPDATE 2

気にしないで、私はそれを得ました。私は頭をきれいにするために質問をした後に昼寝を取った後、もう一度それを見ると、私は2つの矩形を切り替えて何が起こるかを見ることにしました。まあ、それはそれを修正したものを推測する。

この時点で、APIのドキュメントに記載されている名前は欺瞞的だと言わざるを得ないでしょう。例えば、文書は出力画像をソースとし、入力画像をとして参照します。おそらく、APIの名前を変更する必要がありますか?

Graphics.drawImageを(ソース、新しいRectangle(新しいポイント(Crop.Left、Crop.Top)、新しいサイズ(Crop.Width、Crop.Height))、新しいRectangle(次の行に

+1

私はあなたの四角形が後方にあると思います... Drawimage(image、destRect、sourceRect、...)APIドキュメントをチェックしてください... – Jaime

+0

Cropクラスのソースを投稿できますか?これはX/Y反転エラーのように見えます(つまり、あなたは.DrawImage関数呼び出しのどこかでXとYを入れ替えました)。 – Aaronontheweb

+0

@Aaronontheweb、私はあなたが望む情報で自分の投稿を更新しました。 – Gup3rSuR4c

答えて

3

新しいPoint(0,0)、新しいSize(Target.Width、Target.Height))、GraphicsUnit.Pixel);

Crop.LeftとCrop.Topが0に設定されていることを確認します。それ以外の場合は、取得している奇妙なオフセットでピクセルを設定します。

Graphics.DrawImage(新しいRectangle(新しい点(0,0)、新しいサイズ(Crop.Width、Crop.Height))、新しいRectangle(新しいRectangle新しいPoint(0,0)、新しいSize(Target.Width、Target.Height))、GraphicsUnit.Pixel);

+1

もし彼が.DrawImageをそのように使用するのであれば、彼が作ることができるのは、ソース画像の左上隅から始まる画像だけです。オフセットは、実際にトリミング動作を行うために必要です。 – Aaronontheweb

+0

まさに私が思っていたもので、イメージを切り抜く努力を完全に打ち負かしました... – Gup3rSuR4c

+0

私はポイントを参照していますが、最初の矩形はデスティネーション矩形であり、デスティネーション矩形のそのポイントで描画を開始するので、2番目の矩形にオフセットを設定するのではなく、 –

関連する問題