• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-09-2005, 20:13   #61 (permalink)
Neuer User
 
Benutzerbild von Quasimondo
 
Registriert seit: Nov 2003
Ort: München
Beiträge: 114
Das war mir dann auch irgendwann aufgefallen. Und die Grafiken könnte man dann ja auch gleich in Java machen ;-)

Im Augeblick baue ich gerade einen JPEG Encoder ins Applet ein.
__________________
[Quasimondo | incubator | talks
Quasimondo ist offline   Mit Zitat antworten
Alt 29-09-2005, 22:02   #62 (permalink)
~
 
Benutzerbild von Alienhunter
 
Registriert seit: Sep 2001
Ort: zufikon
Beiträge: 153
Compression klasse von meychi ..einfach aber gut
Habe ich schon ein paar mal gebraucht.



ActionScript:
  1. /**
  2. * LZW Class v1.1
  3. * Author  : Mika Palmu
  4. * Licence : Use freely, giving credit when you can.
  5. * Website : [url="http://www.meychi.com/"]http://www.meychi.com/[/url]
  6. *
  7. * Original Flash port by:
  8. * Ash & Lalek & Shoebox and others.
  9. * See: [url="http://www.razorberry.com/blog/archives/2004/08/22/lzw-compression-methods-in-as2/"]http://www.razorberry.com/blog/archives/2004/08/22/lzw-compression-methods-in-as2/[/url]
  10. * See: [url="http://www.lalex.com/blog/comments/200405/164-compression-lzw-actionscript-2.html"]http://www.lalex.com/blog/comments/200405/164-compression-lzw-actionscript-2.html[/url]
  11. */
  12.  
  13. class LZW {
  14.  
  15.     /*
  16.     * Compresses the specified text.
  17.     */
  18.     public static function compress(str:String):String {
  19.         var chars:Number = 256;
  20.         var original:String = str;
  21.         var dict:Array = new Array();
  22.         for(var i:Number = 0; i<chars; i++) dict[String(i)] = i;
  23.         var result:String = new String("");
  24.         var splitted:Array = original.split("");
  25.         var buffer:Array = new Array();
  26.         for(var i:Number = 0; i<=splitted.length; i++){
  27.             var current:String = splitted[i];
  28.             if(buffer.length == 0) var xstr:String = String(current.charCodeAt(0));
  29.             else var xstr:String = buffer.join("-")+"-"+String(current.charCodeAt(0));
  30.             if(dict[xstr] !== undefined){
  31.                 buffer.push(current.charCodeAt(0));
  32.             } else {
  33.                 result += String.fromCharCode(dict[buffer.join("-")]);
  34.                 dict[xstr] = chars;
  35.                 chars++;
  36.                 delete buffer;
  37.                 buffer = new Array();
  38.                 buffer.push(current.charCodeAt(0));
  39.             }
  40.         }
  41.         return result;
  42.     }
  43.  
  44.     /*
  45.     * Decompresses the specified text.
  46.     */
  47.     public static function decompress(str:String):String {
  48.         var chars:Number = 256;
  49.         var dict:Array = new Array();
  50.         for(var i:Number = 0; i<chars; i++){
  51.             var c:String = String.fromCharCode(i);
  52.             dict[i] = c;
  53.         }
  54.         var original:String = str;
  55.         var splitted:Array = original.split("");
  56.         var buffer:String = new String("");
  57.         var chain:String = new String("");
  58.         var result:String = new String("");
  59.         for(var i:Number = 0; i<splitted.length; i++){
  60.             var code:Number = original.charCodeAt(i);
  61.             var current:String = dict[code];
  62.             if(buffer == ""){
  63.                 buffer = current;
  64.                 result += current;
  65.             } else {
  66.                 if(code<=255){
  67.                     result += current;
  68.                     chain = buffer+current;
  69.                     dict[chars] = chain;
  70.                     chars++;
  71.                     buffer = current;
  72.                 } else {
  73.                     chain = dict[code];
  74.                     if (chain == undefined) chain = buffer+buffer.slice(0,1);
  75.                     result += chain;
  76.                     dict[chars] = buffer+chain.slice(0,1);
  77.                     chars++;
  78.                     buffer = chain;
  79.                 }
  80.             }
  81.         }
  82.         return result;
  83.     }
  84.  
  85. }

auf dem Server
PHP-Code:
function compress($str$extended)
 {
       
$skipnum $extended 0;
       for (
$i 0$i 256$i++)
       {
          
$dico[chr($i)] = $i;
       }
       if (
$extended)
       {
          
$dico["“"] = 256;
          
$dico["”"] = 257;
       }
       
$res "";
       
$txt2encode $str;
       
$splitStr preg_split('//'$txt2encode);
       
$len count($splitStr);
       
$nbChar 256 $skipnum;
       
$buffer "";
       for (
$i 0$i <= $len$i++)
       {
          
$current $splitStr[$i];
          if (isset(
$dico[$buffer $current]))
          {
             
$buffer .= $current;
          }
          else
          {
             echo 
$dico[$buffer];
             
$res .= chr($dico[$buffer]);
             
$dico[$buffer $current] = $nbChar;
             
$nbChar++;
             
$buffer $current;
          }
       }
 
       return 
$res;
 }
 
 function 
decompress($str$extended)
 {
       
$skipnum $extended 0;
       for (
$i 0$i 256$i++)
       {
          
$c chr($i);
          
$dico[$i] = $c;
       }
       if (
$extended)
       {
          
$dico[256] = "“";
          
$dico[257] = "”";
       }
       
$txt2encode $str;
       
$splitStr preg_split('//'$txt2encode);
       
$length count($splitStr);
       
$nbChar 256 $skipnum;
       
$buffer "";
       
$chaine "";
       
$result "";
       for (
$i 0$i $length$i++)
       {
          
$code ord(substr($txt2encode$i1));
          
$current $dico[$code];
          if (
$buffer == "")
          {
             
$buffer $current;
             
$result .= $current;
          }
          else
          {
             if (
$code <= 255 $skipnum)
             {
                
$result .= $current;
                
$chaine $buffer $current;
                
$dico[$nbChar] = $chaine;
                
$nbChar++;
                
$buffer $current;
             }
             else
             {
                
$chaine $dico[$code];
             if (
$chaine == ""$chaine $buffer substr($buffer01);
                
$result .= $chaine;
                
$dico[$nbChar] = $buffer substr($chaine01);
                
$nbChar++;
                
$buffer $chaine;
                
             }
          }
       }
       
       return 
$result;
 } 
Gruss @all
alien..
Alienhunter ist offline   Mit Zitat antworten
Alt 29-09-2005, 22:10   #63 (permalink)
~
 
Benutzerbild von Alienhunter
 
Registriert seit: Sep 2001
Ort: zufikon
Beiträge: 153
Mein Low Level Kompression Lösung:


ActionScript:
  1. import flash.display.BitmapData;
  2.  
  3. var linkageId:String = "ImagePNG";
  4. var bitmap_1:BitmapData = BitmapData.loadBitmap(linkageId);
  5. trace(bitmap_1 instanceof BitmapData); // true
  6.  
  7. var Acount:Number = 0
  8.     var Bcount:Number = 0
  9.     var alpha:String;
  10.     var red:String;
  11.     var green:String;
  12.     var blue:String
  13.     var colorCounter:Number = 0;
  14.     var pixelColor:String = "";
  15.     var imageInfo:String = "";
  16.  
  17.  
  18. imageInfo = "w"+nx.toString()+"h"+ny.toString()+ "p";
  19.     for(Acount = 0 ; Acount < ny; Acount++){
  20.         for(Bcount = 0;Bcount <nx;Bcount++){
  21.             alpha = (bitmap_1.getPixel32(Bcount, Acount) >> 24 & 0xFF).toString(16);
  22.        
  23.             red = (bitmap_1.getPixel32(Bcount, Acount) >> 16 & 0xFF).toString(16);
  24.            
  25.             green = (bitmap_1.getPixel32(Bcount, Acount) >> 8 & 0xFF).toString(16);
  26.            
  27.             blue = (bitmap_1.getPixel32(Bcount, Acount) & 0xFF).toString(16);
  28.            
  29.             if ((Acount+Bcount) == 0){
  30.                 pixelColor = alpha + red + green + blue;
  31.                 colorCounter = 0;
  32.             }else{
  33.                 if(pixelColor  == alpha + red + green + blue){
  34.                     colorCounter += 1;
  35.                 }else{
  36.                     imageInfo += colorCounter+"x"+pixelColor;
  37.                     pixelColor = alpha + red + green + blue
  38.                     colorCounter = 0;
  39.                 }
  40.             }
  41.         }
  42.     }
  43.     imageInfo += colorCounter+"x"+pixelColor;
  44.  
  45. trace(imageInfo);

Ist nicht gross getested, hat sicher auch noch kleine Fehler.
Ich verwende hier nur einen string denn ich dann auf dem server auswerte.

Ist bei einem 160x120 Bild relativ schnell. Für was kleines wird es sicher reichen.

Gruss @all
alien.....

Geändert von Alienhunter (29-09-2005 um 22:15 Uhr)
Alienhunter ist offline   Mit Zitat antworten
Alt 29-09-2005, 22:26   #64 (permalink)
Neuer User
 
Benutzerbild von Quasimondo
 
Registriert seit: Nov 2003
Ort: München
Beiträge: 114
Zitat:
Zitat von Alienhunter
Mein Low Level Kompression Lösung:


ActionScript:
  1. alpha = (bitmap_1.getPixel32(Bcount, Acount) >> 24 & 0xFF).toString(16);
  2.        
  3.             red = (bitmap_1.getPixel32(Bcount, Acount) >> 16 & 0xFF).toString(16);
  4.            
  5.             green = (bitmap_1.getPixel32(Bcount, Acount) >> 8 & 0xFF).toString(16);
  6.            
  7.             blue = (bitmap_1.getPixel32(Bcount, Acount) & 0xFF).toString(16);
  8.            
  9.             if ((Acount+Bcount) == 0){
  10.                 pixelColor = alpha + red + green + blue;
  11.                 colorCounter = 0;
  12.             }else{
  13.                 if(pixelColor  == alpha + red + green + blue){
  14.                     colorCounter += 1;
  15.                 }else{
  16.                     imageInfo += colorCounter+"x"+pixelColor;
  17.                     pixelColor = alpha + red + green + blue
  18.                     colorCounter = 0;
  19.                 }
Äähmm gibt's einen besonderen Grund, daß Du den Pixel erst in seine Einzelkomponenten zerlegst und sie dann wieder zusammensetzt? Wäre es nicht einfacher und schneller:

bitmap_1.getPixel32(Bcount, Acount).toString(16);

zu sagen?

Es gibt auch ein Problem und zwar liefert toString(16) keine führende 0 zurück, bei Werten kleiner als 16 bekommst Du dann 0 1 2 3 4...d e f. Wenn Du dann dann so zusammenzählst:

pixelColor = alpha + red + green + blue

kann es zu doppeldeutigen ergebnissen führen:

Denn 12 + a + 66 + d ist dann z.B. derselbe string wie 1 + 2a + 6 + 6d
__________________
[Quasimondo | incubator | talks

Geändert von Quasimondo (29-09-2005 um 22:28 Uhr)
Quasimondo ist offline   Mit Zitat antworten
Alt 29-09-2005, 23:04   #65 (permalink)
~
 
Benutzerbild von Alienhunter
 
Registriert seit: Sep 2001
Ort: zufikon
Beiträge: 153
Zitat:
Äähmm gibt's einen besonderen Grund, daß Du den Pixel erst in seine Einzelkomponenten zerlegst und sie dann wieder zusammensetzt? Wäre es nicht einfacher und schneller:

bitmap_1.getPixel32(Bcount, Acount).toString(16);

zu sagen?

Es gibt auch ein Problem und zwar liefert toString(16) keine führende 0 zurück, bei Werten kleiner als 16 bekommst Du dann 0 1 2 3 4...d e f. Wenn Du dann dann so zusammenzählst:

pixelColor = alpha + red + green + blue

kann es zu doppeldeutigen ergebnissen führen:

Denn 12 + a + 66 + d ist dann z.B. derselbe string wie 1 + 2a + 6 + 6d
Yups stimmt...super danke für die Info. Ich muss so oder so nochwas daran rumschrauben.

Gruss und danke

alien...
Alienhunter ist offline   Mit Zitat antworten
Alt 30-09-2005, 00:40   #66 (permalink)
- Der ActionScripter -
 
Registriert seit: Jun 2001
Ort: germany
Beiträge: 108
Zitat:
Zitat von Quasimondo
Es gibt auch ein Problem und zwar liefert toString(16) keine führende 0 zurück, bei Werten kleiner als 16 bekommst Du dann 0 1 2 3 4...d e f.
also was du da wohl gemeint hast, könnte so aussehen:

ActionScript:
  1. var bmpData = new flash.display.BitmapData(160,120); bmpData.draw(img);
  2.   var w:          Number = img._width;
  3.   var h:          Number = img._height;
  4.   var lastColor:  Number  = -1;
  5.   var count:      Number  = 0;
  6.   var x:          Number  = 0;
  7.   var y:          Number  = 0;
  8.   var a:          Array    = [];
  9.   // compressed hex
  10.   while( y<h ) {
  11.     var t = bmpData.getPixel32(x,y) & 0x00ffffff;
  12.     if( ++x>=w ) { x=0; y++ }
  13.     if( ++count<0xff && y<h && t==lastColor ) continue;
  14.     if( y>=h ) lastColor = t;
  15.     if( lastColor>=0 ) {
  16.       var tmp  = ( ( count << 24 ) | lastColor ).toString(16);
  17.       if( tmp.length<8 ) tmp = "0"+tmp;
  18.       a.push(tmp);
  19.     }
  20.     lastColor = t; count = 0;
  21.   }

letzendlich werden die daten per s = a.join(""); als string zusammengefasst und auf den server geschoben. der unterschied zu deiner prozedur ist, dass ich hier mit 8-stelligen hex arbeite. die ersten zwei geben die anzahl der aufeinanderfolgenden gleichen werte an (max 255=0xff) und dann folgt der farbwert. dadurch brauch ich kein trennzeichen, wenn ich immer mit festem format sende. das ganze macht bei einem webcam-bild aber überhaupt keinen sinn, weil nur sehr wenige aufeinanderfolgende gleiche farben auftauchen (durch das rauschen). für "gemalte" bilder mit grösseren gleichfarbigen flächen ist es natürlich schonmal ein enormer gewinn ... aber noch nicht alles

download
testen

wenn man links auf das bild klickt, kann man ein paar flächen mit gleicher farbe erzeugen


grüsse
__________________

Tobias Fendel
lieber heimlich schlau, als unheimlich laut

[TrashCan] [Die ActionScripter] [IRC-FlashChat]
YellowSky ist offline   Mit Zitat antworten
Alt 30-09-2005, 01:07   #67 (permalink)
LiquidFrames
 
Registriert seit: Jun 2003
Beiträge: 412
ich versuche den huffman code für bilder zu optimieren

ich schaffe ein 120x80px bild in 6sec, und kompression von ca 60-80%

das finde ich gut (bisauf zeit)...aber dadurch das flash kein bytecode an flash schicken kann (ein großes danke an den utf8 zwang... ) kann man höchstens 6bit an informationen pro gesendetem byte schicken.

damit sinkt das ganze schonmal auf gut 40-60% kompression ...geht eigendlich noch 8)

_ich_ würde dan noch die farben auf 12 bit beschrenken und lande bei 70-80% kompression...das verlockt doch schon fast zu konferenz schaltungen ohne com server ^^ (*6sec zum berechnen ignoriert*)

ok, ich laber zu viel....aba daoben wollen gedanken raus...ich werde das huffman experiment morgen mal etwas verfeinern und dan hier reinsetzen in der hoffnung das ihr mit optimiert^^
Hugo1of2 ist offline   Mit Zitat antworten
Alt 30-09-2005, 11:03   #68 (permalink)
~
 
Benutzerbild von Alienhunter
 
Registriert seit: Sep 2001
Ort: zufikon
Beiträge: 153
@YellowSky

Super, das sieht klasse aus !

Da hast du vollkommen recht mit dem Webcam rauschen.
Aber für eine Low Level kompremierung Übung ist es schon einmal ein guter Ansatz. Hoffe ich ..


@Hugo1of2

Zitat:
ich laber zu viel
Stimmt doch nicht ...finde ich.
Bin gespannt auf dein Beispiel. Deine Werte sind schon jetzt sehr gut.


@all
Das ganze wird immer spannender.


Gruss @all und danke für die Hilfe
alien...
Alienhunter ist offline   Mit Zitat antworten
Alt 30-09-2005, 11:51   #69 (permalink)
dude
 
Benutzerbild von Seedianer
 
Registriert seit: Apr 2005
Beiträge: 560
@Alienhunter benutz mal

ActionScript:
  1. while (-- i > -1){
  2. }

statt for(). Ist soviel ich weiß ein ganzen zacken schneller.

mfg
__________________
grüße aus dem sonnigen Weil am Rhein

Seedianer

Geändert von Seedianer (30-09-2005 um 11:58 Uhr)
Seedianer ist offline   Mit Zitat antworten
Alt 30-09-2005, 12:19   #70 (permalink)
Neuer User
 
Benutzerbild von Quasimondo
 
Registriert seit: Nov 2003
Ort: München
Beiträge: 114
Da gab es doch neulich so nen großen Benchmark, ich glaube die schnellste Schleife war eine do/while Geschichte.

Ansonsten stimmen mich Eure Ergebnisse hoffnungsfroh, daß man das tatsächlich ohne externe Hilfe machen kann.
__________________
[Quasimondo | incubator | talks
Quasimondo ist offline   Mit Zitat antworten
Alt 04-10-2005, 19:34   #71 (permalink)
Neuer User
 
Benutzerbild von Quasimondo
 
Registriert seit: Nov 2003
Ort: München
Beiträge: 114
So, ich hab das mit dem externen Komprimieren mal wieder sein lassen und mich jetzt auch mal an die Komprimierung innerhalb von Flash gewagt. Und ich würde sagen, das geht ziemlich gut.

Nochmal zur Erinnerung der Link: http://www.quasimondo.com/biggerthanlife.php (Webcam empfohlen)

Ich hatte mich übrigens in ursprünglichen Version bei der Größe verrechnet - eine Bitmap von 300 x 435 Pixeln ist nicht 127K groß, sondern 300 x 435 x 4 Bytes = 522000 = 509K - deshalb hat das auch beim Upload so lange gedauert. Übrigens als String verschickt wären das 1019K weil man ja zwei Chars braucht um auf diese Weise ein Byte übertragen zu können. Deshalb halte ich Remoting in diesem Fall für die erste Wahl.

Die Komprimierung funktioniert folgendermaßen:

- In einem Array wird eine Palette erstellt, die alle unterschiedlichen Farbwerte des zu sendenden Blocks enthält

- In einem zweiten Array werden die Index-Offsets jeder Farbe zu nächstfolgenden gespeichert. Dadurch daß ich nicht die Indexe selber sondern die Offsets speichere, kann ich später nicht nur Folgen gleicher Werte komprimieren, sondern auch Folgen ungleicher Werte, da z.B. 1,2,3,4,5,4,3,2,1 als Offsets geschrieben so aussieht: 0,1,1,1,1,-1,-1,-1,-1.
Die maximal erlaubten Offsets liegen zwischen -0x7fff und 0x7fff. Dadurch bekomme ich schon mal zwei Offsets in eine Number (32 bit). Damit das in eine 16 Bit Zahl paßt, wird zu den negativen Offsets 0x10000 addiert und die liegen somit zwischen 0x8001 und 0xFFFF. (Das muß jetzt keiner verstehen)

- Dieses Offset Array komprimiere ich in einem zweiten Schritt mit der klassischen Run-Length Methode, allerdings mit einem - wie ich finde - ziemlich netten Kniff: ich verwende nämlich den unbenutzen Offset 0x8000 als Marker, daß es sich beim folgenden Wert um eine Wiederholfarbe handelt. Auf die Weise halte ich den Overhead sehr klein: Werte, die nur einmal vorkommen haben gar keinen Marker und der Marker für Wiederwerte enthält gleichzeitig die Anzahl der Wiederholungen.

Mal ein Beispiel mit Buchstaben:

ABCAADDDDDDDAE

Ergibt in der Palette:

0 A
1 B
2 C
3 D
4 E

Die Offset Tabelle sieht dann so aus:

0,1,1,-2,0,3,0,0,0,0,0,0,-3,4

bzw:

0x00000001,0x0001fffe,0x00000003,0x00000000,0x0000 0000,0x00000000,0xfffd0004

komprimiert kommt dann sowas raus:

0x00000001,0x0001fffe,0x00000003,0x80000003,0x0000 0000,0xfffd0004

Das sieht jetzt natürlich relativ unspannend aus. Lustig wird es eher bei sowas:

ABCDEFGHIJKL -> 011111111111 -> 0x00000001,0x800000A,0x00010001

AAAAAAAAAA -> 0000000000 -> 0x8000000A,0x00010001
AAAAAAAAAAAA -> 000000000000 -> 0x8000000C,0x00010001

Aber:
AAAAAAAAAAA -> 00000000000 -> 0x8000000B,0x00010001,0x00010000

Damit das Komprimieren den Computer nicht einschläfert, bzw. PHP mir keinen Zeitüberschreitungsfehler liefert, laß ich das in Portionen erledigen und schicke das Bild blockweise an den Server. Die meiste Zeit braucht anscheinend sowieso GD um die Bilder wieder zusammenzusetzen. Das nette bei Flash Remoting ist aber, daß ich bereits während Flash noch die Daten an den Server schickt und der bastelt schon den nächsten Block komprimieren kann. Multitasking quasi.

Hier ist ein Demo, das besser zeigt wie effektiv (oder auch nicht) die Komprimierung ist: http://www.quasimondo.com/archives/000572.php

Und den Sourcecode gibt's dann auch in Bälde.
__________________
[Quasimondo | incubator | talks

Geändert von Quasimondo (04-10-2005 um 23:09 Uhr)
Quasimondo ist offline   Mit Zitat antworten
Alt 05-10-2005, 00:50   #72 (permalink)
- Der ActionScripter -
 
Registriert seit: Jun 2001
Ort: germany
Beiträge: 108
hi,

bin ja stolz auf mich, dass ich trotz später stunde meine, das ganze verstanden zu haben. eine sache ist mir nur unklar:

Zitat:
Zitat von Quasimondo
Übrigens als String verschickt wären das 1019K weil man ja zwei Chars braucht um auf diese Weise ein Byte übertragen zu können.
wieso 2 chars??

schade ist, dass man deine methode mit dem verteilten senden nicht so recht vergleichen kann mit anderen (meinen) ansätzen. könntest du vielleicht "auf die schnelle" eine kleine demo basteln, die ein standard-webcambild 160x120 im ganzen auf den server schiebt und nen kleinen timer einbauen? würde mich brennend interessieren, ob dein verfahren wirklich so viel bringt, wie es theoretisch aussieht.

ansonsten finde ich die idee, mit den farbdifferenzen, statt direkter farbwerte zu arbeiten ja grandios. muss man erstmal drauf kommen )


grüsse
__________________

Tobias Fendel
lieber heimlich schlau, als unheimlich laut

[TrashCan] [Die ActionScripter] [IRC-FlashChat]
YellowSky ist offline   Mit Zitat antworten
Alt 05-10-2005, 01:08   #73 (permalink)
Neuer User
 
Benutzerbild von Quasimondo
 
Registriert seit: Nov 2003
Ort: München
Beiträge: 114
Zitat:
Zitat von YellowSky
hi,

wieso 2 chars??


grüsse

Nehmen wir mal ein Pixel 0x11223344, das verbraucht als Nummer 32 Bit, also 4 Byte. Wenn ich das mit Remoting schicke, geht das meines Wissens nach auch als 4 Byte über die Leitung. Wandele ich es in den String "11223344" um, habe ich 8 Zeichen, also 8 Byte -> doppelte Größe.

Das Problem ist, daß ich zwar rein theoretisch das hier machen könnte und dann auch nur 4 Byte bräuchte:

ActionScript:
  1. String.fromCharCode(0x11) + String.fromCharCode(0x22) + String.fromCharCode(0x33) + String.fromCharCode(0x44)

Leider geht das aber nicht denn sobald ich das hier mache:

ActionScript:
  1. String.fromCharCode(0x11) + String.fromCharCode(0x00) + String.fromCharCode(0x33) + String.fromCharCode(0x44)

bekomme ich wie schon mal geschireben in Flash einen kaputten String. Und so ganz ohne die 0 kann man nur schlecht Bilder machen. Obwohl - das müßte man sich direkt mal überlegen. Vielleicht fällt das gar nicht auf, einfach alle 0x00 durch 0x01 zu ersetzen...
__________________
[Quasimondo | incubator | talks

Geändert von Quasimondo (05-10-2005 um 01:10 Uhr)
Quasimondo ist offline   Mit Zitat antworten
Alt 05-10-2005, 01:18   #74 (permalink)
- Der ActionScripter -
 
Registriert seit: Jun 2001
Ort: germany
Beiträge: 108
Zitat:
Zitat von Quasimondo
Nehmen wir mal ein Pixel 0x11223344
achsoooo ... du arbeitest mit getPixel32(). das ist doch aber gar nicht nötig bei jpg-ausgabe. vielleicht bei png interessant, aber png zu exportieren halte ich für eine wenig sinnvolle einrichtung aus flash heraus. von daher kann man den alpha-wert ignorieren und macht das ganze erheblich schlanker.

Zitat:
Zitat von Quasimondo
Und so ganz ohne die 0 kann man nur schlecht Bilder machen. Obwohl - das müßte man sich direkt mal überlegen. Vielleicht fällt das gar nicht auf, einfach alle 0x00 durch 0x01 zu ersetzen...
das wäre auf jeden fall ne überlegung wert. ich versuche mich gerade daran, die bildwerte zu runden, um das rauschen der kamera etwas zu unterdrücken (bin hauptsächlich noch auf dem webcam-trip ... alles andere bringt meiner meinung nach wenig sinn). und wenn ich dann 01 als wert schicke und im php weiss, dass 0x01=0x00 ist, dann hab ich das problem schon abgefangen. nicht schön, aber gangbar.


grüsse
__________________

Tobias Fendel
lieber heimlich schlau, als unheimlich laut

[TrashCan] [Die ActionScripter] [IRC-FlashChat]
YellowSky ist offline   Mit Zitat antworten
Alt 05-10-2005, 01:42   #75 (permalink)
Neuer User
 
Benutzerbild von Quasimondo
 
Registriert seit: Nov 2003
Ort: München
Beiträge: 114
Zitat:
Zitat von YellowSky
hi,

schade ist, dass man deine methode mit dem verteilten senden nicht so recht vergleichen kann mit anderen (meinen) ansätzen. könntest du vielleicht "auf die schnelle" eine kleine demo basteln, die ein standard-webcambild 160x120 im ganzen auf den server schiebt und nen kleinen timer einbauen? würde mich brennend interessieren, ob dein verfahren wirklich so viel bringt, wie es theoretisch aussieht.
Da hast Du recht. Hier ist mal ein Minidemo zum 160x120 Schnappschüsse machen: http://www.quasimondo.com/schnappschuss1.php

Verdammt ich bin natürlich wieder voll auf die Breite 200 reingefallen. Das blöde Ding wollte mir die Kamera einfach nicht anzeigen, bis ich kapiert habe, daß das ja daran liegt, daß bei zu kleiner Bühnenbreite die Sicherheitswarnung nicht angezeigt werden kann und dann die Kamera einfach aus bleibt.


Zitat:
Zitat von YellowSky
achsoooo ... du arbeitest mit getPixel32(). das ist doch aber gar nicht nötig bei jpg-ausgabe. vielleicht bei png interessant, aber png zu exportieren halte ich für eine wenig sinnvolle einrichtung aus flash heraus. von daher kann man den alpha-wert ignorieren und macht das ganze erheblich schlanker.
Ich mache beides, aber wenn man mit Numbers arbeitet, verbrät man das obere Byte halt automatisch mit. Aber stimmt, eigentlich dürften transparente Bitmaps eher selten verlangt werden. Da könnte ich mir sicher auch noch was sparen.
__________________
[Quasimondo | incubator | talks
Quasimondo ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele