elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Recopilación de Tutoriales y Manuales del blog ordenados por categorías


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 1258
71  Sistemas Operativos / Windows / Re: Abrir PNG rápido con Chrome aunque esté configurado con Paint. en: 16 Junio 2025, 06:57 am
Código
  1. @ECHO OFF
  2. START /B "" "%ProgramFiles%\Google Chrome\GoogleChromePortable.exe" %*

Le asignas la ruta correcta de tu ejecutable chrome, guardas el código con extensión .bat o .cmd, en el lugar más accesible por ejemplo en tu escritorio, y arrastras el archivo o archivos png a dicho archivo bat/cmd.

Más rápido que abrir un menú contextual de Windows con el botón derecho o que arrastrar un archivo a otro, no sé que esperas encontrar.

Alternativamente puedes crear una asociación de archivo para vincular archivos png con ese script al hacer doble click izquierdo, y modificar el script para que te permita elegir si abrirlo con paint o con chrome, pero tendrías que teclear la opción, gastar medio segundo para darle a una tecla (por ejemplo: 1=abrir con mspaint, 2=abrir con chrome)...

Código
  1. @ECHO OFF
  2.  
  3. ECHO:File(s):
  4. FOR %%# IN (%*) DO (SET /A "ARG_IDX+=1" & CALL ECHO: %%ARG_IDX%%: %%#)
  5. ECHO:Select how to open the file(s):
  6. ECHO:  [1] Open with Microsoft Paint
  7. ECHO:  [2] Open with Google Chrome
  8. ECHO:  [0] Close
  9.  
  10. CHOICE /C "012" /M "Choose an option: "
  11. IF %ERRORLEVEL% EQU 2 (
  12.    FOR %%# IN (%*) DO (START /B "" "%Systemroot%\System32\mspaint.exe" %%#)
  13. ) ELSE IF %ERRORLEVEL% EQU 3 (
  14. START /B "" "%ProgramFiles%\Google Chrome\GoogleChromePortable.exe" %*
  15. )



Sin embargo, el uso de Batch-script implica limitaciones técnicas con el uso de caracteres reservados (ej. "&") si el nombre del archivo los incluyese. La solución óptima es utilizar otro lenguaje más apropiado, como PowerShell, pero por naturaleza eso tardaría bastante más en inicializarse que abrir un menú contextual de Windows...

Si el script lo escribieras en otros lenguajes integrados (built-in) en Windows, como VBS (Visual Basic Script) o Microsoft JSscript (para Windows Script Host), sería prácticamente tan instantáneo como es en Batch-script. Esto es un código muy fácil, sin complejidad, así que puedes pedirle el código equivalente en otro lenguaje a ChatGPT, a excepción de replicar el comportamiento del comando CHOICE de Batch-script, que requeriría bastante más código en similitud a un bucle tipo DO WHILE junto a un bloque tipo SELECT CASE.
72  Foros Generales / Foro Libre / Re: No se si quedo claro el suceso del apagon electrico en España en: 15 Junio 2025, 02:48 am
¡Hola! Quiero dejar claro que no estoy aquí para defender teorías conspirativas, opiniones personales ni ideologías políticas desde una postura fanática (como pueden hacer otros). Prefiero atenerme a los hechos. Y los hechos son los siguientes: ya se han filtrado dos audios de RED que han sido emitidos en los informativos españoles, y en ellos se confirma —una vez más— lo que muchos veníamos advirtiendo: una absoluta falta de competencia en la gestión energética, derivada principalmente de la escasa presencia de energía nuclear y una dependencia excesiva de las energías renovables (por no llamarlas energías intermitentes, que es lo que son, y, por ende, inestables).

Para ser más precisos, en los audios se menciona de forma explícita la carencia de energía nuclear como uno de los principales problemas, y se señala también que las fluctuaciones energéticas están directamente relacionadas con la inestabilidad de las renovables, en concreto, la solar. Se escucha claramente a los propios trabajadores decir: "Sí, es la solar".

EDITO: He subido el vídeo con esos fragmentos del informativo de Telecinco a mi canal de YouTube (sin ningún tipo de monetización), ya que resulta bastante difícil de localizar en los canales oficiales:



Con esta filtración en la mano, junto a toda la información que se ha difundido desde el día del apagón en redes sociales (como X/Twitter) y en medios alternativos (como Telegram) por parte de trabajadores y profesionales del sector nuclear en España —quienes también han señalado estos mismos fallos estructurales—, queda en manos de cada uno decidir qué creer. Al fin y al cabo, ustedes son adultos.



Respecto a por qué un gobierno podría tener interés en ocultar esta información al público, el motivo más probable salta a la vista. Pero si lo dijera abiertamente, podría correr el riesgo de que este post fuera censurado por entrar en valoraciones geopolíticas y factores económicos. Ya sabemos que ciertas posturas ideológicas no son bien recibidas por algunos miembros del staff, especialmente si critican a determinada corriente política.

Y, para que quede clara una última cosa, yo personalmente prefiero que los verdaderos motivos del apagón se sigan ocultando, y que la gente siga con sus teorías conspirativas de ataques rusos y demás. Por una vez en la vida, prefiero que las altas esferas sigan mintiendo, engañando y confundiendo a la ciudadanía con este asunto del apagón mientras le echan la culpa de todo a Putin, Franco o Abascal. Lo digo totalmente en serio. Así al menos los españoles nos ahorraremos ver subidas disparatadas en nuestros impuestos, por que, no os quepa duda, si se descubriese que no fue un ciber ataque sino simple y llana incompetencia (cosa que ya ha sido demostrada por audios como estos, pero parece que sigue sin tener repercusión a nivel internacional, en la toma de responsabilidad política de asuntos exteriores), seríamos los contribuyentes quienes tendríamos que pagar hasta el último céntimo de las indemnizaciones multimillonarias derivadas de esta supuesta incompetencia a los dos países directamente afectados: Francia y Portugal, a base de más campañas de recaudación de impuestos, por si no tuviéramos que pagar suficiente ya...

