Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    [Java][OT] Insieme di Mandelbrot e colore dei pixel (operatori bit a bit)

    Ciao a tutti,

    Sto utilizzando la classe MemoryImageSource, e devo creare un array di pixel.

    Il mio problema è:
    Tramite operatori a livello di bit, come faccio ad inserire i 3 colori (il pixel quindi) nella posizione i-esima dell'array?

    Premetto che il programma crea dei frattali, precisamente l'insieme di Mandelbrot ( http://it.wikipedia.org/wiki/Insieme_di_Mandelbrot ):

    codice:
    int r = ((100+k)/4) & 0XFF;
    int g = (k/2) & 0XFF;
    int b = (4*k) & 0XFF;
    pixels[index++] = (255 << 24) | (r<<16) | (g << 8) | b;
    k è il colore in base alla posizione del contatore.

    Facendolo così, visualizzo una specie di colore rosso scuro ed una specie di T al contrario al centro (dove non visualizzo colori, ma solamente il frame).

    Grazie! ^^

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Nessuno ha soluzioni? ^^

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java][OT] Insieme di Mandelbrot e colore dei pixel (operatori bit a bit)

    Originariamente inviato da Patrick Jane
    codice:
    int r = ((100+k)/4) & 0XFF;
    int g = (k/2) & 0XFF;
    int b = (4*k) & 0XFF;
    pixels[index++] = (255 << 24) | (r<<16) | (g << 8) | b;
    Facendolo così, visualizzo una specie di colore rosso scuro ed una specie di T al contrario al centro (dove non visualizzo colori, ma solamente il frame).
    Se r/g/b sono già forzati nel range 0-255 (con quei AND che hai fatto), la espressione di composizione del valore del pixel mi pare del tutto corretta.

    Però nel calcolo di r/g/b non vedo cast a int, quindi se ne deduce che k è già un intero. E quindi le divisioni che fai sono "intere". Il che mi porta a pensare che ottieni meno livelli di quelli che speri .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    La procedura mi sembra corretta... che cosa ti aspetti? Hai controllato che altri dati siano consistenti (ovvero, come varia k e di conseguenza in che range stiano effettivamente le componenti di colori?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Vi ringrazio intanto per la risposta!

    Si, k è corretta...e vi spiego il perchè:

    Tempo fa avevo scritto una classe per creare immagini PPM. Questa internamente crea un array di 3*height*width+3, e permette di settare pixel per pixel in modo manuale (passando i colori). In questo modo tutto funziona! Il problema sorge quando ad ogni posizione ho un pixel intero, e non un pixel ogni 3 indici...questo perchè l'array deve essere passato a MemoryImageSource.

    Si, k è un intero comunque!

    Prima di quel codice c'è questo..
    codice:
    for(k = 0; k<profondita; k++) {
      primo = primo.somma(primo.prodotto(primo,primo),secondo);
      modulo = primo.abs(primo);
      if(modulo > 2.0) break;
    }
    in sostanza il colore lo prendo in base alla posizione di k

    Però c'è una cosa che non mi torna...come setto il colore bianco ad un pixel?

    Ho scritto un altra versione, come ho detto, che salvi su PPM..e quello funziona! (se volete il codice chiedete pure che non ho problemi nel postarlo ^^).

    Grazie! ^^

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.