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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5490328352
Url: https://administrator.de/contentid/5490328352
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
11 Kommentare
Neuester Kommentar
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
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
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...
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"
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
Mal schnell mit Powershell ne kleine Basis-App zusammengelötet wenn man Powerpoint nicht nutzen mag. Kann sich dann jeder nach Gusto anpassen/erweitern.
Script
# 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
Grüße Uwe
@colinardo
Geiler Typ 😉
Geiler Typ 😉
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
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.
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 👍.Dich muss man auch bestimmt in den Urlaub oder Freizeitausgleich prügeln, was?
I am Programmer,I have no life.
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 👍.
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. Aber ansonsten....
Serie: Hochzeitsspiel - Foto aufdecken
Hochzeitsspiel: Fotos aufdecken11