PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Screen Shot
Screen Shot
Débuté par Wagner Campos de Almeida, 22 mai 2017 22:35 - 10 réponses
Posté le 22 mai 2017 - 22:35
Boa tarde a todos!

Estou tentando criar uma aplicação mobile que gere o resultado de uma simulação em uma imagem, para que possa ser enviada via Whatsapp e afins.
Tentei utilizar o Supercontrol "Screen shot", criando uma tela com os resultados e printando a tela, porém a funcionalidade funciona no simulador, mas não funciona no Android.
Consegui resumir em 3 etapas como segue abaixo:

IMG_SC..Width=WinOutWidth() ; IMG_SC..Height=WinOutHeight() --> Define a largura e o comprimento do componente imagem, com o tanho total da tela.

dCopyBlt(copyScreen,IMG_SC,copySrcCopy,WinOutXPos(),WinOutYPos(),WinOutHeight(),WinOutWidth()) --> Copia a tela e coloca essa imagem no componente imagem.

dSaveImageJPEG(IMG_SC,sNameImageFile,100) --> Salva o conteúdo do componente imagem (print) no disco.


Alguém teria alguma dica sobre somo fazer o Screen shot funcionar no Android ou como gerar uma imagem com a informações desejadas?

Grato,

Wagner Campos.
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 23 mai 2017 - 20:00
Prezado Wagner

// Copies the screen into an Image variable
MyImage is Image
MyImage = dCopyScreenImage()
// Assignment in an Image control
IMG_Image = MyImage


https://help.windev.com/en-US/…

Sintaxe

<Resultado> = dCopyScreenImage ([<X> [, <Y> [, <Largura> [, <Altura>]]])

<Resultado>: Imagem ou Binary Buffer variável

Nome da variável Image que conterá a captura de tela

Memória binária correspondente à imagem. Esse buffer pode ser atribuído diretamente a um controle Image.

<X>: Número inteiro opcional

Coordenada X (em pixels) do canto superior esquerdo da área da tela para copiar (0 por padrão, correspondente ao canto superior esquerdo da tela).

<Y>: Número inteiro opcional

Coordenada Y (em pixels) do canto superior esquerdo da área da tela para copiar (0 por padrão, correspondente ao canto superior esquerdo da tela).

<Largura>: Número inteiro opcional

Largura (em pixels) da área da tela para copiar (largura da tela por padrão).

<Height>: Número inteiro opcional

Altura (em pixels) da área da tela para copiar (altura da tela por padrão).

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 23 mai 2017 - 20:01
Atenção

Procure evitar vários post sobre o mesmo assunto

ok

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 23 mai 2017 - 20:10
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;


PUBLIC static void ScreenCapture(string args[]) throws
AWTException, IOException
{

// capture the whole screen
BufferedImage screencapture = new Robot().createScreenCapture(
new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())
);

// Save as JPEG
File File = new File("screencapture.jpg");
ImageIO.write(screencapture, "jpg", File);

// Save as PNG
File File = new File("screencapture.png");
ImageIO.write(screencapture, "png", File);
}



To capture a specific area
BufferedImage screencapture = new Robot().createScreenCapture(
new Rectangle( 15, 15, 150, 150));


To capture a specific visual object
BufferedImage Image = new Robot().createScreenCapture(
new Rectangle( myframe.getX(), myframe.getY(),
myframe.getWidth(), myframe.getHeight() ) );


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 23 mai 2017 - 20:12
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 23 mai 2017 - 20:14
package net.codejava.graphics;

import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
* This program demonstrates how to capture a screenshot (full screen)
* as an Image which will be saved into a File.
* @author www.codejava.net
*
*/
PUBLIC class FullScreenCaptureExample {

PUBLIC static void main(string[] args) {
try {
Robot robot = new Robot();
string format = "jpg";
string fileName = "FullScreenshot." + format;

Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
ImageIO.write(screenFullImage, format, new File(fileName));

System.out.println("A full screenshot saved!");
} catch (AWTException | IOException ex) {
System.err.println(ex);
}
}
}


DEFINIÇÃO DA AREA
Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle captureRect = new Rectangle(0, 0, screenSize.width / 2, screenSize.height / 2);


CODIGO COMPLETO
package net.codejava.graphics;
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
* This program demonstrates how to capture screenshot of a portion of screen.
* @author www.codejava.net
*
*/
PUBLIC class PartialScreenCaptureExample {

PUBLIC static void main(string[] args) {
try {
Robot robot = new Robot();
string format = "jpg";
string fileName = "PartialScreenshot." + format;

Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle captureRect = new Rectangle(0, 0, screenSize.width / 2, screenSize.height / 2);
BufferedImage screenFullImage = robot.createScreenCapture(captureRect);
ImageIO.write(screenFullImage, format, new File(fileName));

System.out.println("A partial screenshot saved!");
} catch (AWTException | IOException ex) {
System.err.println(ex);
}
}
}


