Post Reply 
translucent grob
05-12-2016, 07:00 PM (This post was last modified: 05-12-2016 07:02 PM by fabila.)
Post: #1
translucent grob
I'm trying to paste a translucent grob over another, and that is in the background I can not see , get a black background.
This did not happen in previous firmware
In the following program expected to see a blue rectangle on a white background

Estoy intentando pegar un grob translucido sobre otro, y el que esta en el fondo no lo puedo ver, obtengo un fondo negro.
Esto no sucedía en anteriores firmware.
En el siguiente programa esperaba ver un rectángulo azul sobre fondo blanco

PHP Code:
EXPORT nuevo_programa()
BEGIN
dimgrob_p
(G1,320,240);
dimgrob_p(G2,320,240,RGB(255,0,0,128));
rect_p(G2,100,100,150,150,RGB(0,0,255));
BLIT_P(G1,G2);
BLIT_p(G2);
WAIT();
END
Find all posts by this user
Quote this message in a reply
05-13-2016, 05:08 AM
Post: #2
RE: translucent grob
Hello,

Thanks for posting this issue. I will add it on the list.

I have a question, which is related to this issue.
What would you expect the result of the rect_p command to be when:
- edge and fill color are transparent
- edge is transparent and fill is opaque
- edge is opaque and fill is transparent
- both are opaque (well, this one is easy, you want an opaque, bi-color rectangle).

Regards,
Cyrille

Although I work for the HP calculator group, the views and opinions I post here are my own. I do not speak for HP.
Find all posts by this user
Quote this message in a reply
05-13-2016, 03:24 PM (This post was last modified: 06-14-2016 04:30 AM by Carlos295pz.)
Post: #3
RE: translucent grob
Tienes 2 errores, en el DIMGROB y en el uso de la mezcla alfa con BLIT.
PHP Code:
EXPORT nuevo_programa()
BEGIN
 dimgrob_p
(G1,320,240);
 
dimgrob_p(G2,320,240,RGB(255,0,0,128)); //En versiones anteriores esto era correcto
 
rect_p(G2,100,100,150,150,RGB(0,0,255)); //Esta instrucción solo mezcla los colores
 
BLIT_P(G1,G2); //En esta sección es donde se debe indicar el nivel de translucidez
 
BLIT_P(G2);
 
WAIT();
END

Ejemplo:
PHP Code:
EXPORT nuevo_programa()
BEGIN
 DIMGROB_P
