KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: C++ Bild anzeigen
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag,

heute habe ich mal folgendes Problem.
Ich habe versucht ein einfaches Bild auszugeben. Leider war mein Erfolg eher mäßig.

Das ist das Bild welches ich anzeigen wollte:


Das ist das Ergebnis auf dem Bildschirm:


Hier ist mein Code:

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

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

PSP_MODULE_INFO("Image Display Program", 0, 1, 1);

/* 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;
}
int main() {
    char buffer[200];
    Image* ourImage;
    pspDebugScreenInit();
    SetupCallbacks();
    initGraphics();
    sprintf(buffer, "ourImage.png");
    ourImage = loadImage(buffer);
    if(!ourImage) {
                  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;
                               }
                               x += 32;
                               y = 0;
                  }
    flipScreen();
    }
    sceKernelSleepThread();
    return 0;
}


Weiß jemand was hier schief gelaufen ist?

MfG[/php]

Buffer zu klein?
Sry sonst wüsste ich nichts...
Ich habe den Fehler gefunden, danke Wink
Könntest du uns bitte den Fehler auch sagen ?
mfg.flo

flofrucht :
Könntest du uns bitte den Fehler auch sagen ?
mfg.flo


Der richtige Code müsste so aussehen:

Code:
#include &lt;pspdisplay.h&gt;
#include &lt;pspctrl.h&gt;
#include &lt;pspkernel.h&gt;
#include &lt;pspdebug.h&gt;
#include &lt;pspgu.h&gt;
#include &lt;stdio.h&gt;
#include "graphics.h"

#define printf pspDebugScreenPrintf
#define MAX(X, Y) ((X) &gt; (Y) ? (X) : (Y))

PSP_MODULE_INFO("Image Display Program", 0, 1, 1);

/* 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 &gt;= 0) {
sceKernelStartThread(thid, 0, 0);
}

return thid;
}
int main() {
    char buffer[200];
    Image* ourImage;
    pspDebugScreenInit();
    SetupCallbacks();
    initGraphics();
    sprintf(buffer, "ourImage.png");
    ourImage = loadImage(buffer);
    if(!ourImage) {
                  printf("laden des Bildes fehlgeschlagen!\n");
    } else {
                  int x = 0;
                  int y = 0;
                  sceDisplayWaitVblankStart();
                                            blitAlphaImageToScreen(0, 0, 480, 272, ourImage, x, y);
                  
    flipScreen();
    }
    sceKernelSleepThread();
    return 0;
}


MfG ferra

ahh Vielen Dank,bitte gewöhne dir immer gleich an die Lösung auch zu posten Wink
Kann der Thread geclosed werden ?
mfg.flo

flofrucht :
ahh Vielen Dank,bitte gewöhne dir immer gleich an die Lösung auch zu posten Wink
Kann der Thread geclosed werden ?
mfg.flo


Ja, kann er. danke

MfG ferra

Guten Morgen,

zum Glück ist hier noch offen.

Eine Frage habe ich noch bezgl der Bilder.
Wie lösche ich den einzelne Bilder aus dem Speicher. Ansonsten würde ja die PSP irgendwann freezen.

MfG ferra
Hmm ich kenne mich zwar nicht so gut aus aber per MemoryClean warsch.
schau mal auf psp.jim.sh.
sry das ich nicht geclosed habe der Thread ist iwie.untergegangen..
mfg.flo
Falls noch Interesse besteht XD

Mit clearImage(Color color, Image* image); kann man ein einzelnes Bild löschen Wink

Beispiel:

Code:
#include ...
....

#define black 0xFF000000

...code...

Image* sample;

sample = loadImage("sample.png");

...code...

if(pad.Buttons &amp; PSP_CTRL_CROSS)
{
   clearImage(black, sample);
}

...code...


Hoffe du hast es verstanden, wenn du das gemeint hast Big Grin

PS: Ich weis das der Thread 13.05.2010 ist, aber vielleicht hat ja einer das Problem Wink

stehn :
Falls noch Interesse besteht XD

Mit clearImage(Color color, Image* image); kann man ein einzelnes Bild löschen Wink


LOL oh man du hast keine ahnung Big Grin

Du überschreibst nur den speicher und gibst ihn nicht frei, da kannst duch auch gleich dem pointer sampler ein neues bild zuweisen dann kannst dir das sparen ist nähmlich völlig sinnlos was du da geschrieben hast -.-

Aber naja pspking halt Big Grin

Ceikor :

stehn :
Falls noch Interesse besteht XD

Mit clearImage(Color color, Image* image); kann man ein einzelnes Bild löschen Wink


LOL oh man du hast keine ahnung Big Grin

Du überschreibst nur den speicher und gibst ihn nicht frei, da kannst duch auch gleich dem pointer sampler ein neues bild zuweisen dann kannst dir das sparen ist nähmlich völlig sinnlos was du da geschrieben hast -.-

Aber naja pspking halt Big Grin


Geb dir Recht... Speicherverschwendung pur Wink

Ich hab ihn in der Sache halt falsch verstanden. Sorry aber deswegen steht dort ja "wenn du das gemeint hast" Wink

-ferra- :
Wie lösche ich den einzelne Bilder aus dem Speicher.

Antwort von stehn

stehn :
Mit clearImage(Color color, Image* image); kann man ein einzelnes Bild löschen Wink


Also entweder kannst du nicht lesen oder was eher hinkommt du hast keine ahnung. Den du schreibst ja es löscht Big Grin macht es aber definitif nicht^^

ist doch egal, stehn ist ja kein profi, woher soll er wissen dass man so mehr speicher verbraucht?
Man muss ledeglich dem Zeiger ein neues Bild zuweißen und dass auch definieren...
Seiten: 1 2
Referenz-URLs