• Anmelden

Reborn

hat beim Stromkonzern schon Rabatt

  • »Reborn« ist der Autor dieses Themas

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

1

Montag, 14. Juni 2010, 19:23

PNG to Table

Hi,
ich bins mal wieder :D
Und zwar suche ich diesesmal ein Script oder auch nur eine Eklärung für folgende Idee:
Ich will die Farbwerte in einer Table und die größen einer PNG Datei (width und height) in einer Variable speichern und dass ganz ohne die Klasse Bitmap. D.h. ich muss diese Werte aus einer PNG-Datei auslesen. Nur ich hab noch keinen Plan wie ich das angehen muss.
Kann mir da vielleicht einer weiter helfeN?
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

2

Dienstag, 15. Juni 2010, 17:58

Schau dir mal die 4 Scripte* an, welche die Farbwerte einer Bitmap als PNG speichern - das machst du jetzt rückwärts, nur das du es nicht in ein Bitmap speicherst sondern in eine Table (was mMn eine blöde Idee ist, nebenbei) ^_^
Ausserdem findest du in Wikipedia alle technischen Daten wie PNG Dateien gespeichert werden , daraus kannst du dir einfach ableiten, wie du sie auslesen musst - ist nur ein bisschen Zlib- und pack-Wissen nötig (-> Forensuche).

Was hast du denn für eine Idee im Kopf? Wozu die Bilddaten lesen, und so seltsam halten?
Ein reines Rubyscript um Bilder zu ändern, selber machen?

*die Scripte findest du über Forensuche/Google und mindestens zwei auf Itzamná, kann sogar sein das es mehr gibt, ich kenne nur 4

Reborn

hat beim Stromkonzern schon Rabatt

  • »Reborn« ist der Autor dieses Themas

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

3

Dienstag, 15. Juni 2010, 19:56

Auf das mit dem Rückwärts bin ich auch schon gekommen... Nur so ganz einfach gehts dann auch wieder nciht...
Mein 1. Problem währ da erstmal wie ich den Header und die verschiedenen Sachen vom Rest trenne....? Da komm ich schon mal nicht weiter.

Und was is ne umkehrfunktion zu:

Ruby Quellcode

1
Zlib::Deflate.deflate(data, 8)

???
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Reborn« (15. Juni 2010, 19:56)


Evrey

Oberschurke im Ruhestand

Motto: "Satzzeichen sind keine Rudeltiere." - Chesra

  • Nachricht senden

4

Dienstag, 15. Juni 2010, 20:57

Ruby Quellcode