PD: Si este mensaje es censurado por compartir hechos emitidos en medios oficiales españoles y por enlazar el vídeo donde se demuestra, pues qué se le va a hacer. Ya no me sorprende nada.

Atentamente,
Elektro.
73  Informática / Software / Re: ¿Programa que ponga un gif delante de un programa, sin tener ventana? en: 14 Junio 2025, 09:39 am
¿Programa que ponga un gif delante de un programa, sin tener ventana?

Me ceñiré estrictamente a la pregunta formulada en el título.

El siguiente programa - por línea de comandos - lo desarrollé en el año 2013, cuando estaba empezando el aprendizaje de programación VB.NET. Esto significa que la estructuración del código fuente es una absoluta porquería en la que sigo malas prácticas de programación y metodologías poco óptimas (no tengo ganas de reescribir todo el código desde cero), con sus muchos defectos y limitaciones. Pero funciona.

El programa provee parámetros para indicar el tamaño y posición de la imagen a mostrar, así como la duración, poder hacer click para cerrar la imagen, poner la imagen sobre todas las demás ventanas (top most), y la posibilidad de usar un efecto de transición fade-in/fade-out para mostrar la imagen:


Recientemente (hace 10 minutos) actualicé el código para añadirle soporte para imágenes GIF animadas:



PD: en principio no tengo intención de corregir nada más en el código fuente ni añadirle nada más. Está para volver a hacerlo todo desde cero.

La versión inicial la publiqué en este foro pero el enlace de descarga está caído:

Atentamente,
Elektro.
74  Informática / Software / Re: Ahora otro problema al iniciar sección en outlook en: 12 Junio 2025, 05:28 am
Será un problema de microsoft outlook ? A ver si comenta mas gente que le pase lo mismo con Outlook

Creo que puedes descartar que sea un problema generalizado. Mi cuenta principal es de dominio hotmail y accedo a Outlook a diario vía navegador web en el PC, sin problemas extraños.



Según pone en el mensaje te manda a este enlace:
https://support.microsoft.com/es-es/account-billing/error-400-al-iniciar-sesi%C3%B3n-7af27146-7624-4397-a374-6f8eae4367fe

Traducido pone esto: Inténtalo de nuevo con otro dispositivo, usa una VPN u otro método de autenticación para iniciar sesión.

Pero yo no veo que me salga código de error 400 como dice en ese enlace.

Aunque el mensaje no menciona directamente el error 400, te está sugiriendo las soluciones típicas para ese código de error: "Intenta con otro dispositivo, usa una VPN u otro método de autenticación". Además, incluye un enlace a la página de soporte del error 400, donde se repiten esas mismas recomendaciones.



@El_Andaluz, determinar la causa de este problema que sufres puede que sea imposible de esta manera, desde un foro sin poder examinar a fondo tu sistema operativo. No esperes que lo que te diga sirva de mucha ayuda, pero lo intentaré empezando por unas sugerencias básicas:

1. Probar un navegador web distinto

Mencionaste que utilizas Chrome, bien, entonces prueba a iniciar sesión en Outlook usando Firefox.

Esta es la medida principal por encima de todas las demás para poder descartar facilmente que se trate de un problema específico relacionado con la configuración de tu navegador Chrome. Pero para poder descartarlo de forma efectiva es fundamental que uses un navegador diferente sin ninguna configuración de usuario previa (recién instalado, vaya).

⚠️ Asegúrate de tener tus navegadores actualizados a la última versión para maximizar el soporte y estabilidad.

2. Borrar caché y cookies

( Puedes omitir este punto si llevaste a cabo el punto nº1 al pie de la letra. )

Has mencionado que borraste el historial de navegación y "demás", pero no especificaste exactamente el qué. Por eso, te sugiero también borrar la caché del navegador y, sobre todo, las cookies relacionadas con el inicio de sesión en Outlook, por si ahí estuviera el problema.

Indicaciones para Chrome: https://support.google.com/accounts/answer/32050?hl=es&co=GENIE.Platform%3DDesktop
Indicaciones para Firefox: https://support.mozilla.org/es/kb/Borrar%20cookies

Como alternativa para llevar a cabo la misma limpieza también puedes utilizar CCleaner, activando las opciones de limpieza de caché y cookies correspondientes al navegador.

3. Verificar extensiones problemáticas

( Puedes omitir este punto si llevaste a cabo el punto nº1 al pie de la letra. )

¿Es posible que en tu navegador web tengas instalada una o más extensiones que estén intentando autorizar un inicio de sesión en Outlook?. Yo por ejemplo tengo una extensión que me notifica de nuevos correos recibidos en Outlook...

En caso afirmativo simplemente desactiva temporalmente esas extensiones que tengas instaladas en tu navegador, y prueba a iniciar sesión en Outlook.

Nota: el uso del 'modo incógnito' no garantiza que todas las extensión vayan a estar desactivadas (dependiendo de si has configurado alguna para poder usarse en modo incógnito), por eso te digo de desactivarlas manualmente.

4. Limpiar la caché DNS

Simplemente abre la consola de Windows (CMD) y escribe el siguiente comando y pulsa la tecla 'Enter' para ejecutarlo:

Código:
ipconfig /flushdns



🌐 Fuente: https://axarnet.es/blog/error-400-bad-request

5. Añadir una forma alternativa de inicio de sesión para tu cuenta de correo

Si nada de lo anterior te ha funcionado, podrías probar esta solución más drástica...

Citar
Intenta iniciar sesión con tu correo electrónico en tu dispositivo móvil (asegúrate de que esté desconectado de la red Wi-Fi y conectado a datos móviles).

Accede a la página https://account.microsoft.com/security > 'Administrar cómo inicio sesión'. https://support.microsoft.com/en-us/account-billing/microsoft-account-security-info-verification-codes-bf2505ca-cae5-c5b4-77d1-69d3343a5452

Agrega un correo electrónico de recuperación alternativo o configura una aplicación de autenticación. https://support.microsoft.com/en-us/account-billing/how-to-add-your-accounts-to-microsoft-authenticator-92544b53-7706-4581-a142-30344a2a2a57

Una vez que hayas terminado de configurar, vuelve a Windows e intenta iniciar sesión en tu cuenta. No uses tu contraseña; inicia sesión enviando el código a tu dirección de correo electrónico alternativa o verifica tu inicio de sesión desde la aplicación de autenticación.

🌐 Fuente: https://answers.microsoft.com/en-us/outlook_com/forum/all/i-am-getting-the-error-400-bad-request-while/dbf1a68e-a27f-4504-b7d4-2c0577df8448?page=2

Atentamente,
Elektro.
75  Foros Generales / Dudas Generales / Re: ¿De qué maneras puedo conseguir dinero en internet? en: 11 Junio 2025, 23:42 pm






76  Foros Generales / Dudas Generales / Re: ¿De qué maneras puedo conseguir dinero en internet? en: 11 Junio 2025, 19:03 pm
Puedes ganar dinero con juegos y encuestas, pero te lo dan en cuentagotas
https://appsquesipagan.com

La mejor valorada en ese sitio web:

AttaPoll - Encuestas de pago

Citar
El primer día, recibí solo una invitación para completar una encuesta de 10 minutos por valor de 12 créditos (0,12 £) (0,14 EUR). Al día siguiente, hubo una encuesta de 20 minutos por valor de 60 créditos (£ 0,60) (0,71 EUR).

La mayoría de las encuestas pagan menos de £ 1 (menos de 1,18 EUR) y tardan entre 10 y 20 minutos en completarse.

Si convertimos la moneda, serían 10 minutos por 14 céntimos de euro y 20 minutos por 71. A eso súmale comisiones de conversión de Paypal si el dinero te lo envían en USD y quieres usarlo en EUR, y súmale también el coste del uso del móvil para completar ese tiempo realizando encuestas (por que esas apps son para móvil, a menos que uno se instale un emulador para usarlas en el PC, eso suponiendo que esa práctica no esté prohibida en los términos de uso de la empresa), con la batería que se pierde y que luego tendrás que recargar...

En fin. Nadie está obligado a usar este tipo de servicios, pero el simple hecho de que se atrevan a ofrecerte semejante promedio de ganancias lo considero un insulto, una falta de respeto intolerable al valor del tiempo humano. Por que el tiempo es oro, y aquí lo están canjeando por míseros céntimos disfrazados de oportunidad.

No se puede esperar otra cosa de este tipo de servicios. Abusan de la gente necesitada a cambio de migajas. Para los filipinos y quizás para otras regiones del mundo puede que sí puedan obtener beneficios de media como para considerarlo eso, beneficios, algo productivo, pero para un europeo esto es totalmente indigno...

Cambiar 20 minutos de tu tiempo, concentración, dedicación y el uso de la batería de tu móvil a cambio de 71 céntimos es casi una forma de esclavismo digital. Soy consciente que hay personas que no tienen problemas económicos y afirman estar haciéndolo solo por sacarse una calderilla extra a final de mes, que no les importa en absoluto ese consumo de tiempo y dedicación, pero igualmente al usar estos servicios están siendo personas abusadas por estas empresas. Aceptar unas condiciones abusivas no hace que esto deje de ser un abuso.

Y, con todos mis respetos hacia las personas con cualquier clase de necesidades económicas, pero, aquellas personas que estén realmente necesitadas, personas con un nivel de pobreza extrema y desesperación, hasta el punto de no importarles ofrecer su tiempo y más cosas a cambio de unos céntimos diarios por que realmente necesitan ese dinero para subsistir, a esas personas yo les diría que hay otras formas más tradicionales en las que se podría obtener más beneficios, como por ejemplo mendigar. Literalmente hablando, se puede ganar más beneficio promedio diario mendigando en la calle, entre 5€ y 20€ (y muchos ganan bastante más que eso), dependiendo de muchos factores y de la suerte. Las ayudas sociales del estado podrían ser otra opción a considerar para quienes tengan la suerte y cumplan los requisitos.

¿Sistema de referidos para aumentar las ganancias?, ya. No hay nada mejor que despojarse de toda ética y moral para engatusar y convencer a la gente hasta meterlos forzosamente en un esquema piramidal como los de estos servicios y hacerles creer que si se esfuerzan lo suficiente van a ganar mucho dinero... para que así tú puedas ganar un poco más de calderilla. La mejor forma de perder amistades.

No espero que mi opinión sea muy compartida por la mayoría. Habría personas dispuestas a aceptar 1€ a cambio de 1 hora de trabajo, y darían las gracias. Yo en cambio denuncio públicamente estos abusos. Estoy en mi derecho de hacerlo.

PD: estoy abierto a la crítica mientras sea con respeto, aunque no pretendo iniciar ningún debate al respecto así que no responderé a ninguna cita a este comentario ni alusión a mi persona.

Atentamente,
Elektro.
77  Seguridad Informática / Seguridad / Re: ¿Cómo protegerse? en: 11 Junio 2025, 10:02 am
No si ahora está muy claro, pero en ese momento durante un segundo créeme que estuve tentado de dar los datos.

Ni siquiera los trabajadores de un banco pueden pedirte algo tan comprometido como el CVC, ni siquiera el director de un banco, ni el fundador ni un CEO, está prohibido por cuestiones evidentes (que ya ha explicado @simorg) por que es básicamente una contraseña vinculada a esa tarjeta, así que mucho menos lo va a poder pedir una supuesta compañía de transporte para hacer una gestión. Es de locos... xD

Saludos!
78  Informática / Software / Re: Como puedo bloquear los molestos mensajes de Mcafee que me llegan a mi correo de outlook en: 11 Junio 2025, 00:14 am
hoy en día simplemente pinchando un enlace sin darte cuenta se te puede descargar cualquier archivo malicioso un ejemplo:
 
https://www.sectigo.com/resource-library/can-i-get-a-virus-from-opening-a-website#:~:text=Yes%2C%20you%20can%20get%20a,security%20solutions%20like%20Sectigo%20SiteLock.

Efectivamente, eso puede suceder. Pero creo que ese artículo no explica del todo bien el verdadero peligro detrás de este tipo de ataques. El término técnico para esta amenaza es Drive-by Download o Drive-by-install:


Este método permite que se descarguen y ejecuten archivos maliciosos en tu PC sin necesidad de que tú lo apruebes explícitamente. Sin tu consentimiento. SIMPLEMENTE POR ABRIR UN ENLACE / NAVEGAR A UNA URL, y en teoría simplemente por visualizar (cargar el contenido de) un correo malicioso, sin siquiera llegar a hacer click en nada. En teoría.

A mi me ha ocurrido.

En mi caso, me ocurrió sobre 2021 o 2022, usando Mozilla Firefox. Y eso que siempre he sido muy precavido con estos temas… No recuerdo exactamente qué enlace abrí, pero no descargué ni ejecuté nada manualmente. Simplemente al hacer clic en un enlace y cargar la página web, se me abrió de repente una ventana de la CMD que se cerró casi inmediatamente. No alcancé a leer lo que aparecía escrito en la CMD, pero claramente no era nada bueno, y no sabría decir si realmente era la CMD o más bien la interfaz de un programa de consola, no llegué a verlo a tiempo, solo vi la típica ventana con fondo negro de una consola de Windows.

EDITO: creo recordar que precisamente el enlace que abrí fue de algún e-mail de estos maliciosos que llegan a nuestra bandeja de correo, pero lo abrí por error, por culpa de la lentitud de respuesta del navegador web o algo mientras yo en realidad intentaba hacer click para filtrar el correo como SPAM, pero se hizo click en alguna parte del mensaje que abrió una nueva pestaña en el navegador (y que la cerré lo más rápido que pude). Creo recordar que fue así y por esta causa, pero no estoy seguro ha pasado mucho tiempo.

Acto seguido revisé los procesos en ejecución, pero no encontré nada extraño que me indicase una posible infección...

Esto de cargar una página web y que se me abriese una ventanita de consola en mi sistema operativo me pareció sospechoso, pero no lo suficiente, tuve el error de dudar de lo que acababa de ver, de la procedencia de esa ventana de consola (¿sería por algún proceso en ejecución en mi sistema, o realmente sería por haber abierto esta página web?) y no terminar de creerme que me hubiese podido infectar de esa manera solo por estar navegando (¡con lo precavido que soy! me diría a mi mismo), de todas formas mis dudas estaban ahí, así que por las dudas decidí realizar un escaneo profundo con varios antivirus (no encontraron nada) y reinstalar el sistema operativo para dejar de preocuparme de forma definitiva.

