Page 1 sur 2

Image decrypté sans etre sur le diskdur

Publié : lun. 20/juin/2011 20:25
par SPH
Salut, :lol:

imaginez que j'ai un BMP que je crypte pixel par pixel. Puis-je le decrypter a l'ecran sans que cette image decrypté passe sur le diskdur ?

Re: Image decrypté sans etre sur le diskdur

Publié : lun. 20/juin/2011 20:46
par idle
oui, si vous chiffrer l'image vous pouvez le decypt d'une mémoire tampon
pour les fenêtres, vous pouvez créer une copie dib entre eux l'image de la mémoire, il decrpt et copier revenir à l'image.

yes, if you encrypt the image you can decypt it from a memory buffer
for windows you can create a dib copy them image to memory, decrpt it and copy back to image.

Code : Tout sélectionner

Procedure CopyImageToMemory(ImageNumber, Memory)
 
  Protected TemporaryDC, TemporaryBitmap.BITMAP, TemporaryBitmapInfo.BITMAPINFO
 
  TemporaryDC = CreateDC_("DISPLAY", #Null, #Null, #Null)
 
  GetObject_(ImageID(ImageNumber), SizeOf(BITMAP), TemporaryBitmap.BITMAP)
  
   
  TemporaryBitmapInfo\bmiHeader\biSize        = SizeOf(BITMAPINFOHEADER)
  TemporaryBitmapInfo\bmiHeader\biWidth       = TemporaryBitmap\bmWidth
  TemporaryBitmapInfo\bmiHeader\biHeight      = -TemporaryBitmap\bmHeight
  TemporaryBitmapInfo\bmiHeader\biPlanes      = 1
  TemporaryBitmapInfo\bmiHeader\biBitCount    = 32
  TemporaryBitmapInfo\bmiHeader\biCompression = #BI_RGB
 
  GetDIBits_(TemporaryDC, ImageID(ImageNumber), 0, TemporaryBitmap\bmHeight, Memory, TemporaryBitmapInfo, #DIB_RGB_COLORS)
 
  DeleteDC_(TemporaryDC)
 
EndProcedure

Procedure CopyMemoryToImage(Memory, ImageNumber)
 
  Protected TemporaryDC, TemporaryBitmap.BITMAP, TemporaryBitmapInfo.BITMAPINFO
 
  TemporaryDC = CreateDC_("DISPLAY", #Null, #Null, #Null)
 
  GetObject_(ImageID(ImageNumber), SizeOf(BITMAP), TemporaryBitmap.BITMAP)
 
  TemporaryBitmapInfo\bmiHeader\biSize        = SizeOf(BITMAPINFOHEADER)
  TemporaryBitmapInfo\bmiHeader\biWidth       = TemporaryBitmap\bmWidth
  TemporaryBitmapInfo\bmiHeader\biHeight      = -TemporaryBitmap\bmHeight
  TemporaryBitmapInfo\bmiHeader\biPlanes      = 1
  TemporaryBitmapInfo\bmiHeader\biBitCount    = 32
  TemporaryBitmapInfo\bmiHeader\biCompression = #BI_RGB
 
  SetDIBits_(TemporaryDC, ImageID(ImageNumber), 0, TemporaryBitmap\bmHeight, Memory, TemporaryBitmapInfo, #DIB_RGB_COLORS)
 
  DeleteDC_(TemporaryDC)
 
EndProcedure


Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 2:18
par SPH
raaaa, je ne le retrouve pas. Je vais l'expliquer, vous allez voir ce que je veux dire :
On reserve un espace memoire de la taille du fichier image. Puis on envoie les donnees de l'image dans la zone memoire. Je cherche ce code (mais je ne pige rien aux pointeurs alors...)
Et par dessus tout ca, ma question est : peut on envoyer la zone memoire dans la zone memoire graphique ?

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 7:45
par Thyphoon
SPH a écrit :raaaa, je ne le retrouve pas. Je vais l'expliquer, vous allez voir ce que je veux dire :
On reserve un espace memoire de la taille du fichier image. Puis on envoie les donnees de l'image dans la zone memoire. Je cherche ce code (mais je ne pige rien aux pointeurs alors...)
Et par dessus tout ca, ma question est : peut on envoyer la zone memoire dans la zone memoire graphique ?
oui avec un catchsprite() /cathimage() voir doc

Je te laisse chercher avec les commandes suivante tu devrais pouvoir faire ce que tu veux
ReadFile()
AllocateMemory()
AESDecoder(); ou autre si tu as ton propre encodage
ReadData()
CatchImage()
freeMemory()

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 8:21
par SPH
Merci, je regarde ca... :mrgreen:

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 11:43
par SPH
Voyez ce code et vous comprendrez ce que je veux faire : je veux Catcher une image JPG depuis l'emplacement memoire que j'ai reservé. L'image est lue dedans mais je ne catch rien. Pkoi ?

Code : Tout sélectionner

UseJPEGImageDecoder()

file$ = OpenFileRequester("Sélectionnez un fichier","","JPG (.jpg)|*.jpg|All files (*.*)|*.*",0)
  If file$
    If ReadFile(0, file$) 
      length = Lof(0)                            ; Lit la taille en octets du fichier 
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
      EndIf
      CloseFile(0)
    EndIf
  EndIf
  
  Resultat = CatchImage(0, *MemoryID, length)
  
  Debug result
  

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 11:46
par falsam
SPH a écrit : Debug result
Resul at ?

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 11:47
par SPH
falsam a écrit :
SPH a écrit : Debug result
Resul at ?
M****. Merci de m'avoir eclairé. J'y etais alors ? :mrgreen:

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 11:53
par falsam
SPH a écrit :M****. Merci de m'avoir eclairé. J'y etais alors ? :mrgreen:
D'aprés ce code ça fonctionne :)

Code : Tout sélectionner

UseJPEGImageDecoder()


file$ = OpenFileRequester("Sélectionnez un fichier","","JPG (.jpg)|*.jpg|All files (*.*)|*.*",0)
  If file$
    If ReadFile(0, file$) 
      length = Lof(0)                            ; Lit la taille en octets du fichier 
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
      EndIf
      CloseFile(0)
    EndIf
  EndIf
  
  Resultat = CatchImage(0, *MemoryID, length)
  
  Debug resultat
  
  OpenWindow(0, 0, 0, 500, 500, "Resultat de ma selection", #PB_Window_SystemMenu)
  ImageGadget(#PB_Any, 10,20,300,400,ImageID(0))
  Repeat
  
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End                
      
  EndSelect
ForEver
  

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 12:12
par SPH
Juste un truc : pourquoi ImageGadget(#PB_Any, 0,0,300,200,ImageID(0)) ne force pas l'image a 300*200 ?

Code : Tout sélectionner

UseJPEGImageDecoder()


file$ = OpenFileRequester("Sélectionnez un fichier","","JPG (.jpg)|*.jpg|All files (*.*)|*.*",0)
  If file$
    If ReadFile(0, file$) 
      length = Lof(0)                            ; Lit la taille en octets du fichier 
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
      EndIf
      CloseFile(0)
    EndIf
  EndIf
  
  Resultat = CatchImage(0, *MemoryID, length)
  
  ;Debug resultat
  
  OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Resultat de ma selection", #PB_Window_SystemMenu)
  ImageGadget(#PB_Any, 0,0,300,200,ImageID(0))
  Repeat
  
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End                
      
  EndSelect
ForEver

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 12:19
par falsam
En fait les dimensions de ImageGadget ne servent à rien !!
Doc Pure Basic a écrit : La hauteur et la largeur du gadget s'ajustent automatiquement à la taille de l'image (les paramètres Largeur et Hauteur sont donc actuellement sans effet).

Re: Image decrypté sans etre sur le diskdur

Publié : mar. 21/juin/2011 12:26
par falsam
SPH a écrit :Juste un truc : pourquoi ImageGadget(#PB_Any, 0,0,300,200,ImageID(0)) ne force pas l'image a 300*200 ?
Remplace :

ImageGadget(#PB_Any, 0,0,300,200,ImageID(0))

par

ImageGadget(#PB_Any, 10,20,0,0,ResizeImage(0, 300, 200))

Re: Image decrypté sans etre sur le diskdur

Publié : jeu. 23/juin/2011 17:10
par SPH

Code : Tout sélectionner

UseJPEGImageDecoder()


file$ = OpenFileRequester("Sélectionnez un fichier","","JPG (.jpg)|*.jpg|All files (*.*)|*.*",0)
  If file$
    If ReadFile(0, file$) 
      length = Lof(0)                            ; Lit la taille en octets du fichier 
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
      EndIf
      CloseFile(0)
    EndIf
  EndIf
  
  Resultat = CatchImage(0, *MemoryID, length)
  
  ;Debug resultat
  
  OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Resultat de ma selection", #PB_Window_SystemMenu)
  ImageGadget(#PB_Any, 0,0,300,200,ImageID(0))
  Repeat
  
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End                
      
  EndSelect
ForEver
Est ce que quand on affiche une image on peux facilement changer sa resolution avec par exemple la roulette de la souris ou les touches + et - ??
Je veux dire, dans :

Code : Tout sélectionner

Repeat
    Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End                
  EndSelect
ForEver
on peux reussir a faire ca ?
(car je n'ai JAMAIS utilisé de windows et ses instructions)

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 10:04
par SPH
Personne please ? :oops:

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 10:08
par Thyphoon
au lieu d'un imageGadget utilise un canvasGadget ! et là tu pourra capturer le clavier ou la souris pour zoomer sur ton image !