1
2
Kernel.require('zlib')
Zlib::Inflate.inflate(data,end_mark)
  • :medal: Werbung

    Bild

    Cpp Quellcode

    1
    
    #define TRUE FALSE //Happy debugging suckers
    (Einfach nur wundervoll.)
  • :palette: 1plus3 :cake:

    Bild
  • :fires: Nuuuhminaaah

    Bild
  • :medal: compétences

    mes compétences
    :heart_full: :heart_full: :heart_full: :heart_full: :heart_full: max.
    :ruler-triangle: Maps machen :heart_full: :heart-empty: :heart-empty: :heart-empty: :heart-empty:
    :media-player: Musik machen :heart_full: :heart-half: :heart-empty: :heart-empty: :heart-empty:
    :cup: Scripts machen :heart_full: :heart_full: :heart_full: :heart_full: :heart-break:
    :paper: Story ausdenken :heart_full: :heart_full: :heart_full: :heart-empty: :heart-empty:
    :cut: Pixeln und so :heart-empty: :heart-empty: :heart-empty: :heart-empty: :heart-empty:
    :game: Events proggen :heart_full: :heart_full: :heart_full: :heart_full: :heart_full:
    (Dieser Tab ist rein satirisch.)
  • :folder-open: mes projets

    • :addressbook: Silentium
      :book: Name: Silentium
      :rmxp: Maker: Eigenbau (C++, x86-SSE/AVX-Assembly, Ruby/Lua)

      :paper: Story
      :game: NPCs
      :cup: Scripts
      :drill: Ressis
      :ruler-triangle: Maps
      :compile: Gesamt
      (3+4)% 42 69% 0815 -17.438 103.38% ± 6.3mm²

      (Die Tabelle erfüllt lediglich satirische Zwecke.)
    • :compile: Onyx
      Eine in C++ implementierte, modulare, plattformunabhängige, virtuelle Maschine. Die Test-Version ist bereits halb fertig. Ab dann gibt es vielleicht mehr Infos. Sie soll die auf dem ersten Blick LISP-artige und eigens dafür konstruierte Sprache Obsidian ausführen können. Experimentell wird auch ein Lua-Compiler für Onyx gebaut. Ziel ist eine leistungsfähige, virtuelle Maschine für beliebige Scriptsprachen. Theoretisch gesehen müsste man bloß noch einen kompatiblen Compiler schreiben, der Quellcode jener Sprache in Onyx-Assembly, oder direkt in Onyx-Bytecode übersetzt. Ob die jemand nutzen wird, ist eine andere Frage und nur ein sekundäres... nein, eher tertiäres Ziel dieser VM. Primär dient es mir lediglich dazu, mein Verständnis von Hardware, ISA, und Assembly zu vertiefen, sowie eigene Grenzen auszutesten.

      :exclamation: Warnung!
      Das Entwickeln einer virtuellen Maschine oder Programmiersprache (im wahnsinnigsten Fall beides) ist eine höchst komplizierte Tätigkeit, aus der viel Frust und Hirnmatsche hervor gehen. Sollte sich dennoch ein ähnlich wahnsinniger finden, der sowas zusammen schustern will, so lege ich ihm/ihr die folgenden Bücher ans Herz:
      • Compiler - Das Drachenbuch [978-3-8273-7097-6]
        Dieses Buch schlachtet ausführlich und leicht verständlich die Grundlagen bis hoch zu den Experten-Techniken des Compilerbaus aus. Es fängt mit der Automaten-Theorie und formalen Sprachen an, arbeitet sich durch Analysetechniken vor, und landet schließlich bei Techniken wie Optimierung und Register-Zuweisung. Das Buch wiegt 3Kg oder 4Kg. Hab's mal gewogen. Ist also nicht gerade die Lektüre für unterwegs.

      • Computerarchitektur [3-8273-7016-7]
        Hier werden leicht verständlich die wichtigsten Entwicklungen der Rechnerarchitekturen erklärt (Gut, das Buch ist in die Jahre gekommen, aber der Weg zu heute ist ein winziger Schritt, den man sich nach diesem Buch selbst erdenken kann). Hauptbestandteil des Buchs ist eine relativ umfassende Betrachtung der Funktionsweise dreier gänzlich unterschiedlicher, aber dominierender Prozessor-Typen am Beispiel des Pentium II, UltraSPARC II, sowie picoJava. Die meisten Elemente dieses Buchs sind zwar für die Konstruktion einer virtuellen Maschine irrelevant, oder aufgrund der Tatsache, dass die VM Software ist und z.B. Byte-Grenzen hat, sogar zu Leistungseinbußen führen kann, doch ist ein hinreichendes Verständnis dieser Maschinen, mit denen wir arbeiten, äußerst hilfreich für die Überlegungen, wie die VM arbeiten soll.

      Es kann sehr hilfreich und inspirierend sein, den Code quelloffener, virtueller Maschinen anderer Sprachen zu überfliegen. Meine Lieblings-Quelle war und ist stets die VM von Lua. Sie ist schlank, verständlich, in C implementiert, und basiert im Gegensatz zu vielen anderen Scriptsprachen-VMs auf einer Register-Maschine statt einer Stapelmaschine. Es wäre natürlich vorteilhaft, die entsprechende Sprache zu verstehen, in der man auch die eigene VM implementieren will. Weiterhin ist es äußerst vorteilhaft, eine leistungsstarke und bequeme Sprache wie C++ zu beherrschen, um die VM zu implementieren. Und bevor irgendwer auf die Idee kommt: Assembly ist NICHT als dominierende Sprache für den Bau einer VM geeignet. Wer die Frage des "Warum?" nicht beantworten kann, sollte zunächst die gewählte Sprache und Assembly hinreichend verstehen lernen, und es dann erneut mit der Frage versuchen. Es lohnt sich dennoch, Assembly zu lernen. Allein schon, um erneut das Verständnis zu vertiefen, zumal ihr mehr oder weniger gezwungen seid, auch für eure VM eine Assembler-Sprache zu entwickeln (Außer natürlich ihr schreibt eure Test-Programme Bit für Bit ;3).
  • :locale: enfin

    Je ne peux pas parler français.
    C'est tout ce que Goodle et les restes de cours de français.
Signaturstand: 24.07.2013

Reborn

hat beim Stromkonzern schon Rabatt

  • »Reborn« ist der Autor dieses Themas

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

5

Dienstag, 15. Juni 2010, 23:11