Pero eso no iba a servir de mucho, ya que unas horas más tarde alguien había hecho varias compras por Internet usando mi tarjeta VISA desde China o algún país asiático. Mi banco autorizó estas compras al ser considerados "comercios seguros" (https://), eso es lo que me dijeron. Me avisaron desde mi entidad bancaria por SMS de que había cierta actividad sospechosa, pero no me enteré hasta el día siguiente en realidad. Tuve que acudir al banco, anular esas compras (me devolvieron el importe de todo), denunciar lo sucedido y solicitar una nueva tarjeta. Desde entonces tengo mi VISA actual bloqueada por defecto, y solo la activo temporalmente cuando necesito hacer un pago, para evitar que algo así vuelva a ocurrirme en el futuro.

Hasta ese incidente yo jamás había sufrido una infección en toda mi vida. Y desde entonces, afortunadamente, tampoco me ha vuelto a pasar.

Siempre he seguido una serie de medidas para intentar minimizar riesgos, empezando por no abrir cosas sospechosas o hacerlo en una máquina virtual bien aislada. Y tener una configuración meticulosa de permisos de usuario en el sistema de archivos de Windows. Y en lo que respecta a navegadores web, pues siempre uso bloqueadores automáticos de adware y minería de criptomonedas, instalo los navegadores web en rutas no convencionales, fuera de los directorios por defecto, hago una limpieza casi semanal de cookies en mi navegador principal, y más cosas.

En fin, creo que son pequeñas prácticas de un protocolo personal que, combinadas, podrían ayudar a dificultar infecciones o entorpecer códigos maliciosos que busquen en rutas por defecto o requieran ciertos permisos de usuario, etc. Pero incluso con toda esa precaución, basta con visitar un enlace malicioso para que algo se descargue y se ejecute sin tu conocimiento, sin que te enteres (si yo no llego a percatarme de esa ventanita de consola que se abrió y se cerró al segundo, a día de hoy estaría todavía más perdido sin entender lo sucedido), y te roben información confidencial y en definitiva te jodan bastante.

Así que sí, como bien comentas, @El_Andaluz, ese tipo de cosas pueden pasar. ¡Mucho ojo!
79  Programación / .NET (C#, VB.NET, ASP) / Re: Librería de Snippets para VB.NET !! (Compartan aquí sus snippets) en: 10 Junio 2025, 07:00 am
Genial snippets nuevos , gracias.  ;-)

Te lo agradezco!



Varios métodos para crear efectos de transición de imagen con la librería ImageMagick:


El número de frames del efecto de transición y el tiempo de la secuencia de animación son configurables.

Estos efectos son ideales para generar presentaciones de imágenes en animaciones GIF...



Barrido direccional:

 

Código
  1. ''' <summary>
  2. ''' Generates a sequence of transition frames between two <see cref="MagickImage"/> instances,
  3. ''' progressively revealing the second image over the first one in a specified direction.
  4. ''' </summary>
  5. '''
  6. ''' <param name="firstImage">
  7. ''' The starting image of the transition.
  8. ''' </param>
  9. '''
  10. ''' <param name="secondImage">
  11. ''' The image to swipe in over <paramref name="firstImage"/>.
  12. ''' </param>
  13. '''
  14. ''' <param name="direction">
  15. ''' The direction in which the swipe effect must occur.
  16. ''' </param>
  17. '''
  18. ''' <param name="steps">
  19. ''' The number of intermediate frames to generate for the transition.
  20. ''' <para></para>
  21. ''' A higher value may result in a smoother, slower visual transition,  
  22. ''' at the cost of increased processing time to generate the effect
  23. ''' and increased number of images / file size for the resulting animation.
  24. ''' <para></para>
  25. ''' Minimum value is 3. Default value is 5.
  26. ''' </param>
  27. '''
  28. ''' <param name="animationDelay">
  29. ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence.
  30. ''' <para></para>
  31. ''' Default value is 1 (10 milliseconds).
  32. ''' </param>
  33. '''
  34. ''' <param name="frameTransformation">
  35. ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object)
  36. ''' used to create the transition animation. This allows fine-tuning of image properties such as format,
  37. ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class.
  38. ''' <para></para>
  39. ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate.
  40. ''' <para></para>
  41. ''' Code Example in VB.NET:
  42. ''' <code>Dim transformation As Action(Of MagickImage) =
  43. '''     Sub(x As MagickImage)
  44. '''         x.AnimationDelay = 1 ' 10 milliseconds
  45. '''         x.Format = MagickFormat.Jpg
  46. '''         x.Quality = 90
  47. '''     End Sub
  48. '''</code>
  49. '''
  50. ''' Code Example in C#:
  51. ''' <code>Action&lt;MagickImage&gt; transformation = (MagickImage x) =&gt; {
  52. '''     x.AnimationDelay = 1; // 1 10 milliseconds
  53. '''     x.Format = MagickFormat.Jpg;
  54. '''     x.Quality = 90;
  55. ''' };</code>
  56. ''' </param>
  57. '''
  58. ''' <returns>
  59. ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation.
  60. ''' <para></para>
  61. ''' All frames returned must be disposed of by the caller to free resources when no longer needed.
  62. ''' </returns>
  63. <DebuggerStepThrough>
  64. Public Shared Function GenerateSwipeTransition(firstImage As MagickImage, secondImage As MagickImage,
  65.                                               direction As System.Windows.Forms.FlowDirection,
  66.                                               steps As Integer, animationDelay As Integer,
  67.                                               Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage)
  68.  
  69.    If firstImage Is Nothing Then
  70.        Throw New ArgumentNullException(NameOf(firstImage))
  71.    End If
  72.    If secondImage Is Nothing Then
  73.        Throw New ArgumentNullException(NameOf(secondImage))
  74.    End If
  75.    If steps < 3 Then
  76.        Throw New ArgumentOutOfRangeException(NameOf(steps), steps,
  77.                    "The steps value must be equal to or greater than three.")
  78.    End If
  79.    If animationDelay <= 0 Then
  80.        Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay,
  81.                    "The animation delay value must be greater than zero.")
  82.    End If
  83.  
  84.    Dim frames As New List(Of MagickImage)
  85.  
  86.    For i As Integer = 1 To steps
  87.        Dim ratio As Double = i / steps
  88.  
  89.        Using secondCropped As New MagickImage(secondImage)
  90.            Dim cropWidth As UInteger = secondImage.Width
  91.            Dim cropHeight As UInteger = secondImage.Height
  92.            Dim offsetX As Integer = 0
  93.            Dim offsetY As Integer = 0
  94.            Dim drawX As Integer = 0
  95.            Dim drawY As Integer = 0
  96.  
  97.            Select Case direction
  98.  
  99.                Case System.Windows.Forms.FlowDirection.LeftToRight
  100.                    cropWidth = CUInt(secondImage.Width * ratio)
  101.                    offsetX = 0
  102.                    drawX = 0
  103.  
  104.                Case System.Windows.Forms.FlowDirection.RightToLeft
  105.                    cropWidth = CUInt(secondImage.Width * ratio)
  106.                    offsetX = CInt(secondImage.Width - cropWidth)
  107.                    drawX = offsetX
  108.  
  109.                Case System.Windows.Forms.FlowDirection.TopDown
  110.                    cropHeight = CUInt(secondImage.Height * ratio)
  111.                    offsetY = 0
  112.                    drawY = 0
  113.  
  114.                Case System.Windows.Forms.FlowDirection.BottomUp
  115.                    cropHeight = CUInt(secondImage.Height * ratio)
  116.                    offsetY = CInt(secondImage.Height - cropHeight)
  117.                    drawY = offsetY
  118.  
  119.            End Select
  120.  
  121.            Dim geometry As New MagickGeometry(offsetX, offsetY, cropWidth, cropHeight)
  122.            secondCropped.Crop(geometry)
  123.            secondCropped.ResetPage()
  124.  
  125.            Dim frame As New MagickImage(firstImage)
  126.            frame.Composite(secondCropped, drawX, drawY, CompositeOperator.Over)
  127.  
  128.            frameTransformation?.Invoke(frame)
  129.            frame.AnimationDelay = CUInt(animationDelay)
  130.  
  131.            frames.Add(frame)
  132.        End Using
  133.    Next
  134.  
  135.    Return frames
  136. End Function



Fundido de entrada de imagen B sobre imagen A:


Código
  1. ''' <summary>
  2. ''' Generates a sequence of transition frames between two <see cref="MagickImage"/> instances,
  3. ''' gradually fading in the second image over the first one.
  4. ''' </summary>
  5. '''
  6. ''' <param name="firstImage">
  7. ''' The starting image of the transition.
  8. ''' </param>
  9. '''
  10. ''' <param name="secondImage">
  11. ''' The image to fade in over <paramref name="firstImage"/>.
  12. ''' </param>
  13. '''
  14. ''' <param name="steps">
  15. ''' The number of intermediate frames to generate for the transition.
  16. ''' <para></para>
  17. ''' A higher value may result in a smoother, slower visual transition,  
  18. ''' at the cost of increased processing time to generate the effect
  19. ''' and increased number of images / file size for the resulting animation.
  20. ''' <para></para>
  21. ''' Minimum value is 3. Default value is 5.
  22. ''' </param>
  23. '''
  24. ''' <param name="animationDelay">
  25. ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence.
  26. ''' <para></para>
  27. ''' Default value is 1 (10 milliseconds).
  28. ''' </param>
  29. '''
  30. ''' <param name="frameTransformation">
  31. ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object)
  32. ''' used to create the transition animation. This allows fine-tuning of image properties such as format,
  33. ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class.
  34. ''' <para></para>
  35. ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate.
  36. ''' <para></para>
  37. ''' Code Example in VB.NET:
  38. ''' <code>Dim transformation As Action(Of MagickImage) =
  39. '''     Sub(x As MagickImage)
  40. '''         x.AnimationDelay = 1 ' 10 milliseconds
  41. '''         x.Format = MagickFormat.Jpg
  42. '''         x.Quality = 90
  43. '''     End Sub
  44. '''</code>
  45. '''
  46. ''' Code Example in C#:
  47. ''' <code>Action&lt;MagickImage&gt; transformation = (MagickImage x) =&gt; {
  48. '''     x.AnimationDelay = 1; // 1 10 milliseconds
  49. '''     x.Format = MagickFormat.Jpg;
  50. '''     x.Quality = 90;
  51. ''' };</code>
  52. ''' </param>
  53. '''
  54. ''' <returns>
  55. ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation.
  56. ''' <para></para>
  57. ''' All frames returned must be disposed of by the caller to free resources when no longer needed.
  58. ''' </returns>
  59. <DebuggerStepThrough>
  60. Public Shared Function GenerateFadeInOverTransition(firstImage As MagickImage, secondImage As MagickImage,
  61.                                                    steps As Integer, animationDelay As Integer,
  62.                                                    Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage)
  63.  
  64.    If firstImage Is Nothing Then
  65.        Throw New ArgumentNullException(NameOf(firstImage))
  66.    End If
  67.    If secondImage Is Nothing Then
  68.        Throw New ArgumentNullException(NameOf(secondImage))
  69.    End If
  70.    If steps < 3 Then
  71.        Throw New ArgumentOutOfRangeException(NameOf(steps), steps,
  72.                    "The steps value must be equal to or greater than three.")
  73.    End If
  74.    If animationDelay <= 0 Then
  75.        Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay,
  76.                    "The animation delay value must be greater than zero.")
  77.    End If
  78.  
  79.    Dim frames As New List(Of MagickImage)
  80.  
  81.    For i As Integer = 0 To steps
  82.        Dim alpha As Double = i / steps
  83.  
  84.        Dim frame As New MagickImage(firstImage)
  85.        Using overlay As New MagickImage(secondImage)
  86.            overlay.Alpha(AlphaOption.On)
  87.            overlay.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha)
  88.            frame.Composite(overlay, CompositeOperator.Over)
  89.  
  90.            frameTransformation?.Invoke(frame)
  91.            frame.AnimationDelay = CUInt(animationDelay)
  92.  
  93.            frames.Add(frame)
  94.        End Using
  95.    Next
  96.  
  97.    Return frames
  98. End Function



