| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #62 (permalink) |
| ~ Registriert seit: Sep 2001 Ort: zufikon
Beiträge: 153
|
Compression klasse von meychi ..einfach aber gut Habe ich schon ein paar mal gebraucht. ActionScript:
auf dem Server PHP-Code: alien..
__________________ use the force @all http://www.starwolf.ch http://www.digital-artist.ch http://search.msn.ch/ |
| | |
| | #63 (permalink) |
| ~ Registriert seit: Sep 2001 Ort: zufikon
Beiträge: 153
|
Mein Low Level Kompression Lösung: ActionScript:
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.....
__________________ use the force @all http://www.starwolf.ch http://www.digital-artist.ch http://search.msn.ch/ Geändert von Alienhunter (29-09-2005 um 22:15 Uhr) |
| | |
| | #64 (permalink) | |
| Neuer User Registriert seit: Nov 2003 Ort: München
Beiträge: 114
| Zitat:
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 Geändert von Quasimondo (29-09-2005 um 22:28 Uhr) | |
| | |
| | #65 (permalink) | |
| ~ Registriert seit: Sep 2001 Ort: zufikon
Beiträge: 153
| Zitat:
Gruss und danke alien...
__________________ use the force @all http://www.starwolf.ch http://www.digital-artist.ch http://search.msn.ch/ | |
| | |
| | #66 (permalink) | |
| - Der ActionScripter - Registriert seit: Jun 2001 Ort: germany
Beiträge: 108
| Zitat:
ActionScript:
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] | |
| | |
| | #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^^ |
| | |
| | #68 (permalink) | |
| ~ 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:
...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...
__________________ use the force @all http://www.starwolf.ch http://www.digital-artist.ch http://search.msn.ch/ | |
| | |
| | #69 (permalink) |
| dude Registriert seit: Apr 2005
Beiträge: 560
|
@Alienhunter benutz mal ActionScript:
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) |
| | |
| | #70 (permalink) |
| Neuer User 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. |
| | |
| | #71 (permalink) |
| Neuer User 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. Geändert von Quasimondo (04-10-2005 um 23:09 Uhr) |
| | |
| | #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:
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] | |
| | |
| | #73 (permalink) | |
| Neuer User Registriert seit: Nov 2003 Ort: München
Beiträge: 114
| Zitat:
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:
Leider geht das aber nicht denn sobald ich das hier mache: ActionScript:
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... Geändert von Quasimondo (05-10-2005 um 01:10 Uhr) | |
| | |
| | #74 (permalink) | ||
| - Der ActionScripter - Registriert seit: Jun 2001 Ort: germany
Beiträge: 108
| Zitat:
Zitat:
grüsse
__________________ Tobias Fendel lieber heimlich schlau, als unheimlich laut [TrashCan] [Die ActionScripter] [IRC-FlashChat] | ||
| | |
| | #75 (permalink) | ||
| Neuer User Registriert seit: Nov 2003 Ort: München
Beiträge: 114
| Zitat:
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:
| ||
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |