SDK: Wie Bilder modifizieren?

Programmieren in C++
Antworten
Autor
Nachricht
Yakumo500
2 Bit
Beiträge: 6
Registriert: Mo Dez 20, 2010 17:49

SDK: Wie Bilder modifizieren?

#1 Beitrag von Yakumo500 » So Jan 09, 2011 13:08

Hi,
Ich weiß zwar wie ich mit der SDK Bilddateien lade aber wie kann ich diese verändern bzw. selber erstellen und dann anzeigen?

Benutzeravatar
boeseronkel2k
Forum Team
Forum Team
Beiträge: 976
Registriert: So Okt 09, 2005 14:24
Wohnort: 127.0.0.1:/
Kontaktdaten:

Re: SDK: Wie Bilder modifizieren?

#2 Beitrag von boeseronkel2k » Mo Jan 10, 2011 16:34

Ich geh mal davon aus, dass du zum Zeichnen die SDL benutzt :)

dann kannst du mit SDL_CreateRGBSurface dir ein leeres Bild Basteln

und dadrinnen Pixel / Linien / ... Zeichnen

Code: Alles auswählen

#include "SDL.h"


void setpixel(SDL_Surface *screen, int x, int y, Uint8 r, Uint8 g, Uint8 b)
{
  Uint8 *ubuff8;
  Uint16 *ubuff16;
  Uint32 *ubuff32;
  Uint32 color;
  char c1, c2, c3;
  
  /* Lock the screen, if needed */
  if(SDL_MUSTLOCK(screen)) {
    if(SDL_LockSurface(screen) < 0) 
      return;
  }
  
  /* Get the color */
  color = SDL_MapRGB( screen->format, r, g, b );
  
  /* How we draw the pixel depends on the bitdepth */
  switch(screen->format->BytesPerPixel) 
    {
    case 1: 
      ubuff8 = (Uint8*) screen->pixels;
      ubuff8 += (y * screen->pitch) + x; 
      *ubuff8 = (Uint8) color;
      break;

    case 2:
      ubuff8 = (Uint8*) screen->pixels;
      ubuff8 += (y * screen->pitch) + (x*2);
      ubuff16 = (Uint16*) ubuff8;
      *ubuff16 = (Uint16) color; 
      break;  

    case 3:
      ubuff8 = (Uint8*) screen->pixels;
      ubuff8 += (y * screen->pitch) + (x*3);
      

      if(SDL_BYTEORDER == SDL_LIL_ENDIAN) {
	c1 = (color & 0xFF0000) >> 16;
	c2 = (color & 0x00FF00) >> 8;
	c3 = (color & 0x0000FF);
      } else {
	c3 = (color & 0xFF0000) >> 16;
	c2 = (color & 0x00FF00) >> 8;
	c1 = (color & 0x0000FF);	
      }

      ubuff8[0] = c3;
      ubuff8[1] = c2;
      ubuff8[2] = c1;
      break;
      
    case 4:
      ubuff8 = (Uint8*) screen->pixels;
      ubuff8 += (y*screen->pitch) + (x*4);
      ubuff32 = (Uint32*)ubuff8;
      *ubuff32 = color;
      break;
      
    default:
      fprintf(stderr, "Error: Unknown bitdepth!\n");
    }
  
  /* Unlock the screen if needed */
  if(SDL_MUSTLOCK(screen)) {
    SDL_UnlockSurface(screen);
  }
}
8 Bits are enough for me, this is not where I should be!

Kleines Blog

Yakumo500
2 Bit
Beiträge: 6
Registriert: Mo Dez 20, 2010 17:49

Re: SDK: Wie Bilder modifizieren?

#3 Beitrag von Yakumo500 » Mo Jan 10, 2011 18:36

Ok danke ich benutze aber nicht direkt SDL sondern nur die DGE Sachen DGE_Image usw. Gibt es eine Möglichkeit die Pixel darüber zu ändern?

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: SDK: Wie Bilder modifizieren?

#4 Beitrag von Evil Azrael » Di Jan 11, 2011 17:58

Viel zu wenig Informationen. Da wird dir wohl keiner helfen können.
Was ist denn DGE?
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Yakumo500
2 Bit
Beiträge: 6
Registriert: Mo Dez 20, 2010 17:49

Re: SDK: Wie Bilder modifizieren?

#5 Beitrag von Yakumo500 » Mi Jan 12, 2011 19:37

Ich meine die DGE, die mit der Caanoo SDK mitgeliefert wird.

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: SDK: Wie Bilder modifizieren?

#6 Beitrag von Evil Azrael » Mi Jan 12, 2011 19:57

Wow, die Doku ist ja echt erschreckend... die IDGE_Image Struktur hat wohl eine Funktion GetPixel(), das dürfte dein Einstieg sein. Guck dir die Datei include/DGE_Base.h an, da findest du das IDGE_Image Interface und die möglichen Methoden. Der Pixelzugriff dürfte dann ähnlich dem obigen SDL Beispiel sein.
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Antworten

Zurück zu „C++“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast