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

さて、前出の 「全角文字版はろ~わーるど」 の解説です。
大した事はしていません。

本家 『 全角文字表示ライブラリ zenkaku.c 』 への変更は、下記の通りです。
文字の描画色のキャスト(型宣言)を、"int"から"long"に変更しただけです。

理由は、
ただの気まぐれです。気まぐれオレンジロード(古っwww
「C++コンパイラーは、CPUやコンパイラーに渡すパラメータ等で int の扱いが変化する為」です。
PSPは32BIT-CPUですし、色の表現は32Bit可能ですし、ソースを見ていたら32Bitで扱われている事などから、"long"に統一しました。

昔ながらのプログラマーは、int は2バイトって固定観念があるんですよ。PSPは32ビットCPUを装備してるので、int は4バイト(固定)なのですが…。

で、文字の描画処理は、フォントの有効データがあれば、指定された色で点を打ち、フォントの有効データが無ければ何もしない、という事が行なわれています(擬似透明処理)。
空白文字だと全く点が打たれません。"●"という文字だと円状に点が打たれます。

こういう処理をしていると、暗い色で文字列を描画して、左上に(-1,-1)した座標から明るめの色で文字列を描画し、『立体感が出ている影つきの文字列』が描画できます。

私は、『 全角文字表示ライブラリ zenkaku.c 』を更に改良して、文字色を透明に出来るようにしたり、背景色を有効(32Bitカラー)にする事も考えています。
そうするとカラフルな文字が描画できて楽しいのでは?とか思ったり。

関数 mh_print のフォントについて
書体は東雲フォント(しののめふぉんと)です。
半角文字では横6ピクセル×縦12ピクセル
全角文字では横12ピクセル×縦12ピクセル
となっております。
Windows文字を全てサポートし、更に絵文字も入っています。

関数 mh_print の使い方
/*****************************************************************************
*文字列の描画
*****************************************************************************/

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

int x == 描画始点のX座標(左端 / 0~479の範囲で指定:PSP横は480ピクセル)
int y == 描画始点のY座標(上端 / 0~271の範囲で指定:PSP縦は272ピクセル)
const char *str == 描画する文字列のオフセット値(アドレス:32Bitの値で指定)
long col == 描画する文字列の色を32Bitカラーで指定(実は24Bitカラー)

<使用例>
mh_print(32, 27, "Hello,world !",0xffffff); // 白色


尚、PSPでの32Bitカラーは、下記のようになっています。

( 上位 Bit  ←←←←←←←←←←    →→→→→→→→→→ 下位 Bit )
無無無無無無無無 青青青青青青青青 緑緑緑緑緑緑緑緑 赤赤赤赤赤赤赤赤

簡単に述べると、無青緑赤の順に、各色成分が 8 Bit 持っています。
Windowsでは、無赤緑青なので、PSPとは 青成分と赤成分が逆になっている、という事実。

8 Bit という事は、0~255 の 256通り の表現が可能という事です。
0 は無色で、255 は最大に明るい色、です。
C++言語での色表現を下記に書いてみました。C++言語では16進数を 0x数値 と書きます

< 例 >
青色:0x00FF0000
赤色:0x000000FF
緑色:0x0000FF00
紫色:0x00FF00FF
黄色:0x0000FFFF
水色:0x00FFFF00
黒色:0x00000000
灰色:0x00777777

32Bitカラーといっても、実際は24Bitカラーなんですねぇ。

この関数に対して不明点・質問があったら、コメント欄に書いてください。解かる範囲でお答えします。

関連記事
スポンサーサイト

[edit]

CM: 1
TB: 0

page top

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

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

# |  | 2009/05/05 11:24 * edit *

page top

コメントの投稿

Secret

page top

トラックバック

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

page top


h o m e |


 

2017-04