2017-08-12 20 views
0

私はモノグラムプロジェクト用にWindowsフォームを使用してレベルエディタを作成しようとしています。モノグラムでこれを行う必要があるときは、描画タイプをPointClampに設定して、各ピクセルを拡大してピクセル化するのではなく描画します。私はこのようなことを絵の箱を介して望んでいました。今のところそれはthisのように見えますが、私はthisのようなより鮮明できれいな画像を好むでしょう(2番目はモノゲームでどのように表示されるかです)。私はこれのためのコードをアップロードしていないが、ファイルストリームからイメージを取得し、それを拡大するためにビットマップコンストラクタを使用したと仮定します(関連性はないと思いますが、CSharp WindowsフォームPicturebox画質の低下なしで小さな画像を描画

Image croppedImage, image = tileMap.tileBox.Image; 
var brush = new SolidBrush(Color.Black); 

try { croppedImage = CropImage(image, tileMap.highlightedRect); } catch { 
    return; // If crop target is outside bounds of image then return 
} 

float scale = Math.Min(higlightedTileBox.Width/croppedImage.Width, higlightedTileBox.Height/image.Height); 

var scaleWidth = (int)(higlightedTileBox.Width * scale); 
var scaleHeight = (int)(higlightedTileBox.Height * scale); 

try { higlightedTileBox.Image = new Bitmap(croppedImage, new Size(scaleWidth, scaleHeight)); } catch { 
    return; // Image couldn't be scaled or highlighted tileBox couldn't be set to desired image 
} 

CropImage:

private static Image CropImage(Bitmap img, Rectangle cropArea) { 
    return img.Clone(cropArea, img.PixelFormat); 
} 

private static Image CropImage(Image img, Rectangle cropArea) { 
    return CropImage(new Bitmap(img), cropArea); 
} 

上記のコードは、それの全体が私の現在の方法です。 tileMapはフォームで、tileboxはそのフォーム内のピクチャボックスです.imageは、ユーザが強調表示したものに切り取られる前のフルスプライトシートのテクスチャです。クロップされた後、私は、現在のピクチャボックス(highlightedTileBoxの)イメージをクロップされたイメージの拡大版に設定しようとします。

+0

さらにコードが必要です。 – leAthlon

+1

よろしくお願いします。 –

+1

@leAthlonもっとコードを追加しました:) –

答えて

1

私はちょっと試して解決策を得ました。 サイズによって画像を直接スケーリングするように見えますが、何らかの補間を使用しています。 Winformsでサポートされているさまざまな補間モードを試すために、少しデモを作成しました。 ご覧のとおり、すべてのラベルにはInterpolationModeの名前が含まれ、その結果のイメージが続きます。私が使ったオリジナルのビットマップは、上の小さなものです。 enter image description here あなたの質問から、NearestNeighbourのようなものを達成したいと思うようです。

次のコードはbmpをスケールし、結果はbmp2に格納されます。それがあなたが望むものなら、試してみてください。解決策としてこれを使用している場合は、適切な実装を構築することを検討してください(未使用のビットマップなどを破棄します)。 私はそれが助けてくれることを願っています。

 Bitmap bmp = new Bitmap("test.bmp"); 
     Bitmap bmp2; 
     Graphics g = Graphics.FromImage(bmp2=new Bitmap(bmp.Width * 2, bmp.Height * 2)); 
     g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; 
     g.DrawImage(bmp, 0, 0, bmp.Width * 2, bmp.Height * 2); 
     g.Dispose(); 
+0

Thnxこれを試してみます。私のフォームのXNAコントロールを作成しようと1時間を費やしただけですが、これは簡単なので削除します。 –

+1

はい、ついに私はそれを働かせました。 Thnx so much :) –

+0

あなたが望むものなら、答えを受け入れることを検討してください。 – leAthlon

関連する問題