You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
6.0 KiB
HTML

<html><head><title>MMX Erweiterung -- Anwendungsbeispiele</title>
<script language="Javascript">
<!-- Test Browser Version
// Javascript written 1998 by Jens Hohmuth (Script-Version: 3.0)
// (c) Copyright 1998 by Jens Hohmuth@fh-zwickau.de. All rights reserved.
var browserok= 0;
var version= parseInt( navigator.appVersion );
if( version >= 3 ) browserok= 1;
if( document.images ) browserok= 1;
if( browserok )
{
var imgdata_touched = new Array();
var imgdata_released= new Array();
}
// load imagedata
function precache( name, pic1, pic2 )
{
if( browserok )
{
imgdata_touched [ name ]= new Image();
imgdata_touched [ name ].src= pic2;
imgdata_released[ name ]= new Image();
imgdata_released[ name ].src= pic1;
}
}
// "Release", called if mouse left button
function release( name )
{
if( browserok )
{
document.images[ name ].src= imgdata_released[ name ].src;
}
}
// "Touch", called if mouse over link-button
function touch( name )
{
if( browserok )
{
document.images[ name ].src= imgdata_touched[ name ].src;
}
}
// load (precache) Buttons
if( browserok )
{
precache( "left", "../images/arrowl.gif", "../images/arrowlp.gif" );
precache( "right", "../images/arrowr.gif", "../images/arrowrp.gif" );
precache( "index", "../images/index.gif", "../images/indexp.gif" );
}
//-->
</script></head><body background="mmx_13-Dateien/stone.jpg" bgcolor="#c0c0c0">
<h2><font color="#000080">Bitmap-Filterung</font></h2>
<p>Viele Bildverarbeitungsprogramme bieten Optionen an, die es erlauben, Bilder zu
glätten, in Reliefdarstellung umzuwandeln oder Konturen im Bild hervorzuheben.
Alle diese Effekte können durch die sogenannte Bitmap-Filterung erreicht werden,
bei der die Farbe aller Bildpunkte neu berechnet wird. Zu dieser Berechnung wird jedoch
nicht nur der einzelne Bildpunkt herangezogen, sondern es werden auch die Nachbarpixel
des Bildpunktes verwendet. Dabei werden die Anteile der einzelnen Nachbarpixel am neuen
(Ergebnis-)Bildpunkt in einer Filtermatrix festgehalten.</p>
<p>Die in der Praxis verwendeten Filter-Matritzen sind meist 3x3 oder 7x7 Elemente groß.
Abbildung 3 zeigt die hier verwendete 3x3 Filter-Matrix zum Erreichen eines
Relief-Effektes. Das rot markierte Element stellt die Wichtung des zu bearbeitenden
Pixels dar.</p>
<center>
<p>
<img src="mmx_13-Dateien/mmx_3.gif" alt="Filter-Matrix" border="3">
<br>
<i><b>Abb. 3:</b> Filter-Matrix für Relief</i>
</p>
</center>
<p>Der Farbwert des neuen Pixels ergibt sich demnach aus der Summe der Produkte, die
sich aus Filter-Matrix und den orginalen Farbwerten der umgebenen Nachbarpixeln ergibt.
Das Ergebnis muß dabei natürlich einer vorzeichenlosen Saturation unterzogen werden.
Zusätzlich kann durch eine Addition mit einem konstanten Wert die entstehende Bitmap
aufgehellt werden. Abbildung 4 stellt den gesamten Vorgang an einem konkreten Beispiel dar.</p>
<center>
<p>
<img src="mmx_13-Dateien/mmx_4.gif" alt="Beispiel" border="3">
<br>
<i><b>Abb. 4:</b> Beispiel für eine Filterung</i>
</p>
</center>
<p>Das Beispielprogramm <a href="http://www.fh-zwickau.de/doc/prmo/mmxtutor/code/filter.c">filter.c</a> führt diese Filterung
mit einer Bitmap durch. Dabei wird eine in C geschriebene Funktion zur Filterung mit der in
der Datei <a href="http://www.fh-zwickau.de/doc/prmo/mmxtutor/code/mmx3.asm">mmx.asm</a> definierten MMX-Funktion bezüglich der
benötigten Laufzeit verglichen. Bei der Durchführung der Filterung sollte
beachtet werden, daß an den Rändern weitere Bildpunkte benötigt werden. Die
Beispielprogramme verwenden deshalb eine Bitmap, die an allen Seiten einen Rand von einem
Pixel besitzen (im Beispiel, z.B. Bitmapauflösung 642x482 Pixel und Darstellung auf
dem Bildschirm mit einer Auflösung von 640x480 Pixel). Das muß natürlich bei
der Bearbeitung der Bildaten beachtet werden.</p>
<p>Weiterhin sollte beachtet werden, daß das Beispielprogramm mit True-Color Daten
arbeitet und die einzelnen Farbkomponenten (Rot, Grün und Blau) getrennt gefiltert
werden. Das Ergebnis wird dann auf dem Bildschirm dargestellt.</p>
<p>Da in der MMX-Routine zur Filterung (<i>filtermmx</i>) der MMX-Befehl PMADDWD verwendet
werden soll, um die Multiplikationen und Additionenen möglichst effektiv
durchzuführen, müssen die Quell-Bytedaten in Wörter konvertiert werden. Bei den
Daten der Filter-Matrix, die auch als Byte vorliegen, muß das Vorzeichen bei der
Konvertierung beachtet werden !</p>
<p>Auf dem verwendeten Testrechner (Pentium-166 MHz) ergab sich für die verwendete
MMX-Routine etwa die 1.5 fache Geschwindigkeit der vergleichbaren C-Version.</p>
<pre> C Version, Taktzyklen= 250793843
MMX Version, Taktzyklen= 106887565
</pre>
<!-- wie gehts weiter ------------------------------------------------------>
<p></p><hr size="2"><p></p>
<a href="http://www.fh-zwickau.de/doc/prmo/mmxtutor/text/mmx_12.htm" onmouseover="touch( 'left' );" onmouseout="release( 'left' );">
<img src="mmx_13-Dateien/arrowl.gif" name="left" alt="zurueck" align="left" border="0"></a>
<a href="http://www.fh-zwickau.de/doc/prmo/mmxtutor/text/mmx_ref.htm" onmouseover="touch( 'right' );" onmouseout="release( 'right' );">
<img src="mmx_13-Dateien/arrowr.gif" name="right" alt="weiter" align="right" border="0"></a>
<center>
<a href="http://www.fh-zwickau.de/doc/prmo/mmxtutor/text/index.htm#Anwendung" onmouseover="touch( 'index' );" onmouseout="release( 'index' );">
<img src="mmx_13-Dateien/index.gif" name="index" alt="Zum Index" border="0"></a>
</center>
<br>
<!-- Adresse --------------------------------------------------------------->
<hr size="2">
<address>
Probleme oder Vorschläge zu dieser Webseite, bitte per email an:
<a href="mailto:hohmuth@t-online.de">
<b>hohmuth@t-online.de</b>
</a>
<br>
Letzte Änderungen am: 02.01.1999, Jens Hohmuth.
</address>
</body></html>