Fundido de entrada negro:



Código
  1. ''' <summary>
  2. ''' Generates a sequence of transition frames, gradually fading in from black the specified <see cref="MagickImage"/> object.
  3. ''' </summary>
  4. '''
  5. ''' <param name="image">
  6. ''' The <see cref="MagickImage"/> object to fade in from black.
  7. ''' </param>
  8. '''
  9. ''' <param name="steps">
  10. ''' The number of intermediate frames to generate for the transition.
  11. ''' <para></para>
  12. ''' A higher value may result in a smoother, slower visual transition,  
  13. ''' at the cost of increased processing time to generate the effect
  14. ''' and increased number of images / file size for the resulting animation.
  15. ''' <para></para>
  16. ''' Minimum value is 3. Default value is 5.
  17. ''' </param>
  18. '''
  19. ''' <param name="animationDelay">
  20. ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence.
  21. ''' <para></para>
  22. ''' Default value is 1 (10 milliseconds).
  23. ''' </param>
  24. '''
  25. ''' <param name="frameTransformation">
  26. ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object)
  27. ''' used to create the transition animation. This allows fine-tuning of image properties such as format,
  28. ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class.
  29. ''' <para></para>
  30. ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate.
  31. ''' <para></para>
  32. ''' Code Example in VB.NET:
  33. ''' <code>Dim transformation As Action(Of MagickImage) =
  34. '''     Sub(x As MagickImage)
  35. '''         x.AnimationDelay = 1 ' 10 milliseconds
  36. '''         x.Format = MagickFormat.Jpg
  37. '''         x.Quality = 90
  38. '''     End Sub
  39. '''</code>
  40. '''
  41. ''' Code Example in C#:
  42. ''' <code>Action&lt;MagickImage&gt; transformation = (MagickImage x) =&gt; {
  43. '''     x.AnimationDelay = 1; // 1 10 milliseconds
  44. '''     x.Format = MagickFormat.Jpg;
  45. '''     x.Quality = 90;
  46. ''' };</code>
  47. ''' </param>
  48. '''
  49. ''' <returns>
  50. ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation.
  51. ''' <para></para>
  52. ''' All frames returned must be disposed of by the caller to free resources when no longer needed.
  53. ''' </returns>
  54. <DebuggerStepThrough>
  55. Public Shared Function GenerateFadeInFromBlackTransition(image As MagickImage,
  56.                                                         steps As Integer, animationDelay As Integer,
  57.                                                         Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage)
  58.  
  59.  
  60.    If image Is Nothing Then
  61.        Throw New ArgumentNullException(NameOf(image))
  62.    End If
  63.    If steps < 3 Then
  64.        Throw New ArgumentOutOfRangeException(NameOf(steps), steps,
  65.                    "The steps value must be equal to or greater than three.")
  66.    End If
  67.    If animationDelay <= 0 Then
  68.        Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay,
  69.                    "The animation delay value must be greater than zero.")
  70.    End If
  71.  
  72.    Dim frames As New List(Of MagickImage)
  73.  
  74.    Using black As New MagickImage(MagickColors.Black, image.Width, image.Height)
  75.        For i As Integer = 0 To steps
  76.            Dim alpha As Double = i / steps
  77.            Using fadeImg As New MagickImage(image)
  78.                fadeImg.Alpha(AlphaOption.On)
  79.                fadeImg.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha)
  80.  
  81.                Dim background As New MagickImage(black)
  82.                background.Composite(fadeImg, CompositeOperator.Over)
  83.  
  84.                frameTransformation?.Invoke(background)
  85.                background.AnimationDelay = CUInt(animationDelay)
  86.  
  87.                frames.Add(background)
  88.            End Using
  89.        Next
  90.    End Using
  91.  
  92.    Return frames
  93. End Function



Fundido de salida a negro para la imagen A, y fundido de entrada desde negro para la imagen B:





Código
  1. ''' <summary>
  2. ''' Generates a sequence of transition frames between two <see cref="MagickImage"/> instances,
  3. ''' gradually fading out to black the first image, then fading in from black the second image.
  4. ''' </summary>
  5. '''
  6. ''' <param name="firstImage">
  7. ''' The image to fade out to black.
  8. ''' </param>
  9. '''
  10. ''' <param name="secondImage">
  11. ''' The image to fade in from black.
  12. ''' </param>
  13. '''
  14. ''' <param name="steps">
  15. ''' The number of intermediate frames to generate for the transition.
  16. ''' <para></para>
  17. ''' A higher value may result in a smoother, slower visual transition,  
  18. ''' at the cost of increased processing time to generate the effect
  19. ''' and increased number of images / file size for the resulting animation.
  20. ''' <para></para>
  21. ''' Minimum value is 3. Default value is 5.
  22. ''' </param>
  23. '''
  24. ''' <param name="animationDelay">
  25. ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence.
  26. ''' <para></para>
  27. ''' Default value is 1 (10 milliseconds).
  28. ''' </param>
  29. '''
  30. ''' <param name="frameTransformation">
  31. ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object)
  32. ''' used to create the transition animation. This allows fine-tuning of image properties such as format,
  33. ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class.
  34. ''' <para></para>
  35. ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate.
  36. ''' <para></para>
  37. ''' Code Example in VB.NET:
  38. ''' <code>Dim transformation As Action(Of MagickImage) =
  39. '''     Sub(x As MagickImage)
  40. '''         x.AnimationDelay = 1 ' 10 milliseconds
  41. '''         x.Format = MagickFormat.Jpg
  42. '''         x.Quality = 90
  43. '''     End Sub
  44. '''</code>
  45. '''
  46. ''' Code Example in C#:
  47. ''' <code>Action&lt;MagickImage&gt; transformation = (MagickImage x) =&gt; {
  48. '''     x.AnimationDelay = 1; // 1 10 milliseconds
  49. '''     x.Format = MagickFormat.Jpg;
  50. '''     x.Quality = 90;
  51. ''' };</code>
  52. ''' </param>
  53. '''
  54. ''' <returns>
  55. ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation.
  56. ''' <para></para>
  57. ''' All frames returned must be disposed of by the caller to free resources when no longer needed.
  58. ''' </returns>
  59. <DebuggerStepThrough>
  60. Public Shared Function GenerateFadeOutAndFadeInToBlackTransition(firstImage As MagickImage, secondImage As MagickImage,
  61.                                                                 steps As Integer, animationDelay As Integer,
  62.                                                                 Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage)
  63.  
  64.    If firstImage Is Nothing Then
  65.        Throw New ArgumentNullException(NameOf(firstImage))
  66.    End If
  67.    If secondImage Is Nothing Then
  68.        Throw New ArgumentNullException(NameOf(secondImage))
  69.    End If
  70.    If steps < 3 Then
  71.        Throw New ArgumentOutOfRangeException(NameOf(steps), steps,
  72.                    "The steps value must be equal to or greater than three.")
  73.    End If
  74.    If animationDelay <= 0 Then
  75.        Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay,
  76.                    "The animation delay value must be greater than zero.")
  77.    End If
  78.  
  79.    Dim frames As New List(Of MagickImage)
  80.    Using blackImage As New MagickImage(MagickColors.Black, firstImage.Width, firstImage.Height)
  81.  
  82.        ' PHASE 1: Fade firstImage to black
  83.        For i As Integer = 0 To steps
  84.            Dim alpha As Double = 1.0 - (i / steps)
  85.  
  86.            Dim background As New MagickImage(blackImage)
  87.            firstImage.Alpha(AlphaOption.On)
  88.            firstImage.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha)
  89.  
  90.            background.Composite(firstImage, CompositeOperator.Over)
  91.  
  92.            frameTransformation?.Invoke(background)
  93.            background.AnimationDelay = CUInt(animationDelay)
  94.  
  95.            frames.Add(background)
  96.        Next
  97.  
  98.        ' PHASE 2: Fade in secondImage from black
  99.        For i As Integer = 1 To steps ' Empieza en 1 para no duplicar el frame negro
  100.            Dim alpha As Double = i / steps
  101.  
  102.            Using baseImage As New MagickImage(secondImage)
  103.                Dim background As New MagickImage(blackImage)
  104.                baseImage.Alpha(AlphaOption.On)
  105.                baseImage.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha)
  106.  
  107.                background.Composite(baseImage, CompositeOperator.Over)
  108.  
  109.                frameTransformation?.Invoke(background)
  110.                background.AnimationDelay = CUInt(animationDelay)
  111.  
  112.                frames.Add(background)
  113.            End Using
  114.        Next
  115.  
  116.        Return frames
  117.    End Using
  118.  
  119. End Function



Fundido de salida a negro:

Código
  1. ''' <summary>
  2. ''' Generates a sequence of transition frames, gradually fading out to black the specified <see cref="MagickImage"/> object.
  3. ''' </summary>
  4. '''
  5. ''' <param name="image">
  6. ''' The <see cref="MagickImage"/> object to fade out to black.
  7. ''' </param>
  8. '''
  9. ''' <param name="steps">
  10. ''' The number of intermediate frames to generate for the transition.
  11. ''' <para></para>
  12. ''' A higher value may result in a smoother, slower visual transition,  
  13. ''' at the cost of increased processing time to generate the effect
  14. ''' and increased number of images / file size for the resulting animation.
  15. ''' <para></para>
  16. ''' Minimum value is 3. Default value is 5.
  17. ''' </param>
  18. '''
  19. ''' <param name="animationDelay">
  20. ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence.
  21. ''' <para></para>
  22. ''' Default value is 1 (10 milliseconds).
  23. ''' </param>
  24. '''
  25. ''' <param name="frameTransformation">
  26. ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object)
  27. ''' used to create the transition animation. This allows fine-tuning of image properties such as format,
  28. ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class.
  29. ''' <para></para>
  30. ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate.
  31. ''' <para></para>
  32. ''' Code Example in VB.NET:
  33. ''' <code>Dim transformation As Action(Of MagickImage) =
  34. '''     Sub(x As MagickImage)
  35. '''         x.Format = MagickFormat.Jpg
  36. '''         x.Quality = 90
  37. '''     End Sub
  38. '''</code>
  39. '''
  40. ''' Code Example in C#:
  41. ''' <code>Action&lt;MagickImage&gt; transformation = (MagickImage x) =&gt; {
  42. '''     x.AnimationDelay = 1; // 1 10 milliseconds
  43. '''     x.Format = MagickFormat.Jpg;
  44. '''     x.Quality = 90;
  45. ''' };</code>
  46. ''' </param>
  47. '''
  48. ''' <returns>
  49. ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation.
  50. ''' <para></para>
  51. ''' All frames returned must be disposed of by the caller to free resources when no longer needed.
  52. ''' </returns>
  53. <DebuggerStepThrough>
  54. Public Shared Function GenerateFadeOutToBlackTransition(image As MagickImage,
  55.                                                        steps As Integer, animationDelay As Integer,
  56.                                                        Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage)
  57.  
  58.    If image Is Nothing Then
  59.        Throw New ArgumentNullException(NameOf(image))
  60.    End If
  61.    If steps < 3 Then
  62.        Throw New ArgumentOutOfRangeException(NameOf(steps), steps,
  63.                    "The steps value must be equal to or greater than three.")
  64.    End If
  65.    If animationDelay <= 0 Then
  66.        Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay,
  67.                    "The animation delay value must be greater than zero.")
  68.    End If
  69.  
  70.    Dim frames As New List(Of MagickImage)
  71.    Using black As New MagickImage(MagickColors.Black, image.Width, image.Height)
  72.        For i As Integer = 0 To steps
  73.            Dim alpha As Double = 1.0 - (i / steps)
  74.            Using fadeImg As New MagickImage(image)
  75.                fadeImg.Alpha(AlphaOption.On)
  76.                fadeImg.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha)
  77.  
  78.                Dim background As New MagickImage(black)
  79.                background.Composite(fadeImg, CompositeOperator.Over)
  80.  
  81.                frameTransformation?.Invoke(background)
  82.                background.AnimationDelay = CUInt(animationDelay)
  83.  
  84.                frames.Add(background)
  85.            End Using
  86.        Next
  87.    End Using
  88.  
  89.    Return frames
  90. End Function

Nota: además de esto escribí un método para generar un GIF animado a partir de un array de imágenes, pero no puedo compartirlo aquí ya que utiliza diversos elementos de mi librería comercial y es mucho lío extraer por separado cada código necesario para insertarlo y compartirlo aquí.
80  Informática / Software / Re: VMWare workstation pro 17 - Keys en: 10 Junio 2025, 06:32 am
El link de descarga original es éste: ...

El enlace redirige a la página de inicio de sesión de Broadcom. Supongo que con las cookies guardadas de inicio de sesión el enlace si que funcionará.



Aquí pueden descargar los productos de VmWare sin pasar por el registro de usuario en Broadcom:


Y de esta forma además evitan tener que estudiar un manual informático de navegación para poder usar el tedioso sitio web de Broadcom con los infumables cambios que hicieron a la anterior interfaz web de VmWare. Algo criticado por la gran mayoría en Reddit...

Atentamente,
Elektro.
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 1258
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines