Categorie
Associazione

1° Meeting AUGI 2024

L’associazione AUGI – Appeon User Group Italiano, il principale punto d’incontro italiano per gli sviluppatori ed utilizzatori dei prodotti Appeon, è lieta di invitarti al suo evento annuale che si terrà online il 1° marzo 2024 alle ore 17:00 al link: https://meet.google.com/uzu-rgmq-yqh.

Agenda dell’evento

  1. Presentazione dell’Associazione AUGI
    • Scopri la storia e l’evoluzione dell’Appeon User Group Italiano
    • Conosci i membri dell’associazione e le risorse disponibili per gli associati
  2. Scopi e obiettivi dell’AUGI
    • Approfondisci la missione dell’AUGI nel promuovere la conoscenza e lo sviluppo di competenze relative ai prodotti Appeon quali PowerBuilder, PowerServer e SnapDevelop
    • Esplora le opportunità di networking e collaborazione tra i membri
  3. Campagna di Adesione 2024
    • Scopri i dettagli della campagna di adesione all’associazione per il 2024 ed i vantaggi per i membri
  4. Sessione di Domande e Risposte
    • Metti in chiaro dubbi e curiosità con una sessione interattiva di domande e risposte sia sull’associazione che sui prodotti Appeon
    • Fornisci riscontri e suggerimenti per migliorare l’esperienza dell’associazione

Partecipa a questo evento imperdibile per connetterti con la principale community indipendente italiana dedicata agli strumenti di sviluppo Appeon e contribuire alla crescita della tua esperienza con i prodotti Appeon!

Come partecipare

La partecipazione è libera e gratuita.

Grazie per il tuo interesse e il tuo continuo supporto. Non vediamo l’ora di condividere con te le ultime novità e progetti dell’AUGI!

Categorie
PowerBuilder Tips

Da Byte Array a Image

In diversi contesti, ad esempio a seguito di chiamate ad API web, si rende necessario convertire un’immagine restituita come byte array nel corrispondente file. Vediamo in questo articolo come fare in C# e PB.

Indice

Introduzione
L’origine in C#
In Powerbuilder: array e blob
Consume in Powerbuilder

Introduzione

Un webservice che ritorna un’immagine è una funzionalità molto utile in molti casi d’uso. Ad esempio, può essere utilizzato per fornire immagini dinamiche in un’applicazione web o mobile, come per esempio la generazione di miniature di immagini o l’applicazione di filtri.

Un webservice che ritorna un’immagine può essere utilizzato per integrare immagini in altri sistemi, come la generazione di report, la creazione di documenti o la generazione di mappe personalizzate.

In sintesi, un webservice che ritorna un’immagine consente una maggiore flessibilità nella gestione delle immagini e consente di integrarle in altri sistemi in modo semplice e scalabile.

Questa funzionalità permette di mantenere le immagini separate dalla logica dell’applicazione , ed è utile quando l’immagine deve essere fornita da un sistema separato o per evitare che l’immagine stessa venga utilizzata da più sorgenti senza che le modifiche apportate all’immagine originale vengano riprodotte in tutte le applicazioni che la utilizzano.

L’origine in C#

In C#, è possibile convertire un’immagine in un array di byte utilizzando la classe System.IO.MemoryStream e la classe System.Drawing.Image.

La classe System.IO.MemoryStream è un flusso di memoria che consente di creare, gestire e utilizzare un buffer di memoria come se fosse un flusso tradizionale. La classe System.Drawing.Image è invece utilizzata per creare, gestire e utilizzare immagini.

Per convertire un’immagine in un array di byte, è possibile utilizzare il seguente codice:

using System.Drawing;
using System.IO;

// Carica l'immagine da convertire
Image image = Image.FromFile("path/to/image.jpg");

// Crea un nuovo flusso di memoria
using (MemoryStream ms = new MemoryStream())
{
    // Salva l'immagine nel flusso di memoria
    image.Save(ms, ImageFormat.Jpeg);
    // Recupera i dati del flusso di memoria come array di byte
    byte[] imageData = ms.ToArray();
}

