Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Bild dynamisch skalieren

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
26.05.2004, 14:19 Uhr
dad_an_der_fh



Hallo,

ich möchte versuchen, bei einem RGBA-Bild dessen Größe dynamisch zu skalieren.
Allerdings weiß ich leider nicht genau wie ich das anstellen kann. Ich greife ja auf die Indizies des Array zu und nicht direkt auf den Grauwert für eine Mittelwertbildung.

Die Value

C++:
unsigned char* frame


beinhaltet die Bilddaten.

Die grobe Struktur eines gelesenen Bildes mit angedachter Skalierung:

C++:
...

// Größe 320x240
if( skal_variable < 1) || skal_variable > 1) ) {
   frame_width  = 320*skal_variable;
   frame_width = 240*skal_variable;
}
else {
   frame_width  = 320;
   frame_width = 240;
}

...

for ( int y=0; y<frame_height; y++ ) {
for ( int x=0; x<frame_width; x++ ) {
          
     index_red   = x*frame_deep + y*frame_width*frame_deep + RED;
     index_green = x*frame_deep + y*frame_width*frame_deep + GREEN;
     index_blue  = x*frame_deep + y*frame_width*frame_deep + BLUE;
     index_alpha = x*frame_deep + y*frame_width*frame_deep + ALPHA;
  
     color[RED]   = frame[index_red];
     color[GREEN] = frame[index_green];
     color[BLUE]  = frame[index_blue];
     color[ALPHA] = frame[index_alpha];
}
}
...



Bei Kleinere liest er ja noch Werte, sieht aber nicht besonders gut aus, bei Größer hat er ja logischer Weise keine Werte mehr.

Hätte jemand eine Idee oder kennt eine gute Seite zum Nachlesen.
Beim googlen kam unter "Bild dynamisch skalieren" nicht sehr viel informatives.

Gruß und Dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.05.2004, 14:41 Uhr
stephanw
localhorst


So ganz schnall ich nicht, was bei Dir "dynamisch" skalieren heißt. Beim Größer-Skalieren des Bildes musst Du Werte für Pixel finden, die es im Original nicht gibt, beim Kleiner-Skalieren verschwinden welche. Beides ist durch diskrete Größe "Pixel" nicht trivial. Die einfachste Lösung ist beim Größer Skalieren, mit dem Skalierungsfaktor einen gebrochenen float-Pixel im Original zu bestimmen und dann durch Auf-und-Abrunden in beiden Richtungen die 4 echten Nachbarn zu finden. Dann kannst Du R,G,B,A jeweils bilinear (= in beide Richtungen) interpolieren.

Such doch mal nach "Interpolation", wenn Dir das nichts sagt oder stöbere mal in Bildverarbeitungsskripten, vielleicht findest Du da was ?!

Edit: noch ein Tip: schreib Dir mal ne Funktion pixelToIndex (int x, int y) oder so ähnlich, die das Umrechnen der Indizees zumindest zum Entwickeln übernimmt. Das ist viel lesbarer
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 26.05.2004 um 14:44 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: