Image Optimizer
Re: Image Optimizer
Je pense qu'une image codée en RGBA, je note la valeur du canal Alpha, je recode en RGB et je rajoute la valeur Alpha au chargement de l'image.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Image Optimizer
Sauf que ça marche pas ça hein.
Plusieurs pixel peuvent avoir un canal alpha différent fais attention à ça !
Plusieurs pixel peuvent avoir un canal alpha différent fais attention à ça !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Re: Image Optimizer
Je vais vous décevoir, mais Shadow a raison sur un point. Son principe de compression est valable. C'est une compression avec perte, il fait perdre un bit à chaque pixel (ou à chaque composante), ce qui fait qu'il y a bien réduction de taille, au détriment de la qualité de l'image.
Ceux qui disent que dans un fichier, on en revient toujours à des données codées sur des octets, ont tort. Je leur conseille de faire par eux-mêmes un packer type LZH, et ils verront qu'on travaille par bit, et non pas par octet. C'est d'ailleurs pour cela que la plupart de ces compresseurs sont lents. L'adressage se fait par octet, les données peuvent avoir des tailles variables, en bits.
Par contre, Shadow s'embrouille avec les fichiers, passe par du texte, ne fait pas vraiment la différence entre la compression utilisée dans un png, un jpeg, un 7zip, un zip, etc. Ce n'est pas bien grave, il apprendra.
Ceux qui disent que dans un fichier, on en revient toujours à des données codées sur des octets, ont tort. Je leur conseille de faire par eux-mêmes un packer type LZH, et ils verront qu'on travaille par bit, et non pas par octet. C'est d'ailleurs pour cela que la plupart de ces compresseurs sont lents. L'adressage se fait par octet, les données peuvent avoir des tailles variables, en bits.
Par contre, Shadow s'embrouille avec les fichiers, passe par du texte, ne fait pas vraiment la différence entre la compression utilisée dans un png, un jpeg, un 7zip, un zip, etc. Ce n'est pas bien grave, il apprendra.
Re: Image Optimizer
Tu as raison djes, c'est en forgeant qu'on devient forgeron, quand j'ai mal à l'intestin, je n'appelle pas le plombier, car ce ne sont pas les mêmes tuyaux !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Image Optimizer
Exactement, c'est tout à fait ça !Je vais vous décevoir, mais Shadow a raison sur un point. Son principe de compression est valable. C'est une compression avec perte, il fait perdre un bit à chaque pixel (ou à chaque composante), ce qui fait qu'il y a bien réduction de taille, au détriment de la qualité de l'image.
Alors, l'or de l'encodage, tu enlève un bit par composante (Le dernier).
L'or du décodage, tu rajoute un bit (A la fin) par composante.
Le tour est jouer !
Tu pers au maximum 1 par composante en faisant ça.
La qualité de l'image est encore excellente, presque indeme.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Re: Image Optimizer
Bon, je ne sais pas ou ca a buggué mais voici le resultat mediocre de mes recherches :


Code pour compresser :
Code pour decompresser :


Code pour compresser :
Code : Tout sélectionner
;#################################################################################,
#src=0
#dst=1
Fichier$ = OpenFileRequester("Choisissez un BMP a compresser", "*.bmp", "c:\Users\SPH\Desktop\", 0)
If Fichier$=""
End
EndIf
LoadImage(#src,fichier$)
larg=ImageWidth(#src)
haut=ImageHeight(#src)
;;;;;;;;;
CreateFile(#dst, fichier$+".rvb")
WriteLong(#dst,larg)
WriteLong(#dst,haut)
;;;;;;;;;
Dim pr.b(4)
Dim pv.b(4)
Dim pb.b(4)
p1=0
p2=0
StartDrawing(ImageOutput(0))
For u=0 To haut-1
For i=0 To larg-1
x=Point(i,u)
r=Red(x)/4
v=Green(x)/4
b=Blue(x)/4
; Debug r
; Debug v
; Debug b
; Debug("===")
For n=0 To 5
bit = (r>>n)%2
pr(p2)!(bit<<p1)
bit = (v>>n)%2
pv(p2)!(bit<<p1)
bit = (b>>n)%2
pb(p2)!(bit<<p1)
p1+1
If p1=8
p1=0
p2+1
If p2=3
;ecrire:
For ecrire=0 To 2
WriteByte(#dst,pr(ecrire))
WriteByte(#dst,pv(ecrire))
WriteByte(#dst,pb(ecrire))
Next
p1=0
p2=0
Dim pr.b(4)
Dim pv.b(4)
Dim pb.b(4)
;Return
EndIf
EndIf
Next
Next
Next
StopDrawing()
CloseFile(#dst)
End
;##############################################################
;##############################################################
;##############################################################
;##############################################################
Code pour decompresser :
Code : Tout sélectionner
;#################################################################################,
#src=0
#dst=1
sph1.b
sph2.b
sph3.b
sph4.b
sph5.b
sph6.b
sph7.b
sph11.b
sph12.b
sph13.b
sph14.b
sph15.b
sph16.b
sph17.b
sph21.b
sph22.b
sph23.b
sph24.b
sph25.b
sph26.b
sph27.b
Fichier$ = OpenFileRequester("Choisissez un '.rvb' a décompresser", "*.rvb", "c:\Users\SPH\Desktop\", 0)
If ReadFile(#src,fichier$)
Else
End
EndIf
Larg=ReadLong(#src)
Haut=ReadLong(#src)
If CreateImage(0, Larg, Haut)
Else
End
EndIf
sph=-1
StartDrawing(ImageOutput(0))
For u=0 To haut-1
For i=0 To larg-1
sph+1
If sph=4
sph=0
EndIf
If sph=0
Gosub lire
EndIf
If sph=0
Plot(i,u,RGB(sph2,sph4,sph6))
EndIf
If sph=1
Plot(i,u,RGB(sph7,sph12,sph14))
EndIf
If sph=2
Plot(i,u,RGB(sph16,sph17,sph22))
EndIf
If sph=3
Plot(i,u,RGB(sph24,sph26,sph27))
EndIf
Next
Next
StopDrawing()
SaveImage(0,"c:\Users\SPH\Desktop\24.bmp.rvb.bmp")
;##############################################################
;##############################################################
;##############################################################
;##############################################################
End
lire:
sph1=ReadByte(#src)
sph3=ReadByte(#src)
sph5=ReadByte(#src)
sph11=ReadByte(#src)
sph13=ReadByte(#src)
sph15=ReadByte(#src)
sph21=ReadByte(#src)
sph23=ReadByte(#src)
sph25=ReadByte(#src)
!MOV byte al,[v_sph1]
!shr al,2
!MOV byte [v_sph2],al
!MOV byte ah,[v_sph1]
!MOV byte al,[v_sph3]
!shl ax,6
!shr ax,10
!MOV byte [v_sph4],al
!MOV byte ah,[v_sph3]
!MOV byte al,[v_sph5]
!shl ax,4
!shr ax,10
!MOV byte [v_sph6],al
!MOV byte al,[v_sph5]
!shl al,2
!shr al,2
!MOV byte [v_sph7],al
;===============
!MOV byte al,[v_sph11]
!shr al,2
!MOV byte [v_sph12],al
!MOV byte ah,[v_sph11]
!MOV byte al,[v_sph13]
!shl ax,6
!shr ax,10
!MOV byte [v_sph14],al
!MOV byte ah,[v_sph13]
!MOV byte al,[v_sph15]
!shl ax,4
!shr ax,10
!MOV byte [v_sph16],al
!MOV byte al,[v_sph15]
!shl al,2
!shr al,2
!MOV byte [v_sph17],al
;===============
!MOV byte al,[v_sph21]
!shr al,2
!MOV byte [v_sph22],al
!MOV byte ah,[v_sph21]
!MOV byte al,[v_sph23]
!shl ax,6
!shr ax,10
!MOV byte [v_sph24],al
!MOV byte ah,[v_sph23]
!MOV byte al,[v_sph25]
!shl ax,4
!shr ax,10
!MOV byte [v_sph26],al
!MOV byte al,[v_sph25]
!shl al,2
!shr al,2
!MOV byte [v_sph27],al
;===============
sph2*4
sph4*4
sph6*4
sph7*4
sph12*4
sph14*4
sph16*4
sph17*4
sph22*4
sph24*4
sph26*4
sph27*4
Return
;========================================
!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
Re: Image Optimizer
Acid wash effect...
Re: Image Optimizer
Le bmp fait 2359350 octets
Le format data fait 1769480 octets
Ca compresse donc d'un quart mais comme la qualité n'est pas au rendez vous, j'abandonne le projet.
Ca devrais pourtant marcher mieux mais je ne trouve pas le bug
Ca a le merite de m'avoir replongé dans l'ASM et ca, c'est cool
Le format data fait 1769480 octets
Ca compresse donc d'un quart mais comme la qualité n'est pas au rendez vous, j'abandonne le projet.
Ca devrais pourtant marcher mieux mais je ne trouve pas le bug

Ca a le merite de m'avoir replongé dans l'ASM et ca, c'est cool

!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