2017-09-09 5 views
-1

私の悪い英語を申し訳ありません。GDI + PNGイメージを使用してFPSドロップを修正する方法は?

現在、私はこの方法を使用しています。

Gdiplus::Image img(L"xxx.png"); 
Gdiplus::Graphics g(hdc); 
g.DrawImage(&img,0,0); 

私は400 * 200ピクセルを描画するとPNGを使用すると、私のFPSは39〜45をドロップします。代わりに

が、BMP画像FPSを使用するが、私はこの問題を解決するにはどうすればよい60

を維持し続けます?。

コンバートピクセルフォーマット

私はこの方法を使用します(動作しない)

img = Image::FromFile(filename); 
bmp = new Bitmap(img->GetWidth(), img->GetHeight(), PixelFormat32bppPARGB); 
Graphics gra(hdc); 
gra.FromImage(bmp); 
gra.DrawImage(img, destX, destY, img->GetWidth(), img->GetHeight()); 
+0

あなたの初期化は間違っています。 'Graphics * gra = Graphics :: FromImage(bmp);'のようなものを試してみてください。残念ですが、私はあまりにもC++に慣れていません –

答えて

0

私は、これはピクセルフォーマットによるものであると仮定します。

GDI(+)はPixelFormat.Format32bppPArgbを内部的に使用します。他のすべての書式は描画時に変換されます。変換により、パフォーマンスの問題が発生する可能性があります。

画像を頻繁に描画したい場合は、描画ごとにGDIを実行する代わりに、自分で画像を読み込みます。

EDIT:

ピクセルフォーマットは次のように「変換」することができます。

// Load png from disc 
Image png = Image.FromFile("x.png"); 
// Create a Bitmap of same size as png with the right PixelFormat 
Bitmap bmp = new Bitmap(png.Width, png.Height, PixelFormat.Format32bppPArgb); 
// Create a graphics object which draws to the bitmap 
Graphics g = Graphics.FromImage(bmp); 
// Draw the png to the bmp 
g.DrawImageUnscaled(png, 0, 0); 

イメージ、ビットマップとグラフィックスオブジェクトがIDisposableインターを実装し、不要になったときに、適切に配置されなければならないことに注意してください。 Graphicsオブジェクトの

乾杯

トーマス

+0

ありがとう!私はPixelFormatを変換するいくつかにしようとします。それはまったく動作しません。あなたは私に例を教えてくれますか? – HOJ

+0

申し訳ありません。 これも機能しません。 そして私はWIN32 APIを使用しています。あなたの例は適切なWIN32 APIではありません。 – HOJ

関連する問題