Il codice sopra carica un’immagine utilizzando la classe System.Drawing.Image.FromFile() e la salva in un nuovo flusso di memoria utilizzando il metodo Save().

Infine utilizzando il metodo ToArray() del memorystream si può recuperare i dati come array di byte.
È possibile utilizzare anche il metodo Image.Save() per salvare l’immagine in un file e utilizzare la classe FileStream per leggere i dati del file in un array di byte.

using System.IO;

//Salva l'immagine nel file
image.Save("path/to/image.jpg", ImageFormat.Jpeg);

// Crea un nuovo FileStream per leggere i dati dell'immagine
using (FileStream fs = new FileStream("path/to/image.jpg", FileMode.Open, FileAccess.Read))
{
    // Crea un array di byte per contenere i dati dell'immagine
    byte[] imageData = new byte[fs.Length];
    // Legge i dati dell'immagine nel array di byte
    fs.Read(imageData, 0, (int)fs.Length);
}

Questo codice utilizza la classe System.IO.FileStream per leggere i dati dell’immagine in un array di byte. Il FileStream viene utilizzato per aprire il file in modalità lettura e utilizzare il metodo Read() per leggere i dati nel array di byte.

In entrambi i casi il risultato finale è un array di byte che contiene i dati binari dell’immagine e può essere utilizzato per scopi come la trasmissione dei dati, la memorizzazione in un database o qualsiasi altro scopo per cui si voglia utilizzare i dati binari dell’immagine.

È importante notare che ci sono diverse proprietà e metodi in C# per gestire i formati delle immagini e la loro conversione. Ad esempio, la classe Image fornisce il metodo Save() con il quale è possibile salvare l’immagine in diverse formati come Jpeg, Png, Gif e molti altri. In questo modo, è possibile scegliere il formato più appropriato per il proprio progetto.

Inoltre, si può utilizzare la classe ImageConverter per convertire un’immagine in un array di byte:

ImageConverter converter = new ImageConverter();
byte[] imageData = (byte[])converter.ConvertTo(image, typeof(byte[]));

In conclusione, convertire un’immagine in un array di byte in C# è un’operazione semplice che può essere effettuata utilizzando la classe System.IO.MemoryStream o la classe System.IO.FileStream e utilizzando le proprietà e i metodi della classe System.Drawing.Image. È importante considerare il formato desiderato per l’immagine e la gestione della memoria quando si lavora con grandi quantità di dati. Utilizzando le funzionalità appropriate e una buona gestione della memoria, è possibile creare soluzioni efficaci e scalabili per la gestione delle immagini in C#.

Inoltre, si può utilizzare la classe ImageConverter che fornisce un modo semplice e veloce per effettuare la conversione, senza doversi preoccupare di utilizzare MemoryStream o FileStream.

In generale, è importante scegliere la soluzione più appropriata per il proprio progetto, tenendo conto delle esigenze specifiche, delle prestazioni, della memoria e della compatibilità dei formati. E’ sempre una buona pratica effettuare test delle prestazioni e verificare la corretta gestione della memoria per garantire che la soluzione scelta sia adeguata per le esigenze del progetto.

In Powerbuilder: array e blob

PowerBuilder è un ambiente di sviluppo integrato (IDE) utilizzato per creare applicazioni aziendali. Tra le sue funzionalità c’è la possibilità di lavorare con array di dati e Blob (binary large object). Un array è una raccolta ordinata di dati del medesimo tipo, mentre un Blob è un tipo di dato che può contenere una grande quantità di dati binari, come immagini, documenti o file audio. In alcuni casi, potrebbe essere necessario convertire un array in un blob per la memorizzazione o la trasmissione dei dati.

