曲名 | スコア | 記録 | 曲名 | スコア | 記録 | |||||
---|---|---|---|---|---|---|---|---|---|---|
天使の歌う小夜曲 | 66657 | (96.52%) | 普通 | 69063 | 羽根のブランケットにつつまれて | 62573 | (98.11%) | 63776 | ||
Angelic Magic | 84201 | (93.02%) | 普通 | 89319 | ハレルヤ彗星群 | 100957 | (91.94%) | 普通 | 106612 | |
街へ | 38675 | (93.45%) | 普通 | 41384 |
日曜ですがプログラミングをしていました。Windowsでメモリに読み込まれたデータをもとにPNGを表示しようと思っていたのですが、GDI+とIStreamというのを使えば出来るようです。PNGだけでなく普通のBMPやJPGなんかも出来ます。かなり遅い気がしますが。
LPSTREAM pstream;
HGLOBAL hGlobal=GlobalAlloc(GHND,PNGデータのサイズ);
LPVOID p=GlobalLock(hGlobal);
memcpy_s(p,PNGデータが入ったバッファ,PNGデータのサイズ); //最初からpに展開してもOK
GlobalUnlock(hGlobal);
HRESULT res=CreateStreamOnHGlobal(hGlobal,TRUE,&pstream);
if(res!=S_OK){return FALSE;};
pImg=Image::FromStream(pstream);
f(pImg->GetLastStatus()!=Ok){delete pImg;return FALSE;};
pstream->Release();
こんな感じで読み込めます。ファイルからの場合は直接
pImg=Image::FromFile(ファイル名);
で出来ます。コンストラクタを使って
Image img(ファイル名);
Image img(pstream);
とかでもいいです。
使う時は
Graphics g(hDC);
g.DrawImage(pImg,x,y,width,height);
みたいな感じで。
PNGの一部((x,y)から幅cx,高さcy分)を切り出して表示したい時は、
Rect dst;dst.X=表示先のx座標;dst.Y=表示先のY座標;dst.Width=幅;dst.Height=高さ;
としておいて
g.DrawImage(pImg,(const Rect&)dst,(INT)x,(INT)y,(INT)幅,(INT)高さ,(Unit)UnitPixel);
とします。キャスト無いとオーバーロードがたくさんありすぎてコンパイラが誤動作するかも知れないので全部書いておきました。dstの幅と高さを変えれば拡大縮小も出来ます。UnitPixelというのはenum型なのでそのままUnitPixelと書きましょう。ちなみに2のようです。
Rect型はX,Y,Width,Heightで、RECT型はleft,top,right,bottomなのを間違えていてずっと変な感じに拡大されておかしいと悩んでいたのは内緒です(爆)
オンラインマニュアルが.net frameworkのものしかなくて苦労しました…
今更MFC使ってる方が悪いといえば悪いのですが(爆)
フォルテールはちょっと低めですがクリア。街はけっこう手間取りましたが他はすぐに出ました。
LPSTREAM pstream;
HGLOBAL hGlobal=GlobalAlloc(GHND,PNGデータのサイズ);
LPVOID p=GlobalLock(hGlobal);
memcpy_s(p,PNGデータが入ったバッファ,PNGデータのサイズ); //最初からpに展開してもOK
GlobalUnlock(hGlobal);
HRESULT res=CreateStreamOnHGlobal(hGlobal,TRUE,&pstream);
if(res!=S_OK){return FALSE;};
pImg=Image::FromStream(pstream);
f(pImg->GetLastStatus()!=Ok){delete pImg;return FALSE;};
pstream->Release();
こんな感じで読み込めます。ファイルからの場合は直接
pImg=Image::FromFile(ファイル名);
で出来ます。コンストラクタを使って
Image img(ファイル名);
Image img(pstream);
とかでもいいです。
使う時は
Graphics g(hDC);
g.DrawImage(pImg,x,y,width,height);
みたいな感じで。
PNGの一部((x,y)から幅cx,高さcy分)を切り出して表示したい時は、
Rect dst;dst.X=表示先のx座標;dst.Y=表示先のY座標;dst.Width=幅;dst.Height=高さ;
としておいて
g.DrawImage(pImg,(const Rect&)dst,(INT)x,(INT)y,(INT)幅,(INT)高さ,(Unit)UnitPixel);
とします。キャスト無いとオーバーロードがたくさんありすぎてコンパイラが誤動作するかも知れないので全部書いておきました。dstの幅と高さを変えれば拡大縮小も出来ます。UnitPixelというのはenum型なのでそのままUnitPixelと書きましょう。ちなみに2のようです。
Rect型はX,Y,Width,Heightで、RECT型はleft,top,right,bottomなのを間違えていてずっと変な感じに拡大されておかしいと悩んでいたのは内緒です(爆)
オンラインマニュアルが.net frameworkのものしかなくて苦労しました…
今更MFC使ってる方が悪いといえば悪いのですが(爆)
フォルテールはちょっと低めですがクリア。街はけっこう手間取りましたが他はすぐに出ました。
この記事へのトラックバックURL: https://www.asmusic.jp/ASHARD/score/tb.cgi/yu-oishi/20080629手動トラックバック