Excel - "escribir" píxeles sobre un shape

Anónimo
2016-07-20T15:26:58+00:00

Tengo un shape en una hoja y quiero "escribir" píxeles sobre el shape en determinadas posiciones.

Cualquier sugerencia (con fundamento) será bien recibida.

¿cómo hacerlo?

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la comunidad de soporte técnico de Microsoft. Puedes votar si te parece útil, pero no puedes agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios

49 respuestas

Ordenar por: Más reciente
  1. Anónimo
    2016-08-09T14:50:48+00:00

    Está muy bien. Lo haces todo en memoria, por eso es tan rápido.

    Hace un tiempo hice un programa para convertir una imagen en símbolos ascii y creo recordar que también cargaba el fichero en memoria y ahí lo trataba.

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios
  2. Héctor Miguel 71,595 Puntos de reputación
    2016-08-09T00:23:06+00:00

    antes de que hagas frente nuevo (o pruebas), el algoritmo utilizado es "lo mismo" que se utilizaría en VBA: dos bucles anidados

    • el primero recorre los pixeles del ancho (w)
    • el segundo recorre los pixeles del alto (h) [puede ser a la inversa]
    • dentro del segundo bucle:
      • se obtienen los colores del pixel
      • se genera el aleatorio
      • se estampan en el archivo "ciclo-por-ciclo", o sea, un millón de líneas (si imagen=1e6 pixeles)

    código para java:

    public class PixelesDeImagen {

      public static void main(String[] args) throws Exception {

        BufferedImage imgBuffer = ImageIO.read(new File(args[0]));

        int w = imgBuffer.getWidth();

        int h = imgBuffer.getHeight();

        FileWriter fw = new FileWriter(args[1]);

        BufferedWriter bw = new BufferedWriter(fw);

        string sL = args[2];

        int color;

        bw.write("random" + sL + "ancho" + sL + "alto" + sL + "R" + sL + "G" + sL + "B" + "\n");

        for (int i = 0; i < w; i++) {

          for (int j = 0; j < h; j++) {

            color = imgBuffer.getRGB(i, j);

            double random = ThreadLocalRandom.current().nextDouble(0, 1);

            int rojo = (color >> 16) & 0xff;

            int verde = (color >> 8) & 0xff;

            int azul = (color) & 0xff;

            bw.write(random + sL + i + sL + j + sL + rojo + sL + verde + sL + azul + "\n");

          }

        }

        bw.close();

      }

    }

    saludos,

    hector.

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios
  3. Anónimo
    2016-08-07T18:28:06+00:00

    La rapidez supongo que la aportará el algoritmo que hayas utilizado para recuperar los datos, más que el lenguaje.

    Podemos hacer la prueba.  ;-))) Otro frente se abre.

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios
  4. Anónimo
    2016-08-07T18:24:54+00:00

    Si se los atribuye como propios está (muy) mal pero lo importante es que el conocimiento se divulgue porque al conocimiento le ocurre lo que al amor, que aumenta cuando se reparte.

    Ya dije que lo de asignar la extensión csv no era importante, pero mejor hubiera sido asignarle la extensión txt.

    Tanto como obsesión...

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios
  5. Héctor Miguel 71,595 Puntos de reputación
    2016-08-07T16:51:44+00:00

    sabemos que (aparentemente) eso es de poca utilidad (o al menos uso generalizado)

    y lo de la extension (y si coma o 'punto y coma' o cualquier otro separador) tampoco quise ser demasiado "expresivo" que variantes y alternativas hay para todos los gustos ;)

    lo que me gustó del java ha sido el "peso/tamaño/..." del ejecutable

    (y claro, también la rapidez)

    saludos,

    hector.

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios