:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Forums Hébergés :: > OldSchool Library > Aide au développement

Aide au développement Aide sur l'utilisation d'OSLib

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 19/04/2008, 20h57   #1
floorball92
Membre
 
Date d'inscription: 02/04/2008
Messages: 16
Par défaut Read Color of a Pixel

Hi, I have a Problem. I want to know, if it' s possible to read the color of an spezific pixel. I mean, i have the pixel 10*10 and want to know, if he is pink ( only an example ).

Is there a function in OSl, I mean, that I' ve read something like this somewhere, but I could' t find it. If it' s not on OSL, can someone give me a way to do this job with normal SDK??

Floorball92

ps: like last time to, sorry for my bad english xD
floorball92 est déconnecté   Réponse avec citation

Publicité

Vieux 19/04/2008, 22h10   #2
floorball92
Membre
 
Date d'inscription: 02/04/2008
Messages: 16
Par défaut

I read a bit in the documentation and found something. I was very happy and wantet direktly try it, so I' ve made this Code:

Code:
//The main library OSLib
#include <oslib/oslib.h>
 
//The callbacks
PSP_MODULE_INFO("OSLib Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
 
OSL_IMAGE *bg;

int main()
{
	//Initialization of the library
	oslInit(0);
 
	//Initialization of the graphic mode
	oslInitGfx(OSL_PF_8888, 0);
 
	//Initialization of the text console
	oslInitConsole();
 
	bg = oslLoadImageFile("bg.png", OSL_IN_RAM, OSL_PF_5551);
	
	//Display text on the screen
	oslPrintf("%s", oslGetImagePixelAdr(bg,10,10));
 
	//Wait a keystroke
	oslWaitKey();
	
	//Leaving the program
	oslEndGfx();
	oslQuit();
	return 0;
}
I was very schocked, the only damn Thing i Get were soome unidentified Symbols.

What' s wrong with this??
floorball92 est déconnecté   Réponse avec citation
Vieux 21/04/2008, 10h23   #3
daaa57150
Membre confirmé
 
Date d'inscription: 16/05/2007
Messages: 411
Voir l'identifiant PSN
Par défaut

Have you tried this?
Code PHP:
//Get a 32 bit (OSL_PF_8888) color for the pixel at x, y, whatever its pixelformat is.
pixel oslConvertColorEx(yourImage->paletteOSL_PF_8888yourImage->pixelFormatoslGetImagePixel(yourImagexy)); 
I haven't but it's certainly what you're looking for.
If you want to know if that pixel is pink (255,0,255) just see if
pixel==RGB(255,0,255)
__________________
Essayez mon dernier jeu sur iPhone:

daaa57150 est déconnecté   Réponse avec citation
Vieux 21/04/2008, 16h19   #4
floorball92
Membre
 
Date d'inscription: 02/04/2008
Messages: 16
Par défaut

Do I have to insert something for pixelformat and palette ??
floorball92 est déconnecté   Réponse avec citation
Vieux 21/04/2008, 16h30   #5
daaa57150
Membre confirmé
 
Date d'inscription: 16/05/2007
Messages: 411
Voir l'identifiant PSN
Par défaut

Citation:
Envoyé par floorball92 Voir le message
Do I have to insert something for pixelformat and palette ??
yes, it's those of your osl_image...

Code PHP:
bool answer=false;
OSL_IMAGE *theimage=oslLoadImageFile("theimage.png"OSL_IN_RAMOSL_PF_8888);
OSL_COLOR pixel=oslConvertColorEx(theimage->paletteOSL_PF_8888theimage->pixelFormatoslGetImagePixel(theimage1010)); 
if(
pixel==RGB(255,0,255))
    
answer=true
and there you have your answer, telling you if the pixel (10, 10) is pink.
Again, I haven't tested, but that would be my first try.
__________________
Essayez mon dernier jeu sur iPhone:

daaa57150 est déconnecté   Réponse avec citation
Vieux 21/04/2008, 18h44   #6
floorball92
Membre
 
Date d'inscription: 02/04/2008
Messages: 16
Par défaut

This works perfect, thank you so much
floorball92 est déconnecté   Réponse avec citation
Vieux 22/04/2008, 08h46   #7
daaa57150
Membre confirmé
 
Date d'inscription: 16/05/2007
Messages: 411
Voir l'identifiant PSN
Par défaut

I'm glad I could help
__________________
Essayez mon dernier jeu sur iPhone:

daaa57150 est déconnecté   Réponse avec citation
Vieux 23/04/2008, 14h28   #8
floorball92
Membre
 
Date d'inscription: 02/04/2008
Messages: 16
Par défaut

OK, but now I have one question on that. How can I make this in Maps, because I can' t read from the tileset, so there must be a way for me to do the same like here but with a map.
floorball92 est déconnecté   Réponse avec citation
Vieux 01/05/2008, 20h19   #9
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

It would be nice to do map and collisionmap, theyre the same cord so i can do something like that

bool collision(xplus,yplus)
{
bool coll=false;
OSL_IMAGE *theimage=oslLoadImageFile("theimage.png", OSL_IN_RAM, OSL_PF_8888);
OSL_COLOR pixel=oslConvertColorEx(theimage->palette, OSL_PF_8888, theimage->pixelFormat, oslGetImagePixel(theimage, y+yplus, y+yplus));
if(pixel==RGB(255,0,255))
answer=true;
return answer;
}
But like my friend i have no idea how to check this on map.
fiorello est déconnecté   Réponse avec citation
Vieux 17/08/2008, 20h51   #10
Yinstyx
Newbie
 
Date d'inscription: 16/07/2008
Messages: 3
Par défaut

Hi all,

a workaround to get pixel color in a mask map : use of an OSL_IMAGE as a hidden buffer.

consider this :
Visible tileset map : mapTileSet
Mask tileset map : mapTileSetMask
Hidden OSL_IMAGE : OSL_IMAGE * tmpImg = oslCreateImage(RESOLUTION_ECRAN_X, RESOLUTION_ECRAN_Y, OSL_IN_VRAM, OSL_PF_5650)
Pixel color : int maskPixelColor

Code :
oslSetDrawBuffer(tmpImg);
mapTileSetMask->scrollX = mapTileSet->scrollX;
mapTileSetMask->scrollY = mapTileSet->scrollY;
oslDrawMap(mapTileSetMask);
maskPixelColor = oslGetImagePixel(tmpImg, X_you_want, Y_you_want);
oslSetDrawBuffer(OSL_DEFAULT_BUFFER);

maskPixelColor containt the color of the pixel in the mask Map.

Bye,

Yinstyx

Dernière modification par Yinstyx ; 17/08/2008 à 21h06.
Yinstyx est déconnecté   Réponse avec citation
Vieux 16/09/2008, 16h18   #11
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

Citation:
Envoyé par Yinstyx Voir le message
Hi all,

a workaround to get pixel color in a mask map : use of an OSL_IMAGE as a hidden buffer.

consider this :
Visible tileset map : mapTileSet
Mask tileset map : mapTileSetMask
Hidden OSL_IMAGE : OSL_IMAGE * tmpImg = oslCreateImage(RESOLUTION_ECRAN_X, RESOLUTION_ECRAN_Y, OSL_IN_VRAM, OSL_PF_5650)
Pixel color : int maskPixelColor

Code :
oslSetDrawBuffer(tmpImg);
mapTileSetMask->scrollX = mapTileSet->scrollX;
mapTileSetMask->scrollY = mapTileSet->scrollY;
oslDrawMap(mapTileSetMask);
maskPixelColor = oslGetImagePixel(tmpImg, X_you_want, Y_you_want);
oslSetDrawBuffer(OSL_DEFAULT_BUFFER);

maskPixelColor containt the color of the pixel in the mask Map.

Bye,

Yinstyx
can u give example of using this code ?? i dont really understand this.
fiorello est déconnecté   Réponse avec citation
Vieux 16/09/2008, 17h26   #12
Brunni
Super Modérateur
 
Date d'inscription: 10/11/2005
Localisation: Un pays avec beaucoup de banques
Messages: 3 225
Par défaut

Are you sure you need to do that? The drawbuffer (= the screen) is itself an image, you can get it by oslGetDrawBuffer(). So you could read the pixel that way.
But beware that because the GPU may be drawing at the moment you read the pixel (i.e. the drawing is not finished) you may not get the right color. So, before reading anything on the screen, always ensure that the drawing is finished with a former oslSyncDrawing call
Brunni est déconnecté   Réponse avec citation
Vieux 16/09/2008, 21h34   #13
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

Citation:
Envoyé par Brunni Voir le message
Are you sure you need to do that? The drawbuffer (= the screen) is itself an image, you can get it by oslGetDrawBuffer(). So you could read the pixel that way.
But beware that because the GPU may be drawing at the moment you read the pixel (i.e. the drawing is not finished) you may not get the right color. So, before reading anything on the screen, always ensure that the drawing is finished with a former oslSyncDrawing call
but my collision map isn't drawed, it is just loaded into memory and i don't want to load two color, big png file, map would be better.
fiorello est déconnecté   Réponse avec citation
Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h08.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince