Une loupe qui suit la souris
Si ça t'intéresse, et pas trop compliqué à intégrer, tu pourrais énormément gagner de temps en enregistrant les coordonnées que tu calcules (et les facteurs de couleurs aussi) dans un tableau une seule fois au début de la boucle. Il faut toujours essayer d'utiliser des données précalculées dans les effets temps réel. Tu me diras que ce n'est pas très important...
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
je suis bien d'accord 
Je n'ai absolument rien optimiser dans ce code.
C'est du brut de fonderie
Je vais regarder pour l'optimisation et pour l'effet sans la déformation si je m'ennuie un moment
ARS :
pour la déformation, le calcul est celui-ci
Longueur2.f = 1 / (1 + Zoom * Cos(Longueur / Rayon * (#PI / 4)))
dans la procédure DeplaceLouoe()

Je n'ai absolument rien optimiser dans ce code.
C'est du brut de fonderie

Je vais regarder pour l'optimisation et pour l'effet sans la déformation si je m'ennuie un moment
ARS :
pour la déformation, le calcul est celui-ci
Longueur2.f = 1 / (1 + Zoom * Cos(Longueur / Rayon * (#PI / 4)))
dans la procédure DeplaceLouoe()
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Ok merci en effet je trouve cela plus simple pour des "yeux fatigués" de ne pas utiliser la deform. Je te donnerai le feedback de la madre 

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Alors voilà la version optimisée et normalement sans lib.
Ça tourne comment chez vous ?
Ça tourne comment chez vous ?
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.0
;
; Explication du programme :
; Fait un effet de loupe sur votre écran (comme ci une sphèse se déplace au dessus en déformant l'image)
Global Zoom.f, x.l, y.l, x.l, y.l, Rayon.l, Taille.l, Lissage.l, EffetLoupe.l
Global Souris_x, Souris_y, Souris_x_mem, Souris_y_mem
Global Ecran_Largeur, Ecran_Hauteur
Global Dim Image(0, 0)
Global Dim Image2(0, 0)
#Decalage_Fenetre = 0.3
#Rafraichissement = 30
#Limite_Lissage = 10
Global MemIcon.l
Structure InfoListeIcon
TX.l
TY.l
Format.l
Longueur.l
Position.l
Autre.l
EndStructure
Global NewList ListeIcon.InfoListeIcon()
Procedure.l ExtractIcon(TailleX) ; Extraire une icone ou la plus proche
; Retourne le handle de l'icone si le format spécifié existe
; Retourne 0 sinon
Protected id, Format
If MemIcon And (TailleX = 16 Or TailleX = 24 Or TailleX = 32 Or TailleX = 48)
If OSVersion() < #PB_OS_Windows_XP
Format = 24
Else
Format = 32
EndIf
Repeat
; MessageRequester("", Str(TailleX) + " " + Str(Format), 0)
ForEach ListeIcon()
If ListeIcon()\TX = TailleX And ListeIcon()\TY = TailleX And ListeIcon()\Format = Format
; On crée l'icone en mémoire
Mem = AllocateMemory(ListeIcon()\Longueur + 4 + 2 + 2 + 4 + 2 + 4 + 4)
If Mem
PokeL(Mem, 65536)
PokeB(Mem + 4, 1)
PokeB(Mem + 6, ListeIcon()\TX)
PokeB(Mem + 7, ListeIcon()\TY)
PokeL(Mem + 8, ListeIcon()\Autre)
PokeB(Mem + 12, ListeIcon()\Format)
PokeL(Mem + 14, ListeIcon()\Longueur)
PokeL(Mem + 18, 22)
CopyMemory(MemIcon + ListeIcon()\Position, Mem + 22, ListeIcon()\Longueur)
id = CatchImage(#PB_Any, Mem)
FreeMemory(Mem)
ProcedureReturn ImageID(id)
EndIf
EndIf
Next
Select Format
Case 32
Format = 24
Case 24
Format = 8
Case 8
Select TailleX
Case 48
TailleX = 32
Case 32
TailleX = 24
Case 24
TailleX = 16
Case 16
TailleX = 0
EndSelect
If OSVersion() < #PB_OS_Windows_XP
Format = 24
Else
Format = 32
EndIf
EndSelect
Until TailleX < 16
EndIf
ProcedureReturn 0
EndProcedure
Procedure.l LoadIconData(Icone.l) ; Charger l'icône à partir d'un IncludeBinary
Protected NbIcone.l
If MemIcon
FreeMemory(MemIcon)
ClearList(ListeIcon())
EndIf
ClearList(ListeIcon())
NbIcone = PeekB(Icone + 4) & $FF
For n = 0 To NbIcone - 1
AddElement(ListeIcon())
Pos = 6 + 16 * n
ListeIcon()\TX = PeekB(Icone + Pos) & $FF
ListeIcon()\TY = PeekB(Icone + Pos + 1) & $FF
ListeIcon()\Autre = PeekL(Icone + Pos + 2)
ListeIcon()\Format = PeekB(Icone + Pos + 6) & $FF
ListeIcon()\Longueur = PeekL(Icone + Pos + 8)
ListeIcon()\Position = PeekL(Icone + Pos + 12)
If n = NbIcone - 1
MemIcon = AllocateMemory(ListeIcon()\Position + ListeIcon()\Longueur)
CopyMemory(Icone, MemIcon, ListeIcon()\Position + ListeIcon()\Longueur)
EndIf
Next
EndProcedure
Procedure LoadPackIcon(Mem)
Taille = PeekL(Mem)
Mem2 = AllocateMemory(Taille)
If Mem2
UnpackMemory(Mem + 4, Mem2)
LoadIconData(Mem2)
FreeMemory(Mem2)
EndIf
EndProcedure
Procedure SkinWindow2(WindowID, ImageID) ; Mettre une forme sur une fenêtre a partir d'une image
Protected bmi.BITMAPINFO, Region_Temp, Region_Totale, Largeur, Hauteur
GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP)
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = bm\bmWidth
bmi\bmiHeader\biHeight = bm\bmHeight
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
Region_Totale = CreateRectRgn_(0, 0, bm\bmWidth, bm\bmHeight)
Mem = AllocateMemory(bm\bmWidth * bm\bmHeight * 4)
If Mem
hdc = CreateCompatibleDC_(GetDC_(ImageID))
If hdc
GetDIBits_(hdc, ImageID, 0, bm\bmHeight, Mem, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
DeleteDC_(hdc)
EndIf
; On convertit la liste dans le bon format
Largeur = bm\bmWidth - 1
Hauteur = bm\bmHeight - 1
Point = Mem
For y1 = 0 To Hauteur
For x1 = 0 To Largeur
If PeekL(Point) = $FF00FF
x2 = x1
While x2 < Largeur And PeekL(Point + 4) = $FF00FF
x2 + 1
Point + 4
Wend
Region_Temp = CreateRectRgn_(x1, Hauteur - y1, x2 + 1, Hauteur - y1 + 1) ; On retire le point de la region
CombineRgn_(Region_Totale, Region_Totale, Region_Temp, #RGN_DIFF)
DeleteObject_(Region_Temp)
x1 = x2
EndIf
Point + 4
Next
Next
FreeMemory(Mem)
EndIf
SetWindowRgn_(WindowID, Region_Totale, 1) ; On applique la region
DeleteObject_(Region_Totale) ; On efface la region
EndProcedure
Procedure Dimension()
Taille = 2 * Rayon + 1
ResizeWindow(0, #PB_Ignore, #PB_Ignore, Taille, Taille)
ResizeImage(0, Taille, Taille)
StartDrawing(ImageOutput(0))
Box(0, 0, Taille, Taille, $FF00FF) ; on rend toute la fenêtre invisible
For n = -Rayon To Rayon
For nn = -Rayon To Rayon
y = Rayon + nn : x = Rayon + n
Longueur.f = Sqr(n * n + nn * nn) ; On calcul la distance d'un point de la sphère à partir du centre
If Longueur < Rayon ; And Longueur > 1
Plot(x, y, 0) ; on rend visible le cercle qui représente la loupe
EndIf
Next
Next
StopDrawing()
ResizeImage(1, Taille, Taille)
SkinWindow2(WindowID(0), ImageID(0))
Dim Image(Taille - 1, Taille - 1)
Dim Image2(Taille - 1, Taille - 1)
Lissage = 1
EndProcedure
Procedure Sauver()
If CreatePreferences("Loupe.ini")
WritePreferenceLong("Taille", Rayon)
WritePreferenceFloat("Zoom", Zoom)
WritePreferenceLong("EffetLoupe", EffetLoupe)
ClosePreferences()
EndIf
EndProcedure
Procedure Charger()
OpenPreferences("Loupe.ini")
Rayon = ReadPreferenceLong("Taille", 100)
Zoom = ReadPreferenceFloat("Zoom", 2)
EffetLoupe = ReadPreferenceLong("EffetLoupe", 1)
ClosePreferences()
EndProcedure
ProcedureDLL.l SetImageBits2(ImageID, HList) ; Transfert d'un tableau vers une image
Protected bmi.BITMAPINFO, hdc.l, Resultat, bm.BITMAP
Resultat = 0
GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP)
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = bm\bmWidth
bmi\bmiHeader\biHeight = bm\bmHeight
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
hdc = CreateCompatibleDC_(GetDC_(ImageID))
If hdc
SetDIBits_(hdc, ImageID, 0, bm\bmHeight, HList, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
DeleteDC_(hdc)
Resultat = ImageID
EndIf
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.l GetImageBits2(ImageID, HList) ; Transfert d'une image vers un tableau
Protected bmi.BITMAPINFO, hdc.l, Resultat, bm.BITMAP
Resultat = 0
GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP)
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = bm\bmWidth
bmi\bmiHeader\biHeight = bm\bmHeight
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
hdc = CreateCompatibleDC_(GetDC_(ImageID))
If hdc
GetDIBits_(hdc, ImageID, 0, bm\bmHeight, HList, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
DeleteDC_(hdc)
Resultat = ImageID
EndIf
ProcedureReturn Resultat
EndProcedure
Structure Structure_Table
Afficher.l
x1.l
y1.l
x2.l
y2.l
Ecart_x1y1.f
Ecart_x2y1.f
Ecart_x1y2.f
Ecart_x2y2.f
EndStructure
Global Dim Calcul.Structure_Table(0, 0)
Procedure PreCalcul()
Dim Calcul.Structure_Table(Taille, Taille)
For n = -Rayon To Rayon
For nn = -Rayon To Rayon
y = Rayon + nn : x = Rayon + n
Longueur.f = Sqr(n * n + nn * nn) ; On calcul la distance d'un point de la sphère à partir du centre
If Longueur < Rayon - 1 ; Si le pixel est situé dans le rayon du cercle moins une bordure
Calcul(x, y)\Afficher = 1 ; On affiche le pixel
; on calcul la distance du point de l'image correspondant à celui de la sphère
If EffetLoupe ; Si on veut un effet de loupe
Longueur2.f = 1 / (1 + Zoom * Cos(Longueur / Rayon * (#PI / 6)))
Else
Longueur2.f = 1 / (1 + Zoom)
EndIf
; Calcul de la position du pixel avec lissage
PosX.f = Rayon + n * Longueur2
PosY.f = Rayon + nn * Longueur2
PosX_Int.l = PosX
PosY_Int.l = PosY
PosX_Ecart.f = Abs(PosX - PosX_Int)
PosY_Ecart.f = Abs(PosY - PosY_Int)
PosX_EcartInv.f = 1 - PosX_Ecart
PosY_EcartInv.f = 1 - PosY_Ecart
Calcul(x, y)\x1 = PosX_Int
Calcul(x, y)\y1 = PosY_Int
Calcul(x, y)\Ecart_x1y1 = PosX_EcartInv * PosY_EcartInv
Calcul(x, y)\Ecart_x1y2 = PosX_EcartInv * PosY_Ecart
Calcul(x, y)\Ecart_x2y1 = PosX_Ecart * PosY_EcartInv
Calcul(x, y)\Ecart_x2y2 = PosX_Ecart * PosY_Ecart
If PosX >= PosX_Int
If PosY >= PosY_Int ; bas, droite
Calcul(x, y)\x2 = Calcul(x, y)\x1 + 1
Calcul(x, y)\y2 = Calcul(x, y)\y1 + 1
Else ; haut, droite
Calcul(x, y)\x2 = Calcul(x, y)\x1 + 1
Calcul(x, y)\y2 = Calcul(x, y)\y1 - 1
EndIf
Else
If PosY >= PosY_Int ; bas, gauche
Calcul(x, y)\x2 = Calcul(x, y)\x1 - 1
Calcul(x, y)\y2 = Calcul(x, y)\y1 + 1
Else ; haut, gauche
Calcul(x, y)\x2 = Calcul(x, y)\x1 - 1
Calcul(x, y)\y2 = Calcul(x, y)\y1 - 1
EndIf
EndIf
EndIf
Next nn
Next n
EndProcedure
Procedure DeplaceLoupe()
Souris_x = DesktopMouseX()
Souris_y = DesktopMouseY()
; If Souris_x <> Souris_x_mem Or Souris_y <> Souris_y_mem Or Lissage = 1 ; Si la souris a bougé ou si on réactive le lissage
; Souris_x_mem = Souris_x
; Souris_y_mem = Souris_y
; Position de la fenêtre
Fenetre_x = Souris_x + Rayon * #Decalage_Fenetre
Fenetre_y = Souris_y + Rayon * #Decalage_Fenetre
If Fenetre_x + Taille >= Ecran_Largeur
Fenetre_x = Souris_x - Rayon * #Decalage_Fenetre - Taille
EndIf
If Fenetre_y + Taille >= Ecran_Hauteur
Fenetre_y = Souris_y - Rayon * #Decalage_Fenetre - Taille
EndIf
; Fenetre_x = Souris_x - Rayon
; Fenetre_y = Souris_y - Rayon
ResizeWindow(0, Fenetre_x, Fenetre_y, #PB_Ignore, #PB_Ignore)
Temps = ElapsedMilliseconds()
; On copie l'écran
DC = GetDC_(0)
Dessin = StartDrawing(ImageOutput(0))
Box(0, 0, Taille, Taille, 0)
BitBlt_(Dessin, 0, 0, Taille, Taille, DC, Souris_x - Rayon, Souris_y - Rayon, #SRCPAINT | $40000000)
StopDrawing()
ReleaseDC_(0, DC)
; SaveImage(0, "temp.bmp")
GetImageBits2(ImageID(0), @Image())
; Dessin du zoom
If Lissage > 0
For n = -Rayon To Rayon
For nn = -Rayon To Rayon
y = Rayon + nn : x = Rayon + n
If Calcul(x, y)\Afficher ; Si le pixel est situé dans le rayon du cercle moins une bordure
; Si le FPS est élevé, on travaille avec du lissage
Couleur_x1y1 = Image(Calcul(x, y)\x1, Calcul(x, y)\y1)
Couleur_x1y2 = Image(Calcul(x, y)\x1, Calcul(x, y)\y2)
Couleur_x2y1 = Image(Calcul(x, y)\x2, Calcul(x, y)\y1)
Couleur_x2y2 = Image(Calcul(x, y)\x2, Calcul(x, y)\y2)
Rouge = Red(Couleur_x1y1) * Calcul(x, y)\Ecart_x1y1 + Red(Couleur_x2y1) * Calcul(x, y)\Ecart_x2y1 + Red(Couleur_x1y2) * Calcul(x, y)\Ecart_x1y2 + Red(Couleur_x2y2) * Calcul(x, y)\Ecart_x2y2
Vert = Green(Couleur_x1y1) * Calcul(x, y)\Ecart_x1y1 + Green(Couleur_x2y1) * Calcul(x, y)\Ecart_x2y1 + Green(Couleur_x1y2) * Calcul(x, y)\Ecart_x1y2 + Green(Couleur_x2y2) * Calcul(x, y)\Ecart_x2y2
Bleu = Blue(Couleur_x1y1) * Calcul(x, y)\Ecart_x1y1 + Blue(Couleur_x2y1) * Calcul(x, y)\Ecart_x2y1 + Blue(Couleur_x1y2) * Calcul(x, y)\Ecart_x1y2 + Blue(Couleur_x2y2) * Calcul(x, y)\Ecart_x2y2
Image2(x, y) = RGB(Rouge, Vert, Bleu)
EndIf
Next nn
Next n
Else
For n = -Rayon To Rayon
For nn = -Rayon To Rayon
y = Rayon + nn : x = Rayon + n
If Calcul(x, y)\Afficher ; Si le pixel est situé dans le rayon du cercle moins une bordure
; Si le FPS passe en dessous de la limite, on utilise la version sans lissage
Image2(x, y) = Image(Calcul(x, y)\x1, Calcul(x, y)\y1)
EndIf
Next nn
Next n
EndIf
SetImageBits2(ImageID(1), @Image2())
; FPS analyse
Temps = ElapsedMilliseconds() - Temps
If Temps > #Rafraichissement ; Si le temps de calcul est trop long, on désactive le lissage pour 250 ms
If Lissage < 0
StartDrawing(WindowOutput(0))
DrawImage(ImageID(1), 0, 0)
; DrawText(Rayon, Rayon, Str(Temps)) ; Vitesse du code
StopDrawing()
EndIf
Lissage = -250 / #Rafraichissement
Else
StartDrawing(WindowOutput(0))
DrawImage(ImageID(1), 0, 0)
; DrawText(Rayon, Rayon, Str(Temps)) ; Vitesse du code
StopDrawing()
EndIf
; EndIf
If Lissage < 2 ; On décompte avant de réactiver le lissage si il a été désactivé
Lissage + 1
EndIf
EndProcedure
Procedure SetWinTransparency(WinHandle.l, Transparency_Level.l)
If OpenLibrary(0, "user32.dll")
CallFunction(0, "SetLayeredWindowAttributes", WinHandle, 0, Transparency_Level, 2)
CloseLibrary(0)
EndIf
EndProcedure
Charger()
; On récupère la taille de l'écran
If ExamineDesktops()
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
Else
End
EndIf
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 100, 100, "Loupe", #PB_Window_BorderLess | #PB_Window_Invisible) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_TOOLWINDOW | $00080000) ; choix de la barre d'outil réduite
StickyWindow(0, 1)
SetWinTransparency(WindowID(0), 255)
CreateImage(0, 100, 100)
CreateImage(1, 100, 100)
LoadPackIcon(?IconeLoupe)
IconeLoupe = ExtractIcon(16)
If AddSysTrayIcon(0, WindowID(0), IconeLoupe) = 0
End
EndIf
SysTrayIconToolTip(0, "Loupe")
If CreatePopupMenu(0)
OpenSubMenu("Taille")
For n = 50 To 150 Step 10
MenuItem(1000 + n, Str(n * 2) + " pixels")
If n = Rayon
SetMenuItemState(0, 1000 + n, 1)
EndIf
Next
CloseSubMenu()
OpenSubMenu("Zoom")
For n = 125 To 300 Step 25
MenuItem(2000 + n, "x" + StrF(n / 100, 2))
If Zoom = n / 100
SetMenuItemState(0, 2000 + n, 1)
EndIf
Next
MenuBar()
MenuItem(1, "Effet loupe")
SetMenuItemState(0, 1, EffetLoupe)
CloseSubMenu()
MenuBar()
MenuItem(0, "Quitter")
Else
End
EndIf
PreCalcul()
Dimension()
DeplaceLoupe()
HideWindow(0, 0)
SetTimer_(WindowID(0), 1, #Rafraichissement, 0)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
Case 0
Event = #PB_Event_CloseWindow
Case 1
EffetLoupe = 1 - EffetLoupe
SetMenuItemState(0, 1, EffetLoupe)
PreCalcul()
Default
If EventMenu() > 2000
SetMenuItemState(0, 2000 + Zoom * 100, 0)
Zoom = (EventMenu() - 2000) / 100
SetMenuItemState(0, 2000 + Zoom * 100, 1)
PreCalcul()
ElseIf EventMenu() > 1000
SetMenuItemState(0, 1000 + Rayon, 0)
Rayon = EventMenu() - 1000
SetMenuItemState(0, 1000 + Rayon, 1)
Dimension()
PreCalcul()
EndIf
EndSelect
Case #PB_Event_SysTray
Select EventType() ; Si clic sur icone systray
Case #PB_EventType_LeftClick
DisplayPopupMenu(0, WindowID(0))
Case #PB_EventType_RightClick
DisplayPopupMenu(0, WindowID(0))
EndSelect
Case #WM_TIMER ; on rafraichit l'affichage
Timer = EventwParam()
Select Timer
Case 1
; Affichage
DeplaceLoupe()
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
KillTimer_(WindowID(0), 1)
Sauver()
End
DataSection
IconeLoupe :
Data.l $000007F6, $07F6434A, $C4C90000, $2301DD0E, $23102091, $51822302, $1A122404, $610A3688, $110C600C, $CA114084, $40457028, $06A00046
Data.l $A3F48A00, $28FA40C8, $8D201102, $56005390, $258DC6CA, $D2691269, $2D03D2E6, $633F5C7E, $08122502, $04833120, $45A23230, $559AC209
Data.l $E86C10CC, $C3D893FD, $688C580C, $55B268D1, $73F2319A, $0D1644B2, $ACC053EB, $C74760C5, $DB3D6622, $389982C0, $D576F27F, $0366E8EE
Data.l $CB183078, $A5523238, $36EA2B4C, $E9C43D76, $A6B38B94, $4B00A51D, $693C1976, $9B028BD3, $AC5B711D, $6BEDB6D9, $A2D7DD4E, $2E35D2DB
Data.l $FEA09AC0, $2DB640A2, $3B0966DD, $95D19CD6, $167AB2CE, $43B9E2EF, $C0CDAD15, $A814492F, $5158A1D0, $89169A29, $74E79881, $4387015D
Data.l $C103FFC0, $01430743, $7F8143F1, $1025F89F, $22E387FE, $174C4930, $5A168D1B, $854B7137, $7C04E1A1, $31773895, $E0236489, $09424223
Data.l $53584442, $885060C0, $7FE307AC, $848729C8, $992B487F, $C849B096, $59C84252, $E4112835, $0CD61332, $68D2A072, $B320B908, $0123AB8A
Data.l $3298269C, $15845AC4, $340A943F, $779C3FF2, $AE48B91C, $B66E8F35, $F0E918CE, $0E7EDF75, $59C92ED7, $E4A95ED8, $07514322, $4F78B842
Data.l $F6E86885, $9D3D0247, $5FF75D5C, $37F78B36, $B47927CD, $8B676B82, $75B77517, $97127743, $2DE6F5B3, $29905E3D, $CBA1DCE5, $281A7298
Data.l $00480D8A, $C67DE9FF, $146FA380, $B2FDCAF3, $0B478188, $7EB47678, $87B5CF5F, $A0D2F9C4, $C6889FB9, $94AD1396, $472F8C18, $97E6451D
Data.l $CCD08CFB, $EFB177FF, $BB9CDBCA, $F024D6A2, $ECD62D9B, $AE632225, $20D2DF2D, $74731964, $399E8640, $943038C6, $BA7B71DC, $1E607FF2
Data.l $B89BB95E, $6E874837, $74BA47F7, $1E427343, $6407B9AC, $98942B0C, $F3CC495C, $B573D5CD, $FFFAE701, $F15E84C6, $E877FB2B, $B7B98E96
Data.l $945F758A, $D5A0CA65, $33892093, $8B9EFF20, $CF13B12B, $91B907A5, $DA39ACE7, $23D173CC, $9942E86E, $B6427895, $00496A02, $2631BD2B
Data.l $62F0ABC0, $8A80E023, $8A6A1983, $706024C0, $80A4EF60, $00112180, $FC45063E, $8F34FC25, $22002029, $00006B11
Data.b $00, $00
EndDataSection
Dernière modification par Le Soldat Inconnu le mar. 05/mai/2009 20:29, modifié 4 fois.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Ce dernier code me prend 13 en proce et 7.2mo de mémoire.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
j'ai encore trouvé quelque petit truc, ça devrait être encore plus rapide (test de vitesse sans debugger, ça bouffe beaucoup sur ce type de programme)
chez moi, ça n'utilise pas du tout le processeur, même en grande taille
il ne manque que la souris dans la loupe. mais la, je vois pas trop comment faire. hormis une image de souris basique.
ça ne suivra pas l'état de la souris (sablier, sélecteur de texte, souris avec forme perso, etc ... )
chez moi, ça n'utilise pas du tout le processeur, même en grande taille

il ne manque que la souris dans la loupe. mais la, je vois pas trop comment faire. hormis une image de souris basique.
ça ne suivra pas l'état de la souris (sablier, sélecteur de texte, souris avec forme perso, etc ... )
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Non, franchement c'est propre; tu peux à la rigueur enlever la condition if lissage>0 de l'intérieur des boucles. Même si ça t'oblige à doubler le code des boucles (ou à en faire une procédure ou une subroutine), au mieux tu enlèves 90000 (300*300) conditions, ce qui n'est pas négligeable.
Après on pourrait optimiser avec de l'assembleur et tout ça, par ex pour virer les multiplications, mais franchement ton code y perdrait en lisibilité et en portabilité, ce serait dommage.
Après on pourrait optimiser avec de l'assembleur et tout ça, par ex pour virer les multiplications, mais franchement ton code y perdrait en lisibilité et en portabilité, ce serait dommage.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
j'ai une icône plus zoli (voir code plus haut) et j'ai mis un exe sur mon site 
Djes :
j'ai ajouté la modification du If, je n'y avait pas pensé, merci

Djes :
j'ai ajouté la modification du If, je n'y avait pas pensé, merci
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]