Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Matrix füllen...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.12.2003, 16:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Man heute ist echt nicht mein Tag.

Ich habe eine 64x64 große Matrix, habe aber nur 44x44 werte und möchte sie folgendermaßen füllen: (x ist Wert, 0 ist nix)


Code:
xxxx00
xxxx00
xxxx00
xxxx00
000000
000000



Die Schwierigkeit kommt nun noch, jeder dieser Werte besteht aus 4Bytes, mein Versuch das zu füllen ging irgendwie schief:


C++:
for(UINT y = 1; y < 65; y++)
{
  for(UINT x = 0; x < 64; x++)
  {
    if(x < 44)
    {
      UBYTE val = 0;
      fread(&val,1,1,f); // hier les ich den Wert
      RGBA rgba = Val2RGBA(val); // hier wird er dank beefies hilfe umgewandelt
      imageData[4*x*y+0] = rgba.r;
      imageData[4*x*y+1] = rgba.g;
      imageData[4*x*y+2] = rgba.b;
      imageData[4*x*y+3] = rgba.a;
    }
    else
    {
      imageData[4*x*y+0] = 255; // das rot hier ist nur ein test
      imageData[4*x*y+1] = 0;
      imageData[4*x*y+2] = 0;
      imageData[4*x*y+3] = 255;
    }
  }
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.12.2003, 17:31 Uhr
0xdeadbeef
Gott
(Operator)


Wie ist imageData deklariert?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.12.2003, 17:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
UBYTE *imageData = new UBYTE[64*64*4];



und UBYTE ist unsigned char
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.12.2003, 17:41 Uhr
0xdeadbeef
Gott
(Operator)


OK, wenn ich das richtig sehe, müsstest du es so machen:

C++:
      imageData[64*y+x+0] = rgba.r;
      imageData[64*y+x+1] = rgba.g;
      imageData[64*y+x+2] = rgba.b;
      imageData[64*y+x+3] = rgba.a;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.12.2003, 17:45 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


was mir grad auffällt, ich hab wiedermal nicht richtig gelesen:


Zitat:

Land images are fixed size at 44x44.
They also have fixed transparent locations, and the format is optimized for this.
To read the first 22 lines, you first initialize X to 22, Y to 0, and LineWidth to 2
Then repeat the following 22 times:
Decrease X by 1
Read and Draw (LineWidth) number of pixels
Increase Y by 1
Increase LineWidth by 2

For the last 22 lines, do the following:
Read and Draw (LineWidth) number of pixels
Increase X by 1
Increase Y by 1
Decrease LineWidth by 2
The resulting image is the diamond shaped tile



ich muss dann das trotzdem auf 64x64*4 rgba images haben *hmm*
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.12.2003, 17:52 Uhr
0xdeadbeef
Gott
(Operator)


Dann hast du ein Problem. Du speicherst die Dinger in einem Speicherblock zeilenweise hintereinander ab. Nun geht die eine Routine davon aus, dass die Zeilen 44 breit sind, die andere davon, dass sie 64 breit sind - das läuft dann so einfach nicht mehr.

Schreib dir am besten ne Konversionsroutine dafür.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.12.2003, 18:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenn ich das richtig gelesen habe müsste das einlesen auf ein 44x44 image dann so gehen: (jedenfalls die ersten 22 zeilen)


C++:
  UINT LineWidth = 2, x = 22, y = 0;
  
  while(y < 22)
  {
    x--;
    for(UINT z = 0; z < LineWidth; z++)
    {
      UBYTE val = 0;
      fread(&val,1,1,f);
      image[22*y + x + z] = val;
    }
    LineWidth+=2;
    y++;
  }


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: