Jump to content
GSForum - Segélyvonal

Saját kiterjesztés


hkaresz
 Share

Recommended Posts

hkaresz

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

Link to comment
Share on other sites

KeLa

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.

Link to comment
Share on other sites

hkaresz

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

 

 

Link to comment
Share on other sites

KeLa

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.

Link to comment
Share on other sites

hkaresz

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?

Link to comment
Share on other sites

KeLa

Nézz szét a jómagam honlapján, ott találsz titkosító programot. Link. Itt keresd a Titok progit.

Link to comment
Share on other sites

DonTomika

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.

Link to comment
Share on other sites

Laali

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 !

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...