Pixster - Bildanzeiger

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

erwe
Posts: 4
Joined: 22 Jun 2020, 03:26

Re: Pixster - Bildanzeiger

22 Jun 2020, 03:42

Moin, Moin,

SUPER ist das Script! Respekt!

2 Anmerkungen:
Das Bild kann nicht geladen werden (Ist aber ein Super Beispiel mit Transparenz!)
Die Gdip_All 1.45 etnält keine Resize-Funktion.
Ich vermute Du verwendest die AHK GDI+ LIBRARY EXTENDED COMPILATION in Version 1.84.
Die tat es bei mir.

Wäre schön, wenn Du es oben verlinkst/aktualisierst. Danke.

Wunschliste: Diashow mit mehreren Bildern, oder einem Verzeichniss, Parameter für Aufruf…

Eins noch: Wenn ich ein Full-HD-Bild anzeigen lasse, scheint das ein (1) Pixel kleiner zu sein.
Wo kann ich das abstellen, das das Bild wirklich Vollbild ist?

Danke sehr.

LG, erwe
User avatar
moefr01
Posts: 115
Joined: 25 Nov 2015, 09:01
Location: Germany

Re: Pixster - Bildanzeiger

26 Jun 2020, 04:58

Pixster 1.3 ... neue Version!
ich habe einmal den Code um ein paar Darstellungsoptionen erweitert (Ergebnis siehe Anhang).

Bilddatei-Doppelklick: normale Bildanzeige ohne Schnickschnack aber mit Transparenz (png, gif, tiff, ico)
Bilddatei-Shift + Doppelklick: zeigt das Bild mit einen Rahmen inkl. Schatten
Bilddatei-CapsLock ein + Doppelklick: zeigt das Bild mit unscharfer Transparenz
Die neuen Optionen sind auch kombinierbar!

Die ursprüngliche Darstellung mit den runden Ecken habe ich gänzlich deaktiviert, da es mit den neuen Optionen Probleme erzeugte.
Desweiteren habe ich den link für die Gdip_All.ahk korrigiert (@erwe Danke für den Hinweis) = 1.84 von mmikeww und alle beteiligten Coder erwähnt.
Was mir noch etwas Kopfzerbrechen macht ist Option mit CapsLock, da man den Status dieser Taste gerne vergisst und es zu ungewollten Aktionen führt ... aber vielleicht hat ja jemand einen konstruktiven Vorschlag parat. Der Versuch diese Option mit der STRG-Taste zu lösen scheiterte an der Ausführung des Doppelklicks auf eine Bilddatei.
:wave: moefr01

Code: Select all

;==============================================================================================================================================
; PIXSTER .......: Bilder mit Verpixelung und Ausblendung anzeigen. Bilder > Monitorauflösung werden auf max. Breite/Höhe verkleinert
;                  unterstützte Dateitypen: bmp, *gif, jpg, *png, *tiff, *ico   (* = transparent)
; NEU:             Rahmen mit Schatten                            ... > Shift + Doppelklick Bilddatei
; NEU:             Bildtransparenz unscharf                       ... > CapsLock ein + Doppelklick Bilddatei
; NEU:             Rahmen mit Schatten + Bildtransparenz unscharf ... > CapsLock + Shift + Doppelklick Bilddatei
; GEÄNDERT:        abgerundete Fensterecken deaktiviert, wegen Darstellungsproblem in Kombination mit den Neuheiten
;==============================================================================================================================================
; AHK Version ...: 1.1.32.0 x64 Unicode
; Win Version ...: Windows 10 Professional x64 / 1909 Build 18363.900
; Version .......: v1.30
; Modified ......: 2020/06/26
; Author(s) .....: moefr01, just me, tic, mmikeww, qwerty12, jNizM, Klark92
;==============================================================================================================================================
#NoEnv
#Persistent
#NoTrayIcon
#SingleInstance, Off
SetBatchLines -1
SetWinDelay -1
SendMode Input
SetWorkingDir %A_ScriptDir%
#Include Gdip_All.ahk                       ; v1.84 von mmikeww (Marius Sucan): https://github.com/marius-sucan/AHK-GDIp-Library-Compilation
                                            ; original von tic (Tariq Porter): https://www.autohotkey.com/boards/viewtopic.php?t=6517
If !pToken := Gdip_Startup()
   {
   MsgBox, 48, Gdiplus Fehler!, Gdiplus-Ausführung fehlgeschlagen. Bitte Verfügbarkeit von gdiplus im System sicherstellen!
   ExitApp
   }
OnExit, Exit

;==============================================================================================================================================
file         = %1%                           ; Bilddatei per Doppelklick laden
                                             ; Voraussetzung: Pixster ist kompiliert und standardisiert für o.g. Bild-Dateityp(en)
IfNotExist,  %file%                          ; sonst wird alternativ ahk_logo.png heruntergeladen und angezeigt...
             {
             IfNotExist, %A_ScriptDir%\ahk_logo.png
                         UrlDownloadToFile, https://www.autohotkey.com/static/ahk_logo.png, %A_ScriptDir%\ahk_logo.png
             file = ahk_logo.png
             }
pBitmap      := Gdip_CreateBitmapFromFile(file)         ; Bitmap aus Datei erstellen
Gdip_GetImageDimensions(pBitmap, origW, origH)          ; Bilddimensionen holen
if (origW > A_ScreenWidth) || (origH > A_ScreenHeight)  ; nur wenn Bildgröße > Breite oder Höhe der Bildschirmauflösung ist
   {
   faktorW   := A_ScreenWidth / origW       ; Faktor berechnen aus Breite
   faktorH   := A_ScreenHeight / origH      ; Faktor berechnen aus Höhe
   if (faktorW > faktorH)
      faktor := faktorH
   else
      faktor := faktorW
   sizeW     := origW * faktor              ; neue Bildbreite berechnen
   sizeH     := origH * faktor              ; neue Bildhöhe berechnen
   newBitmap := Gdip_ResizeBitmap(pBitmap, sizeW, sizeH, 0, "7", 0, 1)         ; neue Bitmap mit Größenänderung erstellen
   Gdip_DisposeImage(pBitmap)               ; urspr. Bitmap entsorgen
   pBitmap   := newBitmap                   ; Bitmap aus "resized" festlegen
   origW     *= faktor                      ; urspr. Breite mit Faktor verkleinern
   origH     *= faktor                      ; urspr. Höhe mit Faktor verkleinern
   }
If !pBitmap                                 ; Bitmap-Fehlerabfrage
   {
   MsgBox, 48, Fehler beim Öffnen der Datei!, Das festgelegte Bild kann nicht geladen werden.
   ExitApp
   }
Gui, -Caption +hwndhwnd1 +E0x80000 +LastFound +OwnDialogs +Owner +AlwaysOnTop  ; layered GUI mit handle hwnd1 erstellen
Gui, Show, , Pixster

; NEU: capslock = ein:
; Bildtransparenz unscharf darstellen (blurring) ... EnableBlur: Danke an qwerty12 und jNizM
caps := GetKeyState("CapsLock", "T")
if caps
   BlurBack(hwnd1)

; NEU: shift = gedrückt:
; Bildrahmen mit Schatten erzeugen ... FrameShadow: Danke an Klark92
shft := GetKeyState("Shift")
if shft
   FrameShadow(hwnd1)

;DEAKTIV: WinSet, Region, 0-0 R20-20 w%origW% h%origH%, Pixster  ; Fensterecken abrunden

