Image decrypté sans etre sur le diskdur

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Image decrypté sans etre sur le diskdur

Message 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 ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
idle
Messages : 63
Inscription : ven. 30/juil./2010 2:31

Re: Image decrypté sans etre sur le diskdur

Message 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

Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Image decrypté sans etre sur le diskdur

Message 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 ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Image decrypté sans etre sur le diskdur

Message 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()
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Image decrypté sans etre sur le diskdur

Message par SPH »

Merci, je regarde ca... :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Image decrypté sans etre sur le diskdur

Message 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
  

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Image decrypté sans etre sur le diskdur

Message par falsam »

SPH a écrit : Debug result
Resul at ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Image decrypté sans etre sur le diskdur

Message par SPH »

falsam a écrit :
SPH a écrit : Debug result
Resul at ?
M****. Merci de m'avoir eclairé. J'y etais alors ? :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Image decrypté sans etre sur le diskdur

Message 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
  
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Image decrypté sans etre sur le diskdur

Message 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

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Image decrypté sans etre sur le diskdur

Message 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).
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Image decrypté sans etre sur le diskdur

Message 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))
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Image decrypté sans etre sur le diskdur

Message 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)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Image decrypté sans etre sur le diskdur

Message par SPH »

Personne please ? :oops:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Image decrypté sans etre sur le diskdur

Message 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 !
Répondre