PSP xvi

PSPプログラミングを教えるブログ(本気で頑張る人アクセス大歓迎サイト)

PSP-X.gif

記事の間違いを報告  新アップローダー
記事修正情報 PSPプログラミング資料 自作ゲーム PSP用エミュレータ リンク

公認リンク
公式PSP専科 公式PSVita専科 はじめるPSPSDK PSP EXEC GAME M@STER PSP 猫山のYouTubeチャンネル

TAG
全記事にタグをつけています  http://nekoyama2gillien.blog36.fc2.com/?tag=タグ
PSP PSPプログラミング DXライブラリPortable OSLib ショートプログラム ハローワールド
PSP自作ゲーム PSP自作ソフト エミュレータ ゲームアーカイブス PSP動画
動画 初音ミク ミクミクダンス MMDドラマ ゲーム 魔法少女まどか☆マギカ 侵略!イカ娘
アイドルマスター

このブログについて

このブログでは、非公式のPSPソフト、いわゆる自作ソフト( PSP Homebrew )を作る事を目的とします。

著作権などの こまかい利用規約については、こちらを開いてお読み下さい

このブログについて知りたい方、初めて来訪された方はこちらを開いてお読みください
お問い合わせは 猫山猫宗(nekomune@gmail.com)までどうぞ


当ブログはリンクフリーです。ブログ名は、アルファベットで「PSP xvi」と書いて『ピーエスピー・エクシビ』とお読みください。
相互リンクを希望されるブログ運営者様は、ココで申請して下さい。


このブログで全記事から探し物の方は、ここをクリックして下さい。
http://nekoyama2gillien.blog36.fc2.com/?all

スポンサーサイト 

--/--/--
--. --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[edit]

CM: --
TB: --

page top

グラフィック画面に点が打てましたので、線を引いたり図形を描画しようかと考えたんですが、そういう作業は、グラフィック機能を見せつけるゲームとかでないとお目見えしない様です。
そいうのんは、PSPSDKの sceGuDrawArray( )関数 を使えば実現できます。GPUを使います。その件は各自で、勉強して下さい。

今回は、Windows標準のビットマップ画像をPSPで表示する、という事を勉強します。

まずは、Windows標準のビットマップ画像のファイル構造を調べてみましょう。
以下。


Windows bitmap - Wikipedia
ビットマップ画像 - Wikipedia
Bitmapファイルフォーマットの資料
-- BMP形式入門 - BMPファイルの中身をちょっと覗いてみる --


ビットマップ画像ファイルは、基本的には、先頭のヘッダー部分と、ビットマップ画像部分の定められたデータ長(1ピクセルあたりのビット数)で構成されており、表示されている画像の画素情報を 非圧縮で そのまま データにしている、という事実。
つまり、24ビットカラーのビットマップ画像の場合、画像データ本体を3バイトづつ(RGB)読んでV-RAM に貼り付ける事で、ビットマップ画像上の1ドットが打てる、という事です(ヘッダー部分は無視するものとします)。
(32ビットカラーのビットマップ画像の場合は4バイトづつ読み込み)

そうそう、PSPとWindowsでは、RGBとBGRの様に、V-RAMの構成が 赤と青の配置が逆ですので そこら辺 注意のこと。


では、完成したプログラムをどうぞ([ 続きを読む ] でプログラムの一部が見れます)。

今回の見どころ

・ファイル操作(BITMAPファイルのオープン、読み込み、クローズ)
・全角文字ライブラリへの機能追加(文字背景色を指定できる様になりました / 透明色も指定可能)


サンプル画像として、私の製作したシュワちゃんPSP壁紙を 24ビットカラーBITMAP画像に変換したのんを同梱しました。


『PSP画面に ビットマップ画像を描画するプログラム』実行画面
SS20090617A.png

↓↓ このBITMAP画像をPSP画面へ表示するッッ!!
SS20090617B.jpg


『PSP画面に ビットマップ画像を描画するプログラム』のダウンロード
DISP_BITMAP_src.zip  363 KB (371,749 バイト)
ダウンロード
(ソースのコンパイルには、全角文字表示ライブラリが必要)
(ソースコード / CFW用の実行ファイル)
ユーザーモード版EBOOT.PBPです。

PSP壁紙(480x272)を、24Bitカラー・ビットマップ画像に変換した画像
(~.BMP)を、このソフトで表示する事が可能でっす!
但し、ファイルは "ms0:/PICTURE/TEST.bmp" 限定。


