2011-01-21 10 views
1

画像の生成のためのヘルパーを作成したいと考えています。これをC#ソリューションに追加します。しかし、私はバックエンドの開発者ではないので、私はダミーの例を作成し、ここで私自身の言葉で説明します:オンザフライで画像を生成するためのアルゴリズムヘルプ

更新:私が助けが必要なのは、それぞれのスケーリングを計算する方法です次のシナリオの例えば。 60×60のサムネイルプレースホルダがあり、元の画像が400×300の場合は、300を60に設定し、それに応じて400を変更する必要があります。

ヘルパーはこのようなものになります。

HelperName('OriginalImageUrl', 'FileName', X, Y, M) 

Mが、私はそれから計算するの幅または高さを使用する必要があるかどうかを判断するために必要とされる推測モード、です。これらのシナリオです:

サムネイル(正方形):幅と高さが同じであるため、おそらく最短の画像寸法を使用する必要があります。

ImagePlaceholder(主に長方形): 静的な高さ/幅。画像は高さ/幅の両方を満たす必要があるので、プレースホルダに空白の領域はありません。いずれかの次元で余分なものが切り取られます。サムネイルと組み合わせることは可能でしょうか?幅が!=高さの場合は寸法のチェックだけで正方形かどうかを判断できます。

PhotoWrapper: 最大高さ/幅。画像全体がこれらの比率に収まるように調整されます。トリミングなし、指定された2つのコンテナのサイズに合わせて基本的なサイズ変更のみ。

誰かが私にこれを手伝ったり、私が使うことができるプラグインを知っていれば、それはすばらしいでしょう。 byte[]

  • +0

    質問は何ですか? –

    +0

    あなたは何について分かりませんか?これを操作するためのインターフェースを作る方法は?具体的な実装ですか?また、私たちはあなたの所属を行うためのものではありませんので、少なくともあなた自身で解決策を探して試してみてください。その後、具体的な問題がある場合は私たちにお尋ねください。 – Euphoric

    +0

    問題はインターフェイスや実装ではなく、フィッティング/フィリングを計算する方法です(以下の回答を参照)。 Stackoverflowは、自分自身を試して研究をした後、私の最後の手段です。誰かが私を助けるのを待つのではなく、そこで問題を解決したいと思っています。また、私はここで他のどこにでも答えが見つからなかったので、今この問題を抱えている次の人はあなたを気にしません:P – olemarius

    答えて

    2

    スケーリングファクタを計算し、入出力矩形を計算することができます。

    フィッティング:このような何かを(それをテストしていない)でなければなりません

    double scaleX=(double)targetWidth/(double)originalWidth; 
    double scaleY=(double)targetHeight/(double)originalHeight; 
    
    double scaleToFit=Math.Min(scaleX,scaleY); 
    
    double newWidth=scaleToFit*originalWidth; 
    double newHeight=scaleToFit*originalHeight; 
    
    double borderX=(targetWidth-newWidth)/2; 
    double borderY=(targetHeight-newHeight)/2; 
    
    Rect InputRect=new Rect(0,0,originalWidth,originalHeight); 
    Rect OutputRect=new Rect(borderX,borderY,targetWidth-2*borderX,targetHeight-2*borderY); 
    

    中綿:私は2枚の画像を撮る機能が、ブリットしていると思う

    double scaleX=(double)targetWidth/(double)originalWidth; 
    double scaleY=(double)targetHeight/(double)originalHeight; 
    
    double scaleToFill=Math.Max(scaleX,scaleY); 
    
    double oldWidth=targetWidth/scaleToFill; 
    double oldHeight=targetHeight/scaleToFill; 
    
    double cropX=(originalWidth-oldWidth)/2; 
    double cropY=(originalHeight-oldHeight)/2; 
    
    Rect OutputRect=new Rect(0,0,targetWidth,targetHeight); 
    Rect InputRect=new Rect(cropX,cropY,oldWidth,oldHeight); 
    

    、および2つの長方形。それらの1つを使用してください。

    +0

    素晴らしい、正確に私が探していたもの:)充填と継手は、私と比較して、P:私はあなたにこれが動作するかどうかをお知らせします:) – olemarius

    +0

    うーん、1つ..これは、元の画像の寸法を考慮に入れますか? – olemarius

    +0

    これがoriginalWidthとoriginalHeightで始まる理由です。もちろん、いくつかのバグがあるかもしれません。 – CodesInChaos

    0
    1. URLからロードした画像をディスクに保存ImageImage
    2. を操作してURLを果たすか、ウェブ・ハンドラを経由して直接
    をストリーム byte[]
  • からImageを作成します。

    byte[]は、Streamで置き換えることができます。

  • 関連する問題