pBitmapOut   := Gdip_CreateBitmap(origW, origH)         ; Bitmap für die Verpixelung erstellen
hbm          := CreateDIBSection(origW, origH)
hdc          := CreateCompatibleDC()
obm          := SelectObject(hdc, hbm)
G            := Gdip_GraphicsFromHDC(hdc)
UpdateLayeredWindow(hwnd1, hdc, (A_ScreenWidth-origW)//2, (A_ScreenHeight-origH)//2, origW, origH)      ; Fenster zentriert anzeigen
inTile       := 20			                ; Kachel-Startgröße festlegen
outTile      := 1                           ; Kachel-Endgröße festlegen
;==============================================================================================================================================
SetTimer, updateIn, 20                      ; Timer für das Einblenden festlegen
Return
;==============================================================================================================================================
updateIn:                                   ; verpixelt einblenden
if (inTile < 1)
   SetTimer, updateIn, off
Gdip_PixelateBitmap(pBitmap, pBitmapOut, --inTile)
Gdip_GraphicsClear(G)
Gdip_DrawImage(G, pBitmapOut, 0, 0, origW, origH, 0, 0, origW, origH)
UpdateLayeredWindow(hwnd1, hdc)
Return
;==============================================================================================================================================
ESC::
GuiContextMenu:                             ; ESC und Rechtsklick: Timer zum Ausblenden
SetTimer, updateOut, 20                     ; Timer für das Ausblenden festlegen
Return
;==============================================================================================================================================
updateOut:                                  ; verpixelt ausblenden
if (outTile > 20)
   {
   SetTimer, updateOut, off
   Goto Exit
   }
Gdip_PixelateBitmap(pBitmap, pBitmapOut, ++outTile)
Gdip_GraphicsClear(G)
Gdip_DrawImage(G, pBitmapOut, 0, 0, origW, origH, 0, 0, origW, origH)
UpdateLayeredWindow(hwnd1, hdc)
Return
;==============================================================================================================================================
WM_LBUTTONDOWN(wParam, lParam, msg, hWnd)   ; Verschieben per Linksklick... Danke just me!
              {
              static init := OnMessage(0x0201, "WM_LBUTTONDOWN")
              global hwnd1
              if (hWnd = hwnd1)
              DllCall("user32.dll\PostMessage", "ptr", hwnd1, "uint", 0x00A1, "ptr", 2, "ptr", 0)
              }
;==============================================================================================================================================
FrameShadow(handle)
{
  ;Funktion "FrameShadow" von Klark92 (https://www.autohotkey.com/boards/viewtopic.php?f=6&t=29117)
  DllCall("dwmapi.dll\DwmIsCompositionEnabled", "int*", DwmEnabled)
  if !(DwmEnabled)
     DllCall("user32.dll\SetClassLongPtr", "ptr", handle, "int", -26, "ptr", DllCall("user32.dll\GetClassLongPtr", "ptr", handle, "int", -26) | 0x20000)
  else {
       VarSetCapacity(MARGINS, 16, 0) && NumPut(2, NumPut(2, NumPut(2, NumPut(2, MARGINS, "int"), "int"), "int"), "int")   ;werte=1 std
       DllCall("dwmapi.dll\DwmSetWindowAttribute", "ptr", handle, "uint", 2, "ptr*", 2, "uint", 4)
       DllCall("dwmapi.dll\DwmExtendFrameIntoClientArea", "ptr", handle, "ptr", &MARGINS)
       }
}
;==============================================================================================================================================
BlurBack(handle)
{
  ;Funktion "EnableBlur" von qwerty12 und jNizM (https://autohotkey.com/boards/viewtopic.php?t=18823)
  WCA_ACCENT_POLICY := 19
  ACCENT_DISABLED := 0,
  ACCENT_ENABLE_GRADIENT := 1,
  ACCENT_ENABLE_TRANSPARENTGRADIENT := 2,
  ACCENT_ENABLE_BLURBEHIND := 3,
  ACCENT_INVALID_STATE := 4
  accentStructSize := VarSetCapacity(AccentPolicy, 4*4, 0)
  NumPut(ACCENT_ENABLE_BLURBEHIND, AccentPolicy, 0, "UInt")
  padding := A_PtrSize == 8 ? 4 : 0
  VarSetCapacity(WindowCompositionAttributeData, 4 + padding + A_PtrSize + 4 + padding)
  NumPut(WCA_ACCENT_POLICY, WindowCompositionAttributeData, 0, "UInt")
  NumPut(&AccentPolicy, WindowCompositionAttributeData, 4 + padding, "Ptr")
  NumPut(accentStructSize, WindowCompositionAttributeData, 4 + padding + A_PtrSize, "UInt")
  DllCall("SetWindowCompositionAttribute", "Ptr", handle, "Ptr", &WindowCompositionAttributeData)
}
;==============================================================================================================================================
Exit:                                       ; GUI ausblenden, alles zuvor Erstellte entsorgen und Anwendung schließen
Loop, 17									; Ausblenden mit 17-stufiger Transparenz
      {
      trans := 255 - A_Index * 15
      UpdateLayeredWindow(hwnd1, hdc, , , , , trans)
      Sleep, 1
      }
Gdip_DisposeImage(pBitmapOut)
Gdip_DisposeImage(pBitmap)
SelectObject(hdc, obm)
DeleteObject(hbm)
DeleteDC(hdc)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)
ExitApp
Return
Attachments
pixster1.3.png
pixster1.3.png (277.53 KiB) Viewed 1815 times
User avatar
moefr01
Posts: 115
Joined: 25 Nov 2015, 09:01
Location: Germany

Re: Pixster - Bildanzeiger

26 Jun 2020, 05:04

erwe wrote:
22 Jun 2020, 03:42
Moin, Moin,

SUPER ist das Script! Respekt! DANKE

2 Anmerkungen:
Das Bild kann nicht geladen werden (Ist aber ein Super Beispiel mit Transparenz!) ???
Die Gdip_All 1.45 etnält keine Resize-Funktion.
Ich vermute Du verwendest die AHK GDI+ LIBRARY EXTENDED COMPILATION in Version 1.84. JA
Die tat es bei mir. :thumbup:

Wäre schön, wenn Du es oben verlinkst/aktualisierst. Danke. GETAN

Wunschliste: Diashow mit mehreren Bildern, oder einem Verzeichniss, Parameter für Aufruf… War eigentlich nicht meine Intention ... aber mal sehen

Eins noch: Wenn ich ein Full-HD-Bild anzeigen lasse, scheint das ein (1) Pixel kleiner zu sein. Kann ich nicht bestätigen
Wo kann ich das abstellen, das das Bild wirklich Vollbild ist?

Danke sehr.

LG, erwe

Return to “Skripte und Funktionen”

Who is online

Users browsing this forum: No registered users and 19 guests