Komprimier Algo

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Öhm, (ohne Code angeschaut zu haben) benutzt du Byte als Datentyp? Der geht von -128 bis 127.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Hab nun herausgefunden warum der Algo nicht funktioniert, ReadByte() funktioniert nicht anständig :evil:. es gibt nur ein byte wert bis 128 zurück, alles darüber wird als 0 ausgegeben
Bild
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Beitrag von Max. »

LittleFurz hat geschrieben:Hab nun herausgefunden warum der Algo nicht funktioniert, ReadByte() funktioniert nicht anständig :evil:. es gibt nur ein byte wert bis 128 zurück, alles darüber wird als 0 ausgegeben
Schau Dir das mal an:

a.b = 130
debug a.b
debug a.b & $FF
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

und was hat das mit ReadByte() zutun :freak: ?

edt.
aaaaaaaaaaahhhh.... ich begreiffs :D

etd2:
es funzt nun ! :D Danke Max ! DAAAAAAAANKE, du ahnst nicht wie dankbar ich dir bin :D
Bild
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Beitrag von Max. »

Prima. :)
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

Also mir sagt nur ein "richtiger" komrimieralgohrhytmus zu, weil er von dir selbst kommen muss.
so ein schnick schnack kann sich jeder bauen, und auserdem ist der algo total inefektiv, dh. es brauch zu lange zum komrimieren !
Auf externe libs kann jeder zugreifen ...
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

dieser Code ergenzt nur ein komprimier algorythmus -_-. Und wenn dir die geschwindigkeit nicht passt, dann lösch halt die Delays raus und der Code ist dann schneller. Aber ich würde eher sagen: er ist effektiv. Halt der Code ist nur etwas buggy. Ich teste grad ne neue Version.

edt.
Ich begreiff endlich was du mit deinem Post meinst, robert :freak:.
Nur weil ich die 2DDraw und die Image Lib nutze, heißt das doch nicht, das der code abwärtiger zu behandeln ist. ich habe doch keine lust bei jedem programm, dass ich schreibe, das rad jedes mal neu zu erfinden. Wenn du es als schnick schnack bezeichnest, dann schreib doch deine programme doch gleich in FASM. PB ist auch nur schnick schnack, der den Code in ASM code umwandelt und dann von FASM compilieren lässt. Und zeig du ma uns, an was du so genialem arbeitest.
Zuletzt geändert von MVXA am 28.10.2004 22:14, insgesamt 2-mal geändert.
Bild
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Benubi hat geschrieben:nun ich weiss ja auch nicht alles,

aber bei kompression werden daten vereinfacht; möglichweise farben neu definiert, oder zusammengelegt... (?)

du hast dann einen datenverlust, der für das AUGE nicht sichtbar ist; bei programmen kann man das allerdings nicht so einfach machen, da ein paar zeilen verlust das programm unbrauchbar machen...
Eine Komprimierung mit WinRAR ist aber verlustfrei. Wäre ja auch schlimm wenn so ein Archiv da einfach ein paar Byte wegfallen lassen würde. Und Bitmap ist im Normalfall sowieso unkomprimiert.
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Beitrag von Benubi »

hey mir ist doch gestern abend beim einschlafen was eingefallen, weil ich so ein ähnliches problem habe:

Du benutzt Bytes. und bytes gehen "normalerweise" von -128 bis 127.

deshalb bekommst du nur die grautöne.

du muss also die negativen bytes in positive umwanden. sowas ähnliches müsste es sein... bei mir habe ich jetzt alle graustufen jetzt rausbekommen...

du müsstest dein zeichen in ein word umwandeln, und diese Funktion verwenden (gerade selbstgeschrieben <) ):

Code: Alles auswählen

;- Byte zu Word 

Procedure.w ByteToWord(byteaddr.l)
     RetByte.w
     *bytet.b = PeekB(byteaddr)
     If *bytet < 0
          RetByte = 127 + (129 + *bytet)
     Else
          RetByte = *bytet
     EndIf
     ProcedureReturn RetByte
EndProcedure


;----  test ---
testbyte.b = 0
returnval.w = 0
CreateImage(1,256,256)
x.l
y.l

UseImage(1)
StartDrawing(ImageOutput())
 testbyte = 0
For y = 0 To 255
      returnval = ByteToWord(@testbyte)
     For x = 0 To 255
          Plot(x,y,RGB(returnval,returnval,returnval))
     Next 
     ;Debug "x="+Str(x)
     ; Debug "testbyte:"+ Str( testbyte )
     ; Debug "Fullbyte():" + Str (returnval)
      testbyte = testbyte + 1
Next

StopDrawing()

savefile$=SaveFileRequester("Save BMP-Image:","Byte2Long.bmp","BMP-File (*.bmp)|*.BMP",0)

If savefile$<>""
     SaveImage(1,savefile$,#PB_ImagePlugin_BMP,10)   ;  10 = Beste Qualität
EndIf

End

* ----> 8)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

@Benubi:
Das Problem mit den Bytes wurde schon von Max. gelöst. Das hat eben damit zu tun, dass alle Variablen in PureBasic signed (vorzeichenbehaftet) sind. Deine Funktion ist leider wesentlich langsamer als die einfache Bitoperation.
Antworten