Page 1 sur 2
Image decrypté sans etre sur le diskdur
Publié : lun. 20/juin/2011 20:25
par SPH
Salut,
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...

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 ?

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 ?

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 ?

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 !