http://www.codejava.net/java-se/graphics/how-to-capture-screenshot-programmatically-in-java

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 23 mai 2017 - 20:16
VC DEVE CLICAR NO TOPO DO CODIGO
ONDE TEM WLE DAR 2 CLICK
VAI MUDAR PARA JAVA
ISSO NUMA PROCEDURE NOVA

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 23 mai 2017 - 20:18
OU...

https://stackoverflow.com/questions/58305/is-there-a-way-to-take-a-screenshot-using-java-and-save-it-to-some-sort-of-image

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File; 
import javax.imageio.ImageIO;
import javax.swing.*;  
public void captureScreen(String fileName) throws Exception {
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage capture = new Robot().createScreenCapture(screenRect);
ImageIO.write(capture, "bmp", new File(args[0]));
}


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File; 
import javax.imageio.ImageIO;
import javax.swing.*;  
public void captureScreen(String fileName) throws Exception {
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   Rectangle screenRectangle = new Rectangle(screenSize);
   Robot robot = new Robot();
   BufferedImage image = robot.createScreenCapture(screenRectangle);
   ImageIO.write(image, "png", new File(fileName));
}


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 23 mai 2017 - 20:20
Membre enregistré
123 messages
Popularité : +46 (46 votes)
Posté le 25 mai 2017 - 20:45
criar uma procedure Global do tipo JAVA e colocar o seguinte código
import java.util.Date;
import java.io.File;
import android.graphics.Bitmap;
import android.view.View;
import java.io.FileOutputStream;
import android.os.Environment;
import android.util.Log;
public static boolean tela(String pasta_a_salvar, String nome_img)
{
try {
// caminho da IMG
String mPath = pasta_a_salvar + "/" + nome_img + ".jpg";

// criar bitmap da tela
View v1 = getCurrentActivity().getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);

//criar o arquivo vazio
File imageFile = new File(mPath);

//jogar pro arquivo a IMG
FileOutputStream outputStream = new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
return true;
} catch (Throwable e) {
// aqui si estiver com o CAT (device monitor) pode ver log de erro
e.printStackTrace();
return false;
}
}



dai na Janela onde quiser usar basta colocar em um Botão este codigo
s_folder is string
s_name is string
s_folder = fCurrentDir() //aqui vai o diretorio onde vai ser salvo a imagen
s_name = SysDateTime() //aqui o nome do arquivo >>> e extensão ja esta inclusa no codigo JAVA (.jpg)
IF tela(s_folder,s_name) THEN
ToastDisplay("PrintScreen OK",toastShort,vaBottom,haCenter)
ELSE
Error("Erro ao Tirar PrintScreen")
END

TAGS: printscreen, screenshot, tela, captura, image
--
Atte. Willian Fernando
Message modifié, 25 mai 2017 - 20:53
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 25 mai 2017 - 21:21
tem que ter privilegio de WRITE_EXTERNAL_STORAGE

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 25 mai 2017 - 21:23
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 25 mai 2017 - 22:42
Para abrir a imagem do printscreen:

IF fFileExist(s_folder + "/" + s_name + ".jpg") THEN
Info("Arquivo existe")
ShellExecute(s_folder + "/" + s_name + ".jpg")
ELSE
Info("Arquivo não existe")
END


"/" = sistema operacional do android é linux a barra de diretório é = /

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 25 mai 2017 - 22:43
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 25 mai 2017 - 22:46
COMPARTILHAR NO WHATSAPP

Android
// Share an image displayed in an Image control
sPath is string = CompleteDir(SysDirStorageCard()) + "MyImage.png"
IF dSaveImagePNG(IMG_Image, sPath) = True THEN
NextTitle("Sharing an image")
StartShare(sPath)
END


iPhone/iPad
// Share an image displayed in an Image control
sPath is string = CompleteDir(fCurrentDir()) + "MyImage.png"
IF dSaveImagePNG(IMG_Image, sPath) = True THEN
NextTitle("Sharing an image")
StartShare(sPath)
END


// Share a text displayed in an edit control
IF StartShare(shareText, EDT_Edit) = False THEN
Error(ErrorInfo())
END


https://help.windev.com/en-US/…

https://help.windev.com/en-US/?1000020620&name=StartShare


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 25 mai 2017 - 22:48