(G1,320,240); RECT(G1,#FF00h); //Por ahora no es posible asignar un color translúcido a un Grob.
 
RECT_P(G1,100,100,150,150,#FFh);
 
BLIT_P(0,0,G1,0,0,320,240,#FFFFFFh,40); //La mezcla es aquí, difuminando el Grob fuente al insertarlo.
 
WAIT();
END


Para ello es obligatorio definir definir los extremos del origen como se menciona en el manual, y escribir el color y mezcla alfa por separado.

[Image: trans.PNG]

Viga C | TD | FB
Visit this user's website Find all posts by this user
Quote this message in a reply
05-13-2016, 05:32 PM (This post was last modified: 05-13-2016 05:51 PM by fabila.)
Post: #4
RE: translucent grob
Quote:I have a question, which is related to this issue.
What would you expect the result of the rect_p command to be when:
- edge and fill color are transparent
- edge is transparent and fill is opaque
- edge is opaque and fill is transparent
- both are opaque (well, this one is easy, you want an opaque, bi-color rectangle).


Thanks cyrille

Expect to see different effects as a function of this set the transparency level of grob in which the rectangle is drawn

If the grob is attached in which the rectangle is solid expect to see the background color grob in areas where transparency have put either side or edge

If the grob in which is attached the rectangle is translucent, expect to see the background color of the following solid grob this at a lower level, and if there is no grob at lower levels, expect to see the latest that has been drawn in the screen when running in program.


Esperaría ver distintos efectos en función del como este definido el nivel de transparencia del grob en el que se dibuje el rectángulo

Si el grob en el que esta pegado el rectángulo es solido esperaría ver el color del fondo del grob en las zonas donde hayas puesto la transparencia ya sea en cara o en el borde

Si el grob en el que esta pegado el rectángulo es translucido, esperaría ver el color del fondo del siguiente grob solido que este en un nivel inferior, y si no hay ningún grob en niveles inferiores, esperaría ver lo ultimo que se haya dibujado en la pantalla al ejecutar en programa.






Gracias Carlos295pz

En versiones anteriores, podías definir un grob traslucido con dimgrob, y sobre ese grob dibujar gráficos con un color solido, rectángulos, círculos textos etc, así sucesivamente generaba varios grobs con distintos gráficos, y con el comando Blit pegaba o activaba o desactivaba los grobs al gusto, algo así como utilizar las capas en autocad.

El problemas me surgió con la nueva actualización, que los programas que había echo dejaron de funcionar correctamente precisamente por eso, porque cuando debería de verse los gráficos que hay en una capa interior de un grob transparente dejan de verse y ahora aparece todo con un fondo negro se mezclan los canales obteniendo un resultado impredecible.

Si doy el grado de transparencia al grob en el comando blit también deberia de convertir en traslucido los objetos gráficos que quería que fueran opacos.?

He probado tu sugerencias y arreglan los problemas de mi programa, puede qeu tenga los conceptos equivocados.


Muchas gracias por tu propuesta.
Find all posts by this user
Quote this message in a reply
05-13-2016, 06:31 PM
Post: #5
RE: translucent grob
Creo que tenia yo mal el concepto, el comando blit con el argumento del color lo que hace es convertir en translucido solo el color que tu le asignes con el nivel de transparencia del canal alfa.
Find all posts by this user
Quote this message in a reply
05-13-2016, 10:16 PM (This post was last modified: 06-14-2016 04:38 AM by Carlos295pz.)
Post: #6
RE: translucent grob
Los colores en la calculadora son opacos o transparentes, es posible crear GROB's con fondo transparente sin hacer uso de la inserción con omisión de color del comando BLIT, pero esto no se puede definir desde un programa con RECT(Realiza cambio o mezcla si se indicó alfa), sí es posible pero generalmente es el resultado de pasar una imagen PNG a una variable gráfica como:
PHP Code:
G1:=AFiles("icon.png"); 

Se debe tener en cuenta que el canal alpha para interpretado en la calculadora es en base a un color de 16bits, A1R5G5B5, por esta razón el alpha o es visible o no visible, por lo general si un pixel del GROB no es visible, RGB tienen su equivalencia en negro, por lo que un color negro con un alpha no visible equivale a #8000h o #1 00000 00000 00000b (junto).

Para conseguir crear un GROB con píxeles con el canal alpha activado se puede hacer uso del DIMGROB, usar una definición general como DIMGROB_P(G?,X,Y,RGB(0,0,0,>127)) o DIMGROB_P(G?,X,Y,#FF000000h) [No posible en 10077], también asumiendo el color de cada pixel cada 16bits de datos. Por ejemplo:
Code:
//G1:2x2 (Todos sus píxeles negros pero no visibles)
DIMGROB_P(G1,2,2,{#80008000h,#80008000h});

//G2:4x4 (Igual que G1 pero definido con datos de 64bits);
DIMGROB_P(G2,4,4,{#8000800080008000:64h,#8000800080008000:64h,#8000800080008000:​64h,#8000800080008000:64h});

Es decir que aún si tenemos un GROB que posee pixeles no visibles, estos tienen colores, por lo que se recomienda reemplazarlos, puesto que si se combina un color difuminado como en este ejemplo:
Code:
DIMGROB_P(G1,2,2,{#80008000h,#80008000h});
RECT_P(G1,RGB(255,0,0,150));
El resultado será la activación de la visibilidad de los píxeles comprendidos y la combinación del rojo translúcido con un color negro (O el color no visible que tenga el pixel), color + negro=negro.

Quote:Más ejemplos:
Azul(Translúcido)+Amarillo = Verde
Amarillo(Translúcido)+Blanco = Amarillo claro
Rojo(Translúcido)+Negro = Negro (Toda mezcla con negro es negro por obvias razones)

Viga C | TD | FB
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)