Seite 1 von 2

Grafiken verschlüsseln?

Verfasst: 05.11.2005 12:29
von <MeuchleR.>
Hallöchen,

ich bin hier neu im Board und hab gleich schon mal eine Frage :).
Seit ein paar Tagen bin ich im Besitz von Purebasic ( ich habe vorher ein wenig mit Qbasic gearbeitet ), bin also noch ein blutiger Anfänger und arbeite mich seither in diverse Tutorials hinein - vorallem in die die sich mit Programmierung von 2D Spielen beschäftigen. Wie auch immer, man kann ja mit Hilfe des "LoadSprite(0,"x\x.x",0)"-Befehls Images laden lassen was so weit ja auch ganz schön ist. Das Problem ist nur das sich die zu ladenen Grafiken ja in einem Ordner befinden auf den so gut wieder jedermann Zugriff haben kann, sprich: es gibt keine Möglichkeit selbst kreierte Grafiken vor neurigen Augen zu schützen.
Nun möchte ich gerne von euch wissen ob es eine Möglichkeit gibt diese Grafiken bzw. den Ordner der sie enthält so geschickt zu verpacken bzw. zu verschlüsseln ( falls das mit Purebasic funktionieren sollte ) das der normale Laie keinen Zugriff auf sie erhalten kann.

Bin für jede Hilfe dankbar ;).

MfG
<M.>

Sprite einbauen

Verfasst: 05.11.2005 13:23
von Hanniball
Hi,

versuch es mal so:

Code: Alles auswählen

DataSection
    Pic: IncludeBinary "Sprite.bmp"
EndDatasection

CatchSprite(0, ?Pic)
Durch IncludeBinary wird die Bilddatei mit in die exe gepackt. Mit CatchSprite wird ab der Marke Pic das Bild übernommen. Dann brauchst Du es nach dem Compilieren nicht mehr im Ordner haben. Funktioniert auch bei CatchImage. Wenn Du JPEG oder so als Vorlage hast, brauchst Du vorher noch UseJPEGImageDecoder().
Grundsätzlich muss man aber sagen:Was auf dem Bildschirm erscheint, lässt sich auch klauen...
Gruss Hanniball

Verfasst: 05.11.2005 13:40
von AND51
Ich wollte an dieser Stelle auch nochmal darauf hinweisen, dass jeder, der dein Bild unbedingt haben will, einfach ein Screenshot von deinem Programm machen muss und er hat schon das Bild.
Allerdings könntest du dann einfach im Programm ein Text so über ds Bild klatschen, dass das Bild zwar noch gut aussieht, es sich aber nicht mehr lohnt, ein Screenshot zu machen.

Außerdem kannst du ja dabei schreiben, dass das Copyright bei dir liegt. So darf niemand das Bild benutzen, ohne dich vorher zu fragen (wenn du das auch noch dahinschreibst).

Aber das mit dem IncludeBinary sei nochmal kurz erläutert: Du benutzt einfach den Code oben. Das kannst du mit so vielen Bildern (und auch Musik, Sounds, eben alle Dateien) machen, wie du willst. Du musst nur statt Pic vor dem Doppelpunkt ein anderen "internen Dateinamen" verwenden. CatchImage() bereitet das Bild dann so für dich auf, dass du das Bild benutzen kannst, als sei es mit LoadSprite() geladen worden. Ebenso bereiten CatchImage(), CatchSound() und CatchMovie() die Daten enstrpechend auf...

Code: Alles auswählen

DataSection
MeinBild1:
IncludeBinary "relativer\oder\absoluter_pfad\zum_Bild.bmp"
EndDataSection 

DataSection
MeinBild2:
IncludeBinary "wasser.png"
EndDataSection

DataSection
GeileMucke:
IncludeBinary "musik.wav"
EndDataSection