La conversione di un array in un Blob può essere utile in diversi casi. Ad esempio, potrebbe essere necessario memorizzare un’immagine in un database, ma le immagini sono tipicamente rappresentate come array di byte. In questo caso, è necessario convertire l’array in un Blob prima di memorizzarlo nel database. Un altro utilizzo potrebbe essere la trasmissione di dati tramite una connessione di rete, in quanto i dati binari (come i file audio, video o immagini) possono essere più facilmente trasmessi come Blob rispetto ad array di byte.

Per convertire un array in un blob in PowerBuilder, è necessario utilizzare la funzione Blob(). Questa funzione accetta come parametro un array e restituisce un oggetto blob che rappresenta i dati dell’array.

// Creiamo un array di interi
integer li_array[]
li_array[1] = 1
li_array[2] = 2
li_array[3] = 3

// Convertiamo l'array in un blob
blob lb_blob
lb_blob = Blob(li_array)

Nell’esempio sopra, l’array “li_array” è un array di interi che contiene i valori 1, 2 e 3. La funzione Blob() viene utilizzata per convertire l’array in un oggetto blob “lb_blob” contenente i dati dell’array.

Una volta convertito l’array in un blob, è possibile utilizzarlo per la memorizzazione o la trasmissione dei dati. Ad esempio, si può memorizzare un blob in una colonna BLOB del database per salvarvi le immagini, i file audio o qualsiasi altro tipo di dati binari. Oppure, si può inviare un blob attraverso una connessione di rete, utilizzando un protocollo come FTP o HTTP, per trasmettere i dati.

D’altra parte è possibile convertire un blob in un array e viceversa.

Blob lblb_1
Any a
byte lbyte_array[], lbyte_array2[]

// initialize array
lbyte_array[] = {1,10,100,200,255}
a = lbyte_array
lblb_1 = Blob(a)
lbyte_array2[] = GetByteArray(lblb_1)

La conversione tra array e blob può essere utile in alcune situazioni specifiche in cui i dati devono essere memorizzati o trasmessi in modo differente rispetto alla loro forma originale.

In conclusione, la conversione tra array e blob in PowerBuilder è una funzionalità utile che può essere utilizzata in situazioni specifiche per la memorizzazione o la trasmissione dei dati. Tuttavia, è importante essere consapevoli delle implicazioni della conversione e valutare se sia la scelta più appropriata per il proprio progetto. Inoltre, utilizzando le funzioni appropriate, è possibile manipolare i dati all’interno del blob in modo più efficiente.

Consume in Powerbuilder

Capito quanto sopra, la visualizzazione di un’immagine che arriva da una byte array passando per un blob è un’operazione semplice e comune nello sviluppo di applicazioni.

Il primo passo per utilizzare questa funzione è quello di creare un oggetto BLOB a partire dall’array di byte. È possibile farlo utilizzando la funzione “Blob()”, passando come parametro l’array di byte. Una volta creato l’oggetto BLOB, è possibile assegnarlo a un oggetto picture.

Il codice seguente mostra come convertire un array di byte in un’immagine in PowerBuilder:

p_1.setpicture(lblob_raw)
Categorie
PowerBuilder Tips

MySQL & PB: ID autoincrementali

Gli ID autoincrementali sono tra i campi più utilizzati come chiavi primarie nelle tabelle dei database relazionali; hanno il pregio di essere compatti, facili da leggere e generati dal database, quindi automaticamente univoci.

PowerBuilder offre un ottimo supporto agli ID autoincrementali all’interno delle datawindow e dei datastore. Basta infatti specificare, nella schermata Update Properties del DataWindow Painter, qual è la Identity Column della tabella perchè PB si occupi – dopo una INSERT – di recuperare il valore generato dal database e inserirlo nel corrispondente campo della datawindow o del datastore.

Categorie
Associazione

Sviluppatori PowerBuilder italiani, unitevi!

Nel Marzo del 2018 partecipavo all’ Appeon PowerBuilder Italian Regional Seminar organizzato dalla Softpi all’Hotel Boscolo di Firenze in cui si illustravano le novità della Release 2017 di Powerbuilder e la Roadmap di Appeon per lo sviluppo del prodotto.