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
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> |