hkaresz Posted November 11, 2006 Posted November 11, 2006 Sziasztok! Olyan programot szeretnék írni, aminek a folyamata következõ lenne: - .jpg fájl megnyitása - a .jpg kiterjesztés lecserélése saját kiterjesztésre /mondjuk: .hhk - ra/. - az új fájl elmentése. Sajnos nem elég, ha a kiterjesztést lecserélem, mert egy ingyenes képnézegetõ is felismeri, hogy igazából egy .jpg fájlról van szó. Azt szeretném, ha a .hhk kiterjesztésû fájlt csak az én programommal lehetne megnyitni. Tud erre valaki megoldást? Elõre is köszönöm a segítséget! Üdv: Karesz
KeLa Posted November 12, 2006 Posted November 12, 2006 Manapság nem csak a kiterjesztés alapján dõl el a dolog. Az a dosos idõkbe mûködött. Ha azt akarod, hogy csak a te programod nyissa meg, átkell alakítani a .jpg fájlt a te képkezelõ formátumodra.
hkaresz Posted November 12, 2006 Author Posted November 12, 2006 Na igen, erre én is rájöttem, csak nem tudom, hogyan lehet ezt megvalósítani. Még nem igzán csináltam ilyesmit! Tudnál benne segíteni? Karesz
KeLa Posted November 12, 2006 Posted November 12, 2006 Sajnos nemtudok segíteni benne, több mint tíz éve nemfoglakoztam a témával. Azóta sokminden változott. Elég nagy feladat egy új képformátumot megalkotni még akkor is ha a jpg-t koppintod. Próbálj doksit beszerezni a formátumról, abba levan írva a fájl fejrészének felépítése. Ha ezt átírod olyan formátumba, hogy a te megjelenítõ szoftvered kitudja olvasni a szükséges információkat a megkelenítéshez, a szabványos megjelenítõk nemvalószínû, hogy tudjék éertelmezni. Nefelejtsd! A jpg egy tömörített tárolási forma, nem kis feladat átdolgozni. A sima bmp fájlnál egy képpontnak megkell adni a helyét (X-Y), a képpont szinkódját, fényességét, és esetleg villog e. A tömörítés egy ilyen adatokból álló blokkban vizsgálja a és írja le az egyforma adatokat. Vagyis egymás melletti X számú képpontban aminek a koordinátái szintén tárolásra kerülnek, hány darab (például) piros pixel van azonos paraméterekkel. és ezek az adatok kerülnek eltárolásra a tömörített képfájlba. így sokkal kevesebb adat kerül tárolásra mert sok az egyforma tulajdonságú képpont. Persze ez csak az alapelv. Valóságban komoly matematikai algoritmusok alapján dolgoznak a programok. Ha csak az a célod, hogy az általad használt képeket ne lehessen egyszerûen megnézni, vannak adattitkosító programok amivel megoldható a feladat.
hkaresz Posted November 13, 2006 Author Posted November 13, 2006 Az nem lehet megoldás, hogy kódolom a Fájlt? Ha igen az jó, de hogyan kell akkor a kódolást elkészíteni?
KeLa Posted November 13, 2006 Posted November 13, 2006 Nézz szét a jómagam honlapján, ott találsz titkosító programot. Link. Itt keresd a Titok progit.
DonTomika Posted November 15, 2006 Posted November 15, 2006 Megnéztem ezt a Titok programot, de én semmilyen infót nem találtam arról, hogy hkaresz hogyan tudná ezt felhasználni a programjában. Amúgy szerintem a legegyszerűbben úgy úszod meg a dolgot, ha mentéskor a fájl összes bájtját xorolod egy számmal, aztán megnyitásnál elvégzed ugyan ezt. Példa: uses jpeg; ... function LoadEncodedJpeg(FileName: string):TJPEGImage; var fs:TFileStream; ms:TMemoryStream; b:byte; begin Result:=TJPEGImage.Create; fs:=TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); ms:=TMemoryStream.Create; try repeat fs.Read(b, 1); b:=b xor 123; ms.Write(b, 1); until fs.Position=fs.Size; ms.Seek(0, soFromBeginning); Result.LoadFromStream(ms); finally ms.Free; fs.Free; end; end; procedure SaveEncodedJpeg(FileName: string; Jpg:TJPEGImage); var fs:TFileStream; ms:TMemoryStream; b:byte; begin fs:=TFileStream.Create(FileName, fmOpenWrite or fmCreate); ms:=TMemoryStream.Create; try Jpg.SaveToStream(ms); ms.Seek(0, soFromBeginning); repeat ms.Read(b, 1); b:=b xor 123; fs.Write(b, 1); until ms.Position=ms.Size; finally ms.Free; fs.Free; end; end; És egy példa a használatára: // Megnyitás Image1.Picture.Assign(LoadEncodedJpeg('C:\test2.jpg')); // Mentés SaveEncodedJpeg('C:\test3.jpg', Image1.Picture.Graphic as TJPEGImage); És egy példafájl, hogy működik-e: http://donmade.uw.hu/linkedfiles/test2.jpg (ez egy elkódolt fájl, a böngészőben nem tudod megnézni) És egy pár fontos dolog: A fenti eljárások nem a legoptimálisabbak, főleg a bájtonkénti olvasás miatt. Ha türelmes vagy, megírhatod, hogy több (2, 4, 8...) kilobájtot olvasson egyszerre a fájlból (pl. egy tömbbe), és a tömb elemeit xorolgassa egy ciklussal. Az eljárásokban levő 123-as számot írd át valamire 1 és 255 között (a 0 azért nem jó, mert akkor minden marad az eredetiben). Minden számnál más és más lesz az elkódolt fájl. Ez nem egy bonyolult kódolás. Ahhoz éppen elég, hogy a képnézegető programok ne ismerjék fel, de egy programozónak nem jelent különösebb gondot a "feltörése", olyan védelmet nem ad, mint pl. a KeLa által javasolt Titok.
Laali Posted November 15, 2006 Posted November 15, 2006 Elnézést, most nagyon off topic leszek ! Közel sem Delphi... Régebben én is gondolkoztam hasonló megoldáson. Arra gondoltam, hogy egy tömörítő program plugin a TotalCommanderhez. Vagyis tömöríti a fájlt, esetleg jelszóvédelemmel, majd ad neki egy kiterjesztést. Visszafelé meg ugyanez. A jelszó is beleírható. Ahogy akkor elnézegettem valamelyik plugin működését, ez megoldhatónak látszott. Esetleg, ha nagyon off, le lehet törölni !
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now