CatchSound(0, ?GeileMucke)
CatchImage(0, ?MeinBild1)
CatchImage(1, ?MeinBild2)
DataSection und EndDataSection haben die Aufgabe, eine inkludierte Datei zu umschließen.
MeinBild und GeileMucke sind die "Adressen", unter der die Dateien später erreichbar sind.
IncludeBinary braucht nur noch den pfad und den Dateinamen für die Datei, die mit in die EXE-Datei aufgenommen werden soll.
Die Catchbefehle stellen dann die inkludierten Dateien bereit. Dazu musst du als 1. Parameter dien SpriteID oder SoundID oder welche ID auch immer angeben, unter der du das Element dann später ansprechen kannst, der 2. Parameter beginnt mit einem ?; es ist eine Sprunmarke und verweist auf den "internen Dateinamen", der vor jedem Includebefehl, gefolgt von einem :, steht.

Verfasst: 05.11.2005 13:51
von vonTurnundTaxis
AND51 hat geschrieben: Außerdem kannst du ja dabei schreiben, dass das Copyright bei dir liegt. So darf niemand das Bild benutzen, ohne dich vorher zu fragen (wenn du das auch noch dahinschreibst).
Und warum hier immer wieder "DataSection" und "EndDataSection"?
So ist es besser:

Code: Alles auswählen


DataSection
MeinBild1:
IncludeBinary "relativer\oder\absoluter_pfad\zum_Bild.bmp"

MeinBild2:
IncludeBinary "wasser.png"

GeileMucke:
IncludeBinary "musik.wav"
EndDataSection

CatchSound(0, ?GeileMucke)
CatchImage(0, ?MeinBild1)
CatchImage(1, ?MeinBild2)
AND51 hat geschrieben: DataSection und EndDataSection haben die Aufgabe, eine inkludierte Datei zu umschließen.
Eigentlich umschließen sie alle inkludierten Dateien.

Verfasst: 05.11.2005 16:38
von Green Snake
>CatchImage() bereitet das Bild dann so für dich auf, dass du das Bild
>benutzen kannst, als sei es mit LoadSprite() geladen worden

nicht ganz, wohl eher CatchSprite ;)

Verfasst: 05.11.2005 16:42
von MVXA
Wohl eher [c]LoadImage()[/c]. Man muss nicht immer gleich die Sprite-
befehle benutzen, wenn man mit einem Bild arbeiten möchte.

Verfasst: 05.11.2005 16:42
von KeyKon
Oder du packst alle Bilder mit dem Packer in eine Datei, wobei vorsicht geboten ist, IrfanView zum beispiel kann immer das erste JPG Bild einlesen, warum auch immer.
Du kannst natürlich auch jedes Bild mit einer der in PB intigrierten Verschlüsselungsmethoden verschlüsseln.
Wenn es viele Bilder sind lohnt sich IncludeBinary nicht da das dann alles doppelt im Arbeitsspeicher hängt (einmal mit der Exe und einmal wenns geladen wurde)
Oder du machst dein eigenes Bildformat das nur dein Programm lesen kann. Ist allerdings nicht zu empfehlen da das dann meist recht groß und lahm ist.

KeyKon

Verfasst: 05.11.2005 18:45
von AND51
Green Snake und vonTurnundTaxis haben Recht, ich habe da im Eifer des Gefechts zwei Befehle miteinander vertauscht.

@ greeni: Ich wusste nicht, dass man mehere IncludeBinary-Befehle mit DataSection-Anweisungen umschließen kann. Wenn das so geht wie du gesagt hast, geht das natürlich auch!

Verfasst: 05.11.2005 18:57
von vonTurnundTaxis
AND51 hat geschrieben:@ greeni: Ich wusste nicht, dass man mehere IncludeBinary-Befehle mit DataSection-Anweisungen umschließen kann. Wenn das so geht wie du gesagt hast, geht das natürlich auch!
Argh! Du hast mich mit Greensnake verwechselt! :bluescreen:

Verfasst: 05.11.2005 23:45
von roherter
DataSection
EnDatasection

Sowas Benutze ich gar nicht!

Ich schreibe meine Includes immer ans ende des Programms das geht auch!