peterheid
Goto Top

Hochzeitsspiel: Fotos aufdecken

Für eine Hochzeit möchte ich Bilder mit einem Beamer an die Wand werfen. Der ist ohnehin vorhanden. Das klappt auch so - rein technisch.

Jetzt möchte ich verschiedene Bilder an die Wand werfen und diese nur Stück für Stück aufdecken, damit diese erraten werden können.

Mit Excel klappt das. Jedes Bild auf eine Tabelle & dann mit dem Tastatur-Shortcut jeweils die nächste Tabelle anwählen, welche dann das weiter aufgedeckte Foto präsentiert.

Jedoch ist das schon für mehre Fotos recht aufwändig. Der Gag an der Sache soll sein, dass die Fotos erst wenige Minuten vor dem Spiel erstellt werden. Da bleibt dann nur wenig Zeit um die gesamten Exceltabellen so zu erstellen.

Gibt es für so etwas ein fertiges Tool? Wo ich quasi meine Fotos einfügen kann und die dann nach und nach aufgedeckt werden? Das soll aber in Etappen passieren nicht einfach eine Animation und das Bild ist dann da.

Content-Key: 5490328352

Url: https://administrator.de/contentid/5490328352

Printed on: April 19, 2024 at 12:04 o'clock

Mitglied: 5175293307
Solution 5175293307 Jan 19, 2023 updated at 21:10:10 (UTC)
Goto Top
Member: Crusher79
Crusher79 Jan 19, 2023 at 21:11:30 (UTC)
Goto Top
Hallo,

mit Excel? Ich kenne keine Software. Wenn es immer die gleichen Ausschnitte sein dürfen ggf. mit Tool mergen?

Du hast ka 20 Masken, die es abdecken. Die auf die 20 Einzelbilder legen und fertig. Wenn die Transparent sind, scheint über Alpha Kanal immer nur der Bereich durch.

Batch Merge? Würd es mal googlen. PowerShell wäre auch denkbar. Dann geht es vollautomatisch. Der Nachteil wäre nur, dass die Ausschnitte bei jeden Bild gleich sind. Bis alles aufgedeckt ist. Könnte man mit 2-3 Variationen etwas auflockern.

Da du am Ende 20 Einzelbilder mit Ausschnitten hast, kannst du es mit jedem Tool irgendwie steuern. selbst die Windows Foto Show kann man ja so durchscrollen. Oder eben alles schnell auf Powerpoint ziehen.

Die Masken kannst du ja vorher in Ruhe erstellen. Durchnummerieren und fertig. Mergen von 2 Dateien mal Anzahl x sollte in ein paar Sekunden durch sein.

mfg Crusher
Member: em-pie
em-pie Jan 19, 2023 at 21:19:17 (UTC)
Goto Top
Moin,

Nimm PowerPoint.

Nen Haufen weißer Felder, die als Animation „Ausblenden“ bei klick haben.

Das aufzudeckende Foto kommt in den Hintergrund und kann ja schnell eingefügt werden.

Die Aufdeckreihenfolge kannst du für jede Folie ja dann ändern…
Member: Crusher79
Crusher79 Jan 19, 2023 updated at 21:27:50 (UTC)
Goto Top
Zitat von @em-pie:

Moin,

Nimm PowerPoint.

Der Nachteil ist nur, dass man PP braucht. Kackt an so einen Abend der Lappi ab, war es das.

Mit 20 Einzelbildern könnte jeder der den Beamer erreicht die Präsentation anstoßen. Viele Beamer haben ja auch WLAN und Einzelbildmodus sollte kein Problem sein. Hab nur noch nie einen mit Handy verbunden.

Naja wenn die Technik versagt könnte er ja noch umschwenken: Der Maler aus Paris. Oder die Glocken von Rom... face-big-smile


Nein nochmal zurück: Windows Update, PP, Bluescreen. Gut viele haben ja Laptops. Ggf. wäre er den Abend nicht der Einzige. Einbilder hätte nur den Vorteil dass man mit den trivialsten Bildbetrachtern das im Vollbild an die Wand bekommt.


Aber dennoch +1 für PP.

PS: Mein Beispiel hinkt aber auch. Er braucht ja ein Gerät um die Bilder zu erstellen... Also doch wieder "Glocken von Rom"
Member: em-pie
em-pie Jan 20, 2023 at 06:24:54 (UTC)
Goto Top
Der Nachteil ist nur, dass man PP braucht. Kackt an so einen Abend der Lappi ab, war es das.
Und wenn die Glühlampe im Beamer knackt, war es das auch…
Man kann ja nen zweiten Laptop einpacken.
Member: ElCativoGER
ElCativoGER Jan 20, 2023 at 11:20:53 (UTC)
Goto Top
Alternativ wäre eine Diashow mit Screenshots möglich.
EIN BISSCHEN UMSTÄNDLICH.. aber wäre eine Notlösung, wenn PP nicht geht

;)
Member: colinardo
Solution colinardo Jan 22, 2023 updated at 17:17:44 (UTC)
Goto Top
Servus.
Mal schnell mit Powershell ne kleine Basis-App zusammengelötet wenn man Powerpoint nicht nutzen mag. Kann sich dann jeder nach Gusto anpassen/erweitern.

screenshot

screenshot

back-to-topScript

# hide console
Add-Type -Memberdefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);' -Name window -Namespace W32  
[void][W32.Window]::ShowWindow((Get-Process -id $pid).MainWindowHandle, 0)

# generate main form
function GeneratePuzzleForm {
    param(
        # define main window title
        [string]$windowtitle = 'Image Puzzle'  
    )
    Add-Type -A System.Windows.Forms
    Add-Type -A System.Drawing
    Add-Type –MemberDefinition '  
        [DllImport("Shell32.dll", EntryPoint = "ExtractIcon")]public static extern int ExtractIcon(IntPtr hInstance,string sFile, int iIndex);  
        [DllImport("Shell32.dll", EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]public static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons);  
    ' -name icon -namespace w32 -EA SilentlyContinue  

    $global:image = $null
    $global:partimage = $null
    $global:imagedivider = 8
    $global:graphics = $null
    $global:partsize_h = 0
    $global:partsize_v = 0
    $global:pos = 0
    $global:timerinterval = 1000
    
    # create some icons
    $icon_play = [System.Drawing.Image]::FromStream((New-Object System.IO.MemoryStream (,([Convert]::FromBase64String('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAB1FBMVEUAAADJ3eWxx9wARIRYhrGIqccAE2OHqcbS5OoYVpB9osCBpMKxx9qduNFQgaz///9aiLKQr8uQrsmOrcjh6fLb5/G0yNyJqcgAMnbN3+cfWZB1lLaHqcWFqMXQ3uzj7vXd6vLL2+qnwNd3ncCUs88AACt/o8J6oMHP3+vU4+/E2OfM4e3I3Omyyt6Ts81cibJwkrVwmLtrlLnC1eXG3Oq30uOty+CgxNmnyN6lw9mYt9GDpcQ3aJxukbZsk7llj7a60eG00eKew9qbwNiNttF8qsp7p8eIrMmOrMmMqcZvkLRfibZrlbhkj7WuydylyN2RudOCr813qMlwocRklblai7R9osN9mLdffaRqlLhijrWmw9qUutV+rcx2qclonMBZj7hllbt4mrtlhaxLbJhUYI1slbhgjbOZudODrs5xocRgk7pfkrhzmr1xkLNWdZ81VYdmhKtKa5VulLhhirGNr8xsmb1ejbZrlbt1lbdjgKZGZpQQPHdylLdghqx4m71kjbR1lbhtia1Vcp0oSXxrh6gAHlyAn75uhqplfKN9mbp1j7FjfqQ6WoonS4EOOnZld51hdJpthKhTb5kFK2hgeaAAACGLobwRMmwAA00UN3EoTYERaSCMAAAAnHRSTlMAAQcEAgELCAIBCWPunC4DCAMMhf//+HoLBgQBC33+6///1U8JAQyB//n/8///sDAGC3//8P//+/j/9IMOAQyA//b/+P//9P//yioBC37/8v//+/3/+uz/ZQyA//X++P/+9f//dgILf//x///3/v++MgYBDIH/+Pz2/+hlBgt9/u3//6UeBgQBDIT//9NGCQIJZ+twCwgBAQEKBgPejdSuAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA7UlEQVR42jWPZVNCARBFj91gi1godiKKrdiK3Z3YAiYWBih2YAf6Z30P9H7ae+bs7CyAB55e4A0+/MUX/MA/wN0CCQoOkSANhTAXCCciMio6RkasHOIEEE9CYpIiOUUJqWmikU5GZlZ2Tm5efgGoBFCIuqhYU1JaVl5RWUU11KCtratvaGxqbmnVtbVDB51d3T29ff0Dg0PDI8LKKGPjE5NT0zOz+rl5FmCRpeWVVYPRtLa+weYWbGPe2d3bP7AcwpF49pgTq+30zH7OxSVXArjm5vbu/gEc8CgaTzy/vL7x/sHn1/+3TviGH9f8C5SiLzsD+pIlAAAAAElFTkSuQmCC')))))  
    $icon_stop = [System.Drawing.Image]::FromStream((New-Object System.IO.MemoryStream (,([Convert]::FromBase64String('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAC0FBMVEUAAAAqAAD///+ffX+7pqjFpqfPsLHPra/CnqCvm55/Z2v///8AAABqUlTUwsxSAADHr7DZuLnnr6/vqKnumJfsjY3tjIzji4vQm5ylkZQoAABIRETl399uKCPZwL/ww8PxpaTvoJ/ok5PnjY3kg4PhcXHiZWTlVlXdhYasmJsvAADR7e7Cp6jvwcHtmprpnZ3ojIzngoLlc3PjZmbhYWHfVFTaVlbeMS/afX6gjI6YdXbVsrLwn5/nmJjskJDolJTljIzjg4Pgenrfb2/aZ2bgTEzXTU7jPDzGj5BwWly0lpjmp6jskI/mh4flg4P7+Pn7/v72+Pjw9vbt7u7j7u7UT0/cOzzaODfbbG6Yhom7k5TumJnjfX3ld3fidXX48fH08/Pv6+vo6Oji3d3a29vPNDTXHBzRHRzdNDWhd3rEl5rsgoHhcHDkZ2fdYmLy7ezv8/Po6eni5ubc29vW29vOOzvZGxvSKirgKiuqd3nCkZPpbm/cZGTeSEjVOzvq4uLi3t7c3NzW0dHQ09PPPT3aISHTLy/hNTSre360hIbnb3DXPT3XKivUMTHn4uLj6enc3t7W3NzPz8/L0tLSQ0PbLy/WMTHiTEyee36jhYfaZmfVGxvVIiLRJSXazc3Z0NDUyMjQyMnNwMDKycnTQ0PcNzfcNTTZb2+KeXx/YGLEf4HcFBPPJSXYHR3NHh7PIyPPKirRLy/UMjLSNTXgPj7XR0fnQ0O8kJJeQUOfgYTTaWvXAADQJyfYJyfaLS3bKyvcMDDdPDzeQkLYSUnhMjLbkJGKd3kAAACY2tsrAACoiozVb3DcGxvWGhnTIyPVMTHXNzfWNTXbOTnlSEjflpeai4wbAADb//8eSUe1x8Y5AACgf4DGh4nYY2TjT0/jQkPkSkrpY2TTo6SUfX4SAAAeBwXp//98RUahgoSugoS1gYO3hoexiYuojo5qOzsAAABTamnSAAAA8HRSTlMAAQJGoe79/u+lSgEBAQMPp///////////rhQCBQvI//f3/f///ff3/9ARA6j/8v//////////8v+0Qf/2//z9/v///v37//X/UKf9+f39//////////36/b3r//3//////////////v/6/////////////////////////////////////////+v//f////////////////un/fn9/v/////////9+/3EQf/2//v9//////36//X/WKj/8v//////////8/+/AwULx//29/7///749v/ZFwIBAw+p/////////7obAwJKqPP///exVAKfU1b0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABG0lEQVR42gEQAe/+AAABAgADBAUGBwgJCgALDAAADQ4PEBESExQVFhcYGRoCGwAcHR4fICEiIyQlJicoKSorAAAsLS4vMDEyMzQ1Njc4OQAAOjs8PT4/QEFCQ0RFRkdISQBKS0xNTk9QUVJTVFVWV1hZAFpbXF1eX2BhYmNkZWZnaGkAamtsbW5vcHFyc3R1dnd4eQB6e3x9fn9igIGCg4SFhoeIAImKi4yNjo+QkZKTlJWWl5gAmZqbnJ2en6ChoqOkpaanqACpqqusra6vsLGys7S1tre4AAC5uru8vb6/wMHCw8TFxscAyMnKy8zNzs/Q0dLT1NXW1wDY2drb3N3e3+DhJOLj5AvlAAAM5gDn6Onq6+zt7gAA7wBSZnCoKaI9jAAAAABJRU5ErkJggg==')))))  
    $icon_files = [System.Drawing.Icon]::ExtractAssociatedIcon("$env:Systemroot\explorer.exe")  

    # create timer control
    $global:timer = New-Object System.Windows.Forms.Timer -p @{
        Interval = $global:timerinterval
        add_Tick = {
            if ($global:pos -le $global:random.Count){
                $pos_x = ($global:random[$global:pos] % $global:imagedivider) * $global:partsize_h
                $pos_y = [math]::Floor($global:random[$global:pos] / $global:imagedivider) * $global:partsize_v
                $destRect = [System.Drawing.Rectangle]::new($pos_x,$pos_y,$global:partsize_h,$global:partsize_v)
                $global:graphics.DrawImage($global:image,$destRect,$pos_x,$pos_y,$global:partsize_h,$global:partsize_v,[System.Drawing.GraphicsUnit]::Pixel)
                $pbox.Image = $global:partimage
                $global:pos++
            }else{
                $global:timer.Stop()
                $menu_starttimer.Text = "Start timer"  
                $form.Text = "$windowtitle | (Finished)"  
                $form.Cursor = [System.Windows.Forms.Cursors]::Hand
                $menu_starttimer.Image = $icon_play
            }
        }
    }
    # function to load new image
    function LoadImage(){
        $dlg = New-Object System.Windows.Forms.OpenFileDialog -P @{
            Filter = 'Image (*.jpg,*.png,*.gif,*.bmp) |*.jpg;*.png;*.gif;*.bmp'  
            Multiselect = $false
        }
        if ($dlg.ShowDialog() -eq 'OK'){  
            $global:image = [System.Drawing.Image]::FromFile($dlg.FileName)
            $global:partimage = [System.Drawing.Bitmap]::new($global:image.Width,$global:image.Height)
            [System.Drawing.Graphics]$global:graphics = [System.Drawing.Graphics]::FromImage($global:partimage)
            $global:partsize_h = [math]::Ceiling($global:image.Width / $global:imagedivider)
            $global:partsize_v = [math]::Ceiling($global:image.Height / $global:imagedivider)
            $global:random = 1..($global:imagedivider*$global:imagedivider) | Get-Random -Count ($global:imagedivider*$global:imagedivider)
            $global:pos = 0
            $pbox.Image = $null
            $menu_starttimer.Enabled = $true
        }
        $dlg.Dispose()
    }
    
    # function which starts/stops puzzle
    function TogglePuzzle {
        if (!$global:image){return}
        if (!$global:timer.Enabled){
            $global:timer.Start()
            $menu_starttimer.Text = "Stop timer"  
            $menu_starttimer.Image = $icon_stop
            $form.Text = "$windowtitle | (Running)"  
            $form.Cursor = [System.Windows.Forms.Cursors]::WaitCursor
        }else{
            $global:timer.Stop()
            $menu_starttimer.Text = "Start timer"  
            $menu_starttimer.Image = $icon_play
            $form.Text = "$windowtitle | (Stopped)"  
            $form.Cursor = [System.Windows.Forms.Cursors]::Hand
        }
    }

    #region CONTEXT-MENU CREATION
    
    # create context menu strip control
    $contextmenu = New-Object System.Windows.Forms.ContextMenuStrip
    # menu item entry to choose image with filedialog
    $menu_chooseimage = New-Object System.Windows.Forms.ToolStripMenuItem -P @{
        Text = "Choose image"  
        Image = $icon_files
        add_Click = {
            LoadImage
        }
    }
    # menu item entry to start timer
    $menu_starttimer = New-Object System.Windows.Forms.ToolStripMenuItem -P @{
        Text = "Start timer"  
        Enabled = $false
        Image = $icon_play
        add_Click = {TogglePuzzle}
    }
    # menu item entry to select timer interval
    $menu_interval = New-Object System.Windows.Forms.ToolStripTextBox -P @{
        ToolTipText = "Timer Interval in ms."  
        Text = $global:timerinterval
        add_KeyUp = {
            [int]$result = 0
            if ([int]::TryParse($menu_interval.Text,[ref]$result)){
                $global:timer.Interval = $result
                $global:timerinterval = $result
            }
        }
        add_KeyDown = {
            if ($_.KeyCode -lt [System.Windows.Forms.Keys]::D0 -or $_.KeyCode -gt [System.Windows.Forms.Keys]::D9){
                if ($_.KeyCode -lt [System.Windows.Forms.Keys]::NumPad0 -or $_.KeyCode -gt [System.Windows.Forms.Keys]::NumPad9){
                    if ($_.KeyCode -ne [System.Windows.Forms.Keys]::Back){
                        $_.SuppressKeyPress = $true
                    }
                }
            }
        }
    }
    # menu item entry to set block size
    $menu_divider = New-Object System.Windows.Forms.ToolStripTextBox -P @{
        ToolTipText = "Image size is divided by this number to define block size (higher number = smaller blocks)"  
        Text = $global:imagedivider
        add_KeyUp = {
            [int]$result = 0
            if ([int]::TryParse($menu_divider.Text,[ref]$result)){
                $global:imagedivider = $result
            }
        }
        add_KeyDown = {
            if ($_.KeyCode -lt [System.Windows.Forms.Keys]::D0 -or $_.KeyCode -gt [System.Windows.Forms.Keys]::D9){
                if ($_.KeyCode -lt [System.Windows.Forms.Keys]::NumPad0 -or $_.KeyCode -gt [System.Windows.Forms.Keys]::NumPad9){
                    if ($_.KeyCode -ne [System.Windows.Forms.Keys]::Back){
                        $_.SuppressKeyPress = $true
                    }
                }
            }
        }
    }
    # menu item entry to exit application
    $menu_exit = New-Object System.Windows.Forms.ToolStripMenuItem -P @{
        Text = 'Exit'  
        add_Click = {
            $form.Close()
        }
    }
    # add context menu items to toolstrip
    [void]$contextmenu.Items.AddRange(@(
        $menu_chooseimage,
        $menu_starttimer,
        (New-Object System.Windows.Forms.ToolStripSeparator),
        (New-Object System.Windows.Forms.ToolStripLabel -P @{Text = "Timer interval (ms):";ForeColor = [System.Drawing.Color]::Brown}),  
        $menu_interval,
        (New-Object System.Windows.Forms.ToolStripSeparator),
        (New-Object System.Windows.Forms.ToolStripLabel -P @{Text = "Image divider";ForeColor = [System.Drawing.Color]::Brown}),  
        $menu_divider,
        (New-Object System.Windows.Forms.ToolStripSeparator),
        $menu_exit
    ))
    #endregion CONTEXT-MENU-CREATION

    # main form control
    $form = New-Object System.Windows.Forms.Form -P @{
        ClientSize = '500,500'  
        Text = $windowtitle
        StartPosition = 'CenterScreen'  
        BackColor = [System.Drawing.Color]::Black
        WindowState = [System.Windows.Forms.FormWindowState]::Maximized
        ContextMenuStrip = $contextmenu
        Cursor = [System.Windows.Forms.Cursors]::Hand
        #ControlBox = $false
        #MaximizeBox = $false
        add_FormClosed = {
            $global:timer.Stop()
            $global:timer.Dispose()
        }
        add_Load = {
            [System.Windows.Forms.MessageBox]::Show("Right click the form to control application options.`nWhen image has been selected you can start/stop timer with single left click on the image.","Info",0,64)  
        }
    }
    # picturebox control
    $pbox = New-Object System.Windows.Forms.PictureBox -P @{
        Dock = 'Fill'  
        Image = $global:image
        SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::Zoom
        add_Click = {
            if ($_.Button -eq 'Left'){  
                TogglePuzzle
            }
        }
    }
    # add controls to form
    $form.Controls.AddRange(@($pbox))
    # show form
    [void]$form.ShowDialog()
}
GeneratePuzzleForm
Viel Spaß damit.

Grüße Uwe
Member: em-pie
em-pie Jan 22, 2023 at 17:27:55 (UTC)
Goto Top
@colinardo
Geiler Typ 😉
Member: Crusher79
Crusher79 Jan 23, 2023 at 09:06:16 (UTC)
Goto Top
Zitat von @colinardo:

Servus.
Mal schnell mit Powershell ne kleine Basis-App zusammengelötet wenn man Powerpoint nicht nutzen mag. Kann sich dann jeder nach Gusto anpassen/erweitern.
Viel Spaß damit.

Grüße Uwe

Dich muss man auch bestimmt in den Urlaub oder Freizeitausgleich prügeln, was?

I am Programmer,I have no life.
Member: colinardo
colinardo Jan 23, 2023 at 09:22:54 (UTC)
Goto Top
Zitat von @Crusher79:

Dich muss man auch bestimmt in den Urlaub oder Freizeitausgleich prügeln, was?

I am Programmer,I have no life.
Eigentlich nicht, in den Urlaub reichen 20 Schritte aus dem Camper, schon lacht mir die Januar Sonne und das Meer der Algarve entgegen 😉. Bin nun seit einigen Monaten als "digital nomad" unterwegs, kann ich nur empfehlen 👍.
Member: Crusher79
Crusher79 Jan 23, 2023 at 09:25:30 (UTC)
Goto Top
Zitat von @colinardo:

Eigentlich nicht, in den Urlaub reichen 20 Schritte aus dem Camper, schon lacht mir die Januar Sonne und das Meer der Algarve entgegen 😉. Bin nun seit einigen Monaten als "digital Nomad" unterwegs, kann ich nur empfehlen 👍.

Hat was. Habs mal im TV wegen Corona gesehen. Diese Progger "Dörfer". Wo in Viertel nur Freelancer etc. untergebracht waren. Mit allen Freiheiten.

Naja wegen Family nicht möglch. Wobei die sind 3 Wochen zur Kur. Kommen Mittwoch wieder. Gut, das Wetter hier in Niedersachsen ist halt nicht so schön. face-big-smile Aber ansonsten....