PSP程序开发第四课-----png格式图像处理

      GU 函数在自己的程序中添加( png 像,我想 这应该 个人想要的。 Demo


首先我假 你已 安装了 cygwin ( 也可以不要 ) ,并且安装了 DevkitPro ,知道怎 生成 eboot.pbp 并且放入 psp 中运行,那就往下看。否 重新 阅读 前面的教程。也 要再修 一下 C 或者 C++
       
在正式 行工作前,我 先要安装一些 SVN 的新 文件。也 你要 SVN 是什 ,它是一个版本管理程序,适合 多人 开发 一个 目。 http://subversion.tigris.org/ 并安装它。我 需要使用 zlib libpng 两个

        
运行 cygwin ,在窗口下
svn checkout svn://svn.pspdev.org/psp/trunk/zlib
得到如下 果:
这时 cygwin/home/ 的用 名目 中就会得到 zlib 文件
入:
cd zlib
make
make install

得到如下 果:
继续
cd ..
svn checkout svn://svn.pspdev.org/psp/trunk/libpng
cd libpng
make
make install
cygwin/usr/local/psp/lib 中就得到了 libz.a libpng.a
rm -Rf zlib
rm -Rf libpng
( 所有的操作在 dos 窗口下同 可以,可以不用 cygwin)
        在可以 始了,首先下 this , 接着往下看:

framebuffer.h  framebuffer.c  graphics.h graphics.c  ourimage.png
到当前目
接着新建 main.c 或者 main.cpp (把前面文件后 也改 cpp )加入以下代
/*
          My Image Display Program
          Author: Brad Dwyer
         
Fan;2006,1,1
          Date: 12/28/2005

          Thanks to Psilocybeing for the base code.
*/
文件如下:
#include <pspdisplay.h>
#include <pspctrl.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <stdio.h>
#include <png.h>      
#include "graphics.h"
/* Define the module info section */
PSP_MODULE_INFO("first_psp", 0, 1, 1);
/* Define the main thread's attribute value (optional) */
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
/* Define printf, just to make typing easier */
#define printf pspDebugScreenPrintf
void dump_threadstatus(void);
/* Exit callback */
int exit_callback(void)
{
 sceKernelExitGame();
 return 0;
}
/* Callback thread */
void CallbackThread(void *arg)
{
 int cbid;  
 
// printf("/nCallback Thread Status:/n");
 cbid = sceKernelCreateCallback("Exit Callback", (SceKernelCallbackFunction)exit_callback, NULL);
 sceKernelRegisterExitCallback(cbid);
 sceKernelSleepThreadCB();
}
/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void)
{
 int thid = 0;
 thid = sceKernelCreateThread("update_thread", (SceKernelThreadEntry)CallbackThread, 0x11, 0xFA0, 0, 0);
 if(thid >= 0)
 {
  sceKernelStartThread(thid, 0, 0);
 }
  return thid;
}
以上代 主要 实现 程序的退出 线

int main(int argc,char *argv[])
{
 char path[255];                  
 strcpy(path,argv[0]);              //
取路径
 *(path+strlen(path)-9)='/0';  //
之所以 -9 是去掉末尾 eboot.pbp 字符串。
 SetupCallbacks();             
 pspDebugScreenInit();          
 printf("/npath=%s/n",path);       //
示路径。
 char buffer[200];
    Image* ourImage;                 //
以下代 都封装在 graphics.h png.h
 initGraphics();
 sprintf(buffer, "ourImage.png");
    ourImage = loadImage(buffer);
 printf("/nbuffer=%s/n",buffer);
  if (!ourImage) {
                    //Image load failed
                    printf("Image load failed!/n");
          } else {
                    int x = 0;
                    int y = 0;
                    sceDisplayWaitVblankStart(); //
等待屏幕垂直 束,可以去掉它 一下 果。
     while (x < 480) {
                              while (y < 272) {
                                        blitAlphaImageToScreen(0 ,0 ,32 , 32, ourImage, x, y);
                                        y += 32;
                                              }
          x += 32;
                              y = 0;
         }
      flipScreen();                   //
屏幕 冲区,否 无法 示更新的内容
          }
  sceKernelSleepThread();          
 return 0;
}
主程序完成。
下面是 makefile 文件的 置:
TARGET = First_Psp
OBJS = main.o framebuffer.o graphics.o //
文件
INCDIR =
CFLAGS = -O3 -G0 -Wall -mgp32  -mlong32 -g //
于大的 目可以先使用 -O0 或者 -O1 调试
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =
LDFLAGS =
LIBS=-lpsppower -lpspgu -lpng -lz -lm  //

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = first_game
PSP_EBOOT_ICON = NULL
PSP_EBOOT_ICON1 = NULL
PSP_EBOOT_UNKPNG = NULL

PSP_EBOOT_SFO = PARAM.SFO
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

最后一 , 入:
make
如果没有 错误 ,当前 目目 会生成 eboot.pbp
将其 转换 后和 ourimage.png 放入 psp 测试 。你将得到一个充 全屏幕的网格
个例子 示部分用到了 sceGu 的函数,以后我会 专门 将它 们详细 。要想深入 psp 程就要 其内核函数熟 运用, 个例子不具 备这 个功能。
原文地址如下:
http://www.scriptscribbler.com/psp/tutorials/lesson04.htm
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值