Ah Danke, daran hätte ich jetzt nich gedacht, dass ich das ein binden muss.
Also ich bin jetzt danke Palym ein großes Stück weiter gekommen. Die Breite und die Höhe kann ich jetzt schon richtig auslesen, nur enn ich jetzt mit set_pixel ein rotes Rechteckt aus nem Bild auslesen will, kommen nur so kleine graue Farbpunkte. Also irgendwas muss ich falsch gecodet haben...
Doch hier jetzt erstmal das Script:
Spoiler: Script

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
file.binmode
bytes = []
width = ""
height = ""
file.each_byte {|b| bytes.push(b.chr)}
data = ""
(bytes.size - 57).times {|n| data += bytes[n + 40]}
6.times {|n| width += bytes[n + 16]; height += bytes[n + 22]}
data = data.unpack("C*")
p data.size
width = width.unpack("N")[0]
height = height.unpack("n")[0]
zum Lesen den Text mit der Maus markieren

Hier wird jedesmal bei p Data mit einem Bild das 100x100 Pixel groß ist 355 ausgegeben. Wie kann das sein? o.O Was mach ich da falsch??

Oder vielleicht mach ich auch was beim Auslesen falsch:
Spoiler: Schleife für die Bilddarstellung

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
    height.times do |y|
      width.times do |x|
        c += 1.0
        if c / width == y
          next
        end
        red = data[c].to_i
		    green = data[c + 1].to_i
		    blue = data[c + 2].to_i
        alpha = data[c + 3].to_i
        test.bitmap.set_pixel(x, y, Color.new(red, green, blue, alpha))
      end
    end
zum Lesen den Text mit der Maus markieren
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

6

Mittwoch, 16. Juni 2010, 15:29

Nehmen wir an, das ganze Bitmap ist mit dieser Farbe gefüllt: Color.new(10,20,30,255) auf 3x3 Pixel
So sieht der Array aus:
data = [10,20,30,255, 10,20,30,255, 0,20,30,255, 10,20,30,255, 10,20,30,255, 10,20,30,255, 10,20,30,255, 10,20,30,255, 10,20,30,255]
für height = 10, width = 10 und c = 0;

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
height.times do |y|
  width.times do |x|
	c += 1.0
	next if(c / width == y)
	red    = data[c + 0].to_i
	green    = data[c + 1].to_i
	blue    = data[c + 2].to_i
	alpha    = data[c + 3].to_i
	test.bitmap.set_pixel(x, y, Color.new(red, green, blue, alpha))
  end
end

Wenn c Null ist, dann ist der Wert für den Punkt(0|0)
Color.new(10,20,30,255)
Wenn c Eins ist, dann ist der Wert für den Punkt(1|0)
Color.new(1+0,1+1,1+2,1+3) also Color.new(20,30,255,10)
Wenn c Zwei ist, dann ist der Wert für den Punkt(2|0) auch falsch

Ich würd mal sagen, das du die Schrittlänge für c ändern solltest; aber so ganz blick ich auch nicht durch.

Reborn

hat beim Stromkonzern schon Rabatt

  • »Reborn« ist der Autor dieses Themas

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

7

Donnerstag, 17. Juni 2010, 18:37

Ich hab jetzt mal noch den von Palym genannten Fehler beseitigt, jetzt siehts so aus:
Spoiler: Script

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    file.binmode
    bytes = []
    width = ""
    height = ""
		file.each_byte {|b| bytes.push(b.chr)}
		data = ""
		(bytes.size - 57).times {|n| data += bytes[n + 40]}
    6.times {|n| width += bytes[n + 16]; height += bytes[n + 22]}
    data = data.unpack("C*")
    p data
    width = width.unpack("N")[0]
    height = height.unpack("n")[0]
    test = Sprite.new
    test.bitmap = Bitmap.new(width, height)
    c_a = []
    x = y = 0
    data.each do |i|
      if x == width
        x = 0
        y += 1
        next
      end
      if c_a.size == 4
        red = c_a[0].to_i
		    green = c_a[1].to_i
		    blue =  c_a[2].to_i
        alpha =  c_a[3].to_i
        test.bitmap.set_pixel(x, y, Color.new(red, green, blue, alpha))
        c_a.clear
      end
      c_a.push(i)
      x += 1
    end
zum Lesen den Text mit der Maus markieren

Was allerdings nichts an meinem Bytefehler ändert. -.-

Hey ich hab da ja was überlesen, Evrey, was meinst du mit dem 2ten Parameter von Inflate? Der wird gar net angzeigt bei der Classe.
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Reborn« (17. Juni 2010, 18:37)


Social Bookmarks