//  main関数の要所とか。

#define UE_KARA 1 // 上から下 のタイプのBitMap
#define SITA_KARA 2 // 下から上 のタイプのBitMap

#define HYOUJI_SURU 5 // BMP画像の表示許可
#define HYOUJI_SINAI 7 // BMP画像の表示中止

#define BMP_FILE "ms0:/PICTURE/TEST.bmp" // 読み込むBITMAP画像ファイルはコレ(TEST.bmp)


///////////////////////////////////////////////////////////////////////
// サブルーチンから抜粋 (ファイル操作テクニック)
///////////////////////////////////////////////////////////////////////

{
char read[14];
unsigned long size;
FILE *fp; // BITMAP画像ファイル読み込み用

// 画像ファイルの読み込み (ファイルを開くテクニック)
if((fp=fopen( BMP_FILE ,"rb"))==NULL)
{
// 画像ファイルが無かったら赤色画面
pgFillvram(RED); // 画面を赤く塗りつぶし
mh_print(100,120,BMP_FILE,BLACK,WHITE); // BITMAPファイル名
mh_print(120,140,"は、開く事が出来ませんでした。",BLACK,WHITE);
goto EXIT;
}

//////// ファイルヘッダー・チェック //////////////
fgets(read,3,fp); // ファイルポインタ fp から2バイト読み込み
mh_print(0,0,read,YELLOW,RED);
mh_print(40, 0,"ファイルのヘッダ部分から、",WHITE,BLACK);
if(strcmp(read,"BM")!=0)
{
mh_print(60,12,"BITMAP画像で無いと判断しました",WHITE,BLACK);
hyouji_flag = HYOUJI_SINAI;
}
else
mh_print(60,12,"BITMAP画像であると判断しました",WHITE,BLACK);

//////// 続く 12バイトを読み飛ばします
fseek(fp,12,SEEK_CUR); // ファイルポインタ fp から12バイト読み飛ばします

//////// 色ビット数[bit]・チェック (2バイトデータの起こしかたテクニック)
size=(long)fgetc(fp)|(long)fgetc(fp)<<8;


//////// BITMAP画像を読み込みつつ、PSP画面に描画する部分
int x,y,col;
unsigned char *pt;
for(y=271;0<=y;y--) // 下から上へ描画するループ
{
pt=pgGetVramAddr(0,y); // (0,y) の V-RAMのアドレスを取得
for(x=0;x<480;x++) // 画面 左端から右端へのループ
{
col=(long)fgetc(fp)<<16|(long)fgetc(fp)<<8|(long)fgetc(fp); // ビットマップ画像データ(1ドット)を読み込みます
*(unsigned long *)pt=col; // PSP画面に1ドット 描画します
pt+=4; // 描画用 V-RAMポインタを、右に1ドットずらします(4バイト足します)
}
}


fclose(fp); // ファイルを閉じる
}


  ( 全角文字表示ライブラリに機能を一つ追加しました )


【 全角文字表示ライブラリに追加した機能 】
・mh_print( ) 関数に、背景色描画機能を追加しました。
  → パラメーターを、1つ追加しました。

  void mh_print(int x,int y,const char *str,long col,long col2);
     ↑↑↑↑↑


col2 に背景色の色コード(16進数6桁)を記述して下さい。
以前のように、透明で良いなら、-1 を記述して下さい。


白い文字と青い背景色で文字描画をしたいなら、
mh_print( 100, 50, "ひょー", WHITE, BLUE);
の様に記述して下さい。

今まで通り、背景色が透明で良いなら、
mh_print( 100, 50, "ボン!", GREEN, -1);
の様に、-1 を記述して下さい。
関連記事
スポンサーサイト

[edit]

CM: 2
TB: 0

page top

この記事に対するコメント

ぐはっ

ダウンロードできねぇ~~
ファイルのアップロードしてなかったwwwww

猫山猫宗 #HfMzn2gY | URL | 2009/06/17 18:03 * edit *

あぷぅしたぁーー

これで一安心!!

猫山猫宗 #HfMzn2gY | URL | 2009/06/17 20:12 * edit *

page top

コメントの投稿

Secret

page top

トラックバック

トラックバックURL
→http://nekoyama2gillien.blog36.fc2.com/tb.php/98-d606c4aa
この記事にトラックバックする(FC2ブログユーザー)

page top


h o m e |


 

2017-03