KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: [TuT] C Bilder anzeigen....
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
in diesem Tutorial zeige ich euch,wie ihr Bilder in C anzeigt.

Vorraussetzungen
  • PSPSDK
  • Grundwissen in C
  • Ein kluges Köpfchen

Tutorial

Als erstes kommen die Header-Files:

Code:
#include <pspdisplay.h>
#include <pspctrl.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <png.h>
#include <stdio.h>
#include "graphics.h"


Danach definieren wir die Funktionen,um das eintippen leichter zumachen Wink

Code:
#define printf pspDebugScreenPrintf
#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))


Danach folgt die Module Informationen:

Code:
PSP_MODULE_INFO("Image Tutorial", 0, 1, 1);


Das ganze läuft nach folgendem Schema:
PSP_MODULE_INFO("MODULE_INFO",MODE,VERSION,VERSION

und danach folgen die Callbacks:

Code:
/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame();
return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
int cbid;

cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();

return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
int thid = 0;

thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}

return thid;
}


Danach folgt der Main-Code:

Code:
int main() {
char buffer[200];
Image* ourImage;
pspDebugScreenInit();
SetupCallbacks();
initGraphics();
ourImage = loadImage("ourImage.png");
if(!ourImage) {
//laden des Bildes ist fehlgeschlagen
printf("laden des Bildes fehlgeschlagen!\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;
}


Der Rest sollte kein Problem sein. Wink
Thanks to PSP-Programming.com
Werde noch viel viel mehr hinzufügen,also keine panik Wink

mfg
emink123

Heute ist dein großer TuT Tag stimmts Big Grin

Aber Thanks weiter so Smile
Folgen noch welche,
als mein Router schrott war,hatte ich keine anderen Hobbys,
und habe TuTs geschrieben Tongue
Wirklich sehr ausführlich [ /ironie]

Code:
while(x<480) {
while(y<272) {
blitAlphaImageToScreen(0 ,0 ,32 , 32, ourImage, x, y);
y += 32;
}


Hättest wenigstens beschreiben können was du hier vor hast. Klar du füllst das Display mit einer Textur aus 32x32 Pixel Kacheln. Aber welcher Anfänger kommt da schon drauf ?

Ähm wenn ich verbessern darf Big Grin

Du hast den Code nicht ganz voll endet Wink
Wie schon glaub ich PSP-Hilfe angedeutet hat xD

Das ende müsste eigentlich so aussehen:

PHP-Code:
while(x<480)
           {
               while(
y<272
               {         
                   
blitAlphaImageToScreen(,,32 32ourImagexy);
                   
+= 32;
               }
               
+= 32;
               
0;
           }
           
           
flipScreen();
    }
    
    
sceKernelSleepThread();
    return 
0;


Also der ganze Code dann so:

Spoiler: (anzeigen)
Und das makefile ist auch für einen Anfänger nicht so klar Wink
Als Anfänger weis man nicht welche Libs und Objs man brauch ^^
Also so sollte es aussehen:

PHP-Code:
TARGET our-image_datei
OBJS 
main.o graphics.o framebuffer.o

CFLAGS 
= -O2 -G0 -Wall
CXXFLAGS 
= $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS 
= $(CFLAGS)

LIBDIR =
LIBS = -lpspgu -lpng -lz -lm
LDFLAGS 
=

EXTRA_TARGETS EBOOT.PBP
PSP_EBOOT_TITLE 
Image

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


Außer dem brauch man noch die graphics.c und den graphics.h Wink

DownloadDownload

Edit: Die einfachste Methode das Bild anzuzeigen wäre:

PHP-Code:
int main() 
{
    
Imagetestpng;
    
pspDebugScreenInit();
    
SetupCallbacks();
    
initGraphics();
    
testpng loadImage("testpng.png");

    if(!
testpng
   {
         
//laden des Bildes ist fehlgeschlagen
         
printf("laden des Bildes fehlgeschlagen!\n");
    } 
    else 
    {
         
sceDisplayWaitVblankStart();
         
blitAlphaImageToScreen(,,480 272testpng00);
         
flipScreen();
    }

    
sceKernelSleepThread();
    return 
0;


Was ich glaube für Anfänger besser zu verstehen ist Wink

EDIT:

Und noch was du hattest ja noch erklären können das es blitAlphaImageToScreen() und blitImageToScreen() gibt und was der unterschied zwischen beiden ist.

Das blitAlphaImageToScreen() dafür da ist wenn man Bilder mit Transparenz ausgeben will.
Und blitImageToScreen() für Bilder ohne Transparenz ist.

Das finde ich auch nicht ganz unwichtig Wink

Ich hab dir ja vorher schon nicht geglaubt, dass du einen HEN oder überhaupt ansatzweise was coden kannst, aber nach dem "Tutorial" bin ich mir 100% sicher, dass du nichts kannst.

Zitat:
Thanks to PSP-Programming.com

Hab es frei übersetzt,
erstmal denken,dann sprechen bzw. schreiben !

Noob :
Hallo,
in diesem Tutorial zeige ich euch,wie ihr Bilder in C anzeigt.


Das ist nicht mal ansatzweise ein Tutorial. Du sagst einfach, was in den Files ist. Und dazu ist da auch 0 von dir, sondern einfach was aus der Datei was rausgesucht und eingefügt. Den Filenamen und den Inhalt kann sich jeder denken. Tolles Tutorial. Und "Thanks to XY" ist total der Hinweis darauf, dass du es quasi nur geklaut hast, Respekt. Du kannst ja nicht mal erklären, was da passiert. Highskiller.

Da muss ich PSP_Joker schon Recht geben, das ist genau der Code aus dem Example. Außerdem ist die Erklärung ein wenig mager Big Grin

"Danach folgt der Main-Code .... Der Rest sollte kein Problem sein" Big Grin
Referenz-URLs