giovedì 16 marzo 2023

C# .Net 7 lettura e creazione barcode anche nei file PDF




In questo articolo vedremo come utilizzare la libreria Zxing, per la generazione e lettura dei codici a barra e della libreria gratuita PdfSharp che permette la gestione dei file pdf.
L’articolo vuole fornire al lettore la creazione e lettura dei codice a barre, detti barcode, tramite applicazioni di tipo “Windows Application” con la versione del Framework 7, utilizzando l’ambiente di sviluppo Visual Studio 2022 Community ed il linguaggio di programmazione C#.
In particolare vedremo come si creano codici a barra dal testo e come leggere codici a barra da un file immagine o direttamente da un file di tipo Pdf.

Creazione del progetto

Si crea un nuovo progetto di tipo “App  Windows Forms”, assegnando un nome al progetto ed una determinata cartella (anche quella di default va bene) e selezionando come versione del Framework la 7.
Dopo aver creato il progetto posizioniamo nella form, due caselle di testo, tre controlli di tipo button, ed un controllo picturebox1, il tutto come mostrato in figura 1.
Figura 1 – La finestra con la generazione del codice a barra

Terminata la fase di posizionamento dei controlli, non resta che aggiungere al nostro progetto i riferimenti Nuget, delle librerie, in particolare della libreria Zxing, che al momento scriviamo è la 0.16.8 (https://www.nuget.org/packages/ZXing.Net/0.16.8) e due librerie per gestire i riferimenti grafici, che sono ZXing.Net.Bindings.ImageSharp e ZXing.Net.Bindings.Windows.Compatibility queste per gestire i codici a barra, mentre per i file pdf, la libreria PdfSharp https://www.nuget.org/packages/PDFsharp/1.50.5147 che al momento della pubblicazione dell’articolo è la versione 1.50.5147 , i componenti da installare devono essere quelli presenti in figura 2.

Figura 2 - La finestra Nuget con i componenti installati.

Terminata l’installazione dei componenti non resta che scrivere il codice.

Stesura del codice

Passiamo in visualizzazione codice in modo che possiamo scrivere le prime istruzioni di codice, in particolar modo aggiungere lo spazio dei nomi delle classi delle librerie.
Per passare in visualizzazione codice, o tramite la voce “Visualizzazione codice (tasto F7) “ oppure tramite doppio click sulla form, in modo da passare nell’evento load della form.
In alto sopra ad ogni dichiarazione, dobbiamo scrivere lo spazio dei nomi per la gestione del barcode e dei file pdf, tramite le librerie aggiunte prima.
Sopra aggiungiamo i seguenti nomi di spazio.


C#

using PdfSharp.Pdf;

using PdfSharp.Pdf.Advanced;

using PdfSharp.Pdf.IO;

using System.Drawing;

using ZXing;

using ZXing.Client.Result;

using ZXing.Common;

using ZXing.ImageSharp;

using ZXing.PDF417.Internal;

using ZXing.QrCode;

using ZXing.QrCode.Internal;

using ZXing.Rendering;

using ZXing.Windows.Compatibility;





Terminata questa parte, passiamo in visualizzazione grafica e facciamo doppio click sul primo pulsante, quello in alto, che permetterà di generare il barcode e visualizzarlo nel controllo picturebox.
Al doppio click sul pulsante, si passerà in visualizzazione codice, dell’evento click del pulsante, tramite la classe barcodeWriter, impostando alcune proprietà come il formato, il tipo di immagine bitmap e le dimensioni andremo ad impostare il formato del barcode, mentre con il metodo “Write” passando il testo presente nella casella di testo, andremo generare un oggetto di tipo Bitmap con l’immagine delle barre del testo passato. 
L’immagine Bitmap verrà salvata anche sul pc in un determinato percorso ed in formato “Jpeg”,
Di seguito si riporta il codice delle suddette operazioni.


C#

private void BtnGenera_Click(object sender, EventArgs e)

        {

            try

            {

 

 

                var GeneraBarcode = new BarcodeWriter

                {

                    Format = BarcodeFormat.CODE_128,

                    Options = new EncodingOptions

                    {

                        Height = 100,

                        Width = 100

                    },

                    Renderer = (IBarcodeRenderer<Bitmap>)Activator.CreateInstance(Renderer)

                };

                var risultato = GeneraBarcode.Write(TxtTesto.Text);

                var barcodeBitmap = new Bitmap(risultato);

                pictureBox1.Image = risultato;

                barcodeBitmap.Save(@"C:\Varie\Barcode2.Jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);

 

 

 

 

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

 

 

 

        }


Ora non resta che testare il codice appena scritto, facendo attenzione a cambiare il percorso dove salvare il file, per testare quanto scritto.
Appurato la correttezza del codice, non resta che scrivere il codice per la selezione del file per la lettura del codice a barra.
Nel pulsante che si trova accanto alla seconda casella di testo, che è stata denominata “BtnCerca”, verrà una visualizzata una dialog per selezionare il file immagine o pdf al quale estrapolare il testo presente nell’immagine del barcode.
Facciamo doppio click su tale pulsante, in modo da passare in visualizzazione codice dell’evento del pulsante, utilizzando la classe dialog, impostando un filtro, riporteremo nella casella accanto, il percorso e nome del file selezionato.
Qui di seguito il frammento di codice delle suddette operazioni.


C#

  private void BtnCerca_Click(object sender, EventArgs e)

        {

             using (OpenFileDialog openDlg = new OpenFileDialog())

            {

                openDlg.FileName = TxtPercorsoNomeFile.Text;

                openDlg.Multiselect = false;

                openDlg.Filter = "PNG Files (*.png)|*.png|BMP Files (*.bmp)|*.bmp|TIFF Files (*.tif)|*.tif|JPG Files (*.jpg)|*.jpg|JEPG Files (*.jpeg)|*.jpeg|PDF Files (*.pdf)|*.pdf|Tutti Files (*.*)|*.*";

                if (openDlg.ShowDialog(this) == DialogResult.OK)

                {

                    TxtPercorsoNomeFile.Text = openDlg.FileName;

                }

             }

        }





Terminata la stesura della selezione dei file, non resta che scrivere il codice di alcune funzioni per la lettura del codice a barre delle immagini presenti nel file di tipo “Pdf”. Rimanendo sempre in visualizzazione codice, scriviamo una funzione che dato un oggetto di tipo “PdfDictionary” restituisce un oggetto di tipo Bitmap.
Si riporta qui di seguito il frammento della funzione.


C#

private   Bitmap EsportaImmagineJpeg(PdfDictionary image)

        {

            byte[] stream = image.Stream.Value;

            using (var memoryStream = new MemoryStream())

            {

                using (var binaryWriter = new BinaryWriter(memoryStream))

                {

                    binaryWriter.Write(stream);

                    memoryStream.Position = 0;

                    var result = (Bitmap)Bitmap.FromStream(memoryStream);

                    binaryWriter.Close();

 

                    return result;

                }

            }

        }


Continuando a rimanere in visualizzazione codice scriviamo una funzione che richiama quella precedente, in base al tipo di oggetto rilevato nel file pdf.
Di seguito si riporta il codice della funzione che estrapola da un oggetto di tipo PdfDictionary un oggetto di tipo immagine

C#

  Bitmap EsportaImmagine(PdfDictionary Immagine)

        {

            var TipoImmagine = string.Empty;

            var objFilter = Immagine.Elements.GetObject("/Filter");

            if (objFilter is PdfArray)

            {

                TipoImmagine = ((PdfArray)objFilter).Elements.GetName(0);

                 

            }

            else

            {

                TipoImmagine = Immagine.Elements.GetName("/Filter");

            }

            switch (TipoImmagine)

            {

                case "/DCTDecode":

                    return EsportaImmagineJpeg(Immagine);

 

                case "/FlateDecode":

                    break

 

                case "/JBIG2Decode":

                    break;

            }

            return null;

        }

 

Ora dobbiamo scrivere un’ultima funzione che effettua la lettura di tutte le pagine in cerca di oggetti che possono essere immagini.
La funzione qui di seguito, effettua su tutte le pagine presenti nel file “Pdf” la lettura dei vari oggetti, e verificare se l’oggetto individuato è di tipo immagine, su questa, ne estrapola l’immagine e poi tramite la classe per la gestione del barcode estrapola il testo qualora è un’immagine barcode.
La gestione dei file pdf avviene tramite le classi presenti nella libreria PdfSharp.

Di seguito si riporta il frammento di codice della funzione per la lettura dei vari oggetti presenti nel file pdf.


C#

public IEnumerable<Bitmap> OttieniImmaginiDaPdf(string PercorsoNomeFile)

        {

            PdfDocument document = PdfReader.Open(PercorsoNomeFile);

 

            //Effettuo un ciclo su tutte le pagine

            foreach (PdfPage pagina in document.Pages)

            {

                //Ottengo la risorsa per ogni  pagina

                PdfDictionary resources = pagina.Elements.GetDictionary("/Resources");

                if (resources != null)

                {

                    //Rilevo l'oggetto per la risorsa

                    PdfDictionary xObjects = resources.Elements.GetDictionary("/XObject");

                    if (xObjects != null)

                    {

                        var Elementi = xObjects.Elements.Values;

                        //Ciclo per ogni elemento trovato

                        foreach (PdfItem item in Elementi)

                        {

                            PdfReference pdfRefence = item as PdfReference;

                            if (pdfRefence != null)

                            {

                                PdfDictionary pdfDictionary = pdfRefence.Value as PdfDictionary;

                                 //Verifico che è un immagine

 

                                if (pdfDictionary != null && pdfDictionary.Elements.GetString("/Subtype") == "/Image")

                                {

                                    var bitmap = EsportaImmagine(pdfDictionary);

                                    if (bitmap != null)

                                    {

                                        yield return bitmap;

                                    }

                                }

                            }

                        }

                    }

                }

            }

        }




Ora passiamo in visualizzazione grafica in modo da fare doppio click sul pulsante situato sotto la seconda casella di testo, l’ultimo rimasto, che utilizzeremo per rilevare il testo presente nel barcode.
Passando in visualizzazione codice dell’evento click del pulsante, dobbiamo scrivere il codice che estrapola il testo dal file immagine, in particolar modo tramite il metodo “Decode” della classe “BarcodeReader” estrapoliamo il testo presente nell’immagine. Prima di utilizzare questo codice, verifichiamo se il file è un pdf oppure immagine, in caso che è un file, rileva le varie immagini ed estrapola il testo, qualora non siano codici a barre, verrà restituito null, altrimenti il testo presente nel codice a   barra.
Tramite la proprietà “Text” dell’oggetto restituito del metodo “Decode”, verrà riportato nella casella di testo, il contenuto del barcode.
Di seguito si riporta il frammento di codice delle suddette operazioni da inserire nell’evento click del pulsante.


C#

private void BtnLeggi_Click(object sender, EventArgs e)

        {

            try

            {

 

                 

                BarcodeReader barcodeReader = new BarcodeReader();

                 

                if (TxtPercorsoNomeFile.Text.Contains(".pdf"))

                {

                    var immagini = OttieniImmaginiDaPdf(TxtPercorsoNomeFile.Text);

                    foreach (var immagine in immagini)

                    {

                         

                        var testoRilevato = barcodeReader.Decode(immagine);

                        if (testoRilevato != null)

                        {

                            TxtTesto.Text = testoRilevato.Text;

                        }

 

                    }

                }

                else

                {

                    Bitmap bitmap = new Bitmap(TxtPercorsoNomeFile.Text);

                    var testoRilevato = barcodeReader.Decode(bitmap);

 

                    if (testoRilevato != null)

                    {

                        TxtTesto.Text = testoRilevato.Text;

                    }

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

 





Prima di effettuare le prove, dobbiamo creare un file immagine con barcode, che possiamo utilizzare quello con cui abbiamo scritto il codice per la creazione, mentre per il file pdf, possiamo creare un file tramite Word o altro programma che permette la creazione dei file pdf, aggiungendo il file immagine del barcode creato in precedenza.

Conclusioni

L’articolo ha voluto fornite al lettore un’ampia gestione dei barcode utilizzando le librerie gratuite utilizzabili anche in ambito commerciale come la libreria PdfSharp.
Il lettore dalla base tecnica fornito può ampliare con funzionalità avanzate o scenari più complessi l’utilizzo di queste librerie.
Il frammento di codice si può utilizzare anche con altre versione del Framework, precedenti alla 7, quale la 6 o 5 ed anche in ambito Web, come la tecnologia Asp.Net, apportando le modifiche richieste per lo scenario web.
La libreria PdfSharp offre una serie di classi, offrendo al programmatore funzionalità anche avanzate e soprattutto facilitando nella stesura del codice.

mercoledì 15 marzo 2023

HTML5 game engine componente gratuito per creazione di video giochi

 

MelonJs è un componente gratuito per la creazione di video giochi in ambito web.

Il componente è un Game engine in Javascript per facilitare lo sviluppo di video giochi.

Per maggiori informazioni e download visitate il seguente sito https://github.com/melonjs/melonJS 

martedì 14 marzo 2023

.Net Componente gratuito per la gestione e creazione dei file pdf QuestPDF



QuestPdf è un componente gratuito ed open source https://www.questpdf.com/ con il quale realizzare file pdf.
Il componente inoltre permette durante la stesura del codice, l'anteprima di come verrà realizzato il file, sul repository GIT, qui https://github.com/QuestPDF/QuestPDF è possibile consultare il sorgente e qualche frammento di codice di utilizzo, mentre qui https://www.questpdf.com/quick-start la possibilità di consultare la guida.

Un componente molto interessante e potente.

lunedì 13 marzo 2023

Estrapolare il testo dai video freesubtitles

Altro interessante strumento online quello offerto dal sito Freesubtitles, qui https://freesubtitles.ai/ il sito, che offre la possibilità di impostare i sottotitoli ad un video caricato ed estrapolare dal video il testo in diverse lingue.
Il download del file (in vari formati tra cui anche il testo) è gratuito e non richiede nessuna registrazione o email. 
Ottimo strumento online.

domenica 12 marzo 2023

Il provider 'DB2OLEDB' non è registrato nel computer locale.

Quando si realizzano applicazioni .Net con l'utilizzo di database DB2, durante l'esecuzione del progetto mentre si effettua la connessione al database, può verificarsi l'errore di "Il provider 'DB2OLEDB' non è registrato nel computer locale.". Questo è dovuto al fatto che sul pc non è installato il provider, ossia i file che permettono di collegarsi al database "DB2".

La soluzione è quella di installare il provider, dal seguente sito https://www.microsoft.com/it-IT/download/details.aspx?id=100917 selezionando se la macchina è a 32 o 64 bit.



sabato 11 marzo 2023

sito di immagini creati tramite intelligenza artificiale playgroundai

 


In questi ultimi mesi molti i siti sulla creazione delle immagini tramite intelligenza artificiale.

Il sito PlayGroundAI, visibile qui https://playgroundai.com/ sfrutta l'intelligenza artificiale per creare immagini, che si possono scaricare gratuitamente senza registrazione e senza lasciare email.

Il sito è in lingua inglese e facilmente utilizzabile.


venerdì 10 marzo 2023

Lista antivirus gratuiti

Di seguito una lista di alcuni antivirus gratuiti, si consiglia sempre di installare un solo antivirus e tenerlo aggiornato.


Avira https://www.avira.com/it/downloads (sezione per la casa, e ci sono anche versioni per il Mac)


giovedì 9 marzo 2023

Download gioco Call of the Sea

 



Call of the Sea è un gioco in lingua italiana di avventura con una grafica molto ben fatta.

Il gioco è gratuito e senza limitazioni per sistemi operativi Windows, fino al 16 marzo 2023 si potrà scaricare gratuitamente, dopo tale data il download sarà a pagamento.

Per maggiori informazioni e download visitare il seguente sito Call of the Sea | Acquistalo e scaricalo subito sull'Epic Games Store 

Download ebook Blazor WebAssembly

 

Disponibile gratuitamente un ebook di circa 100 pagine in formato pdf o per dispositivi mobile, sulla programmazione Blazor.

L'ebook è in lingua inglese con diversi esempi di codice.

Per maggiori informazioni e download, visitate il seguente sito https://www.syncfusion.com/succinctly-free-ebooks/blazor-webassembly-succinctly

mercoledì 8 marzo 2023

Componente gratuito .Net per la gestione Bluetooth, Irda, NFC

Il componente gratuito 32Feet.Net  https://inthehand.com/components/32feet/ permette la gestione delle comunicazioni tramite Nfc, Bluetooth e irda nella tecnologia .Net.
Qui https://github.com/inthehand/32feet è possibile consultare il progetto open source in Git e le indicazioni sull'utilizzo e l'aggiunto a progetti .Net.

martedì 7 marzo 2023

Download gioco PUBG BATTLEGROUNDS

 


Disponibile gratuitamente il gioco di combattimento Pubs Battlegrounds,  con una buona giocabilità ma soprattutto una grafica molto accattivante.

Il gioco in lingua italiana è per sistemi operativi Windows.

Per maggiori informazioni e download visitate il seguente sito PUBG: BATTLEGROUNDS | Scaricalo e gioca gratuitamente sull'Epic Games Store

C# Creazione di barcode con Zxing tramite Windows Application




In questo articolo vedremo come creare i barcode tramite la libreria Zxing con la tecnlogia .Net 4.7 tramite il linguaggio di programmazione C# e l’ambiente di sviluppo Visual Studio 2019 Community.
L’articolo vuole fornire informazioni utili sulla gestione e creazione dei codici di tipo barcode, in particolare dotare le proprie applicazioni di tipo “App Windows” per la creazione dei codici a Barra e visualizzarli nella form oltre a salvare il file Barcode generato, e visualizzare il testo del codice a barre tramite la libreria ZXing.
Vedremo come creare e leggere codici barcode generando file immagini.


Creazione del progetto

Dopo aver aperto Visual Studio 2019, si crea un nuovo progetto di tipo “App Windows Forms (.Net Framework)” selezionando la versione del Framework 4.7. Dopo aver creato il progetto, assegnando il nome e percorso dove salvarlo, nella form inseriamo due controlli di tipo “casella di sto”, una con la proprietà “Name” impostata con il valore “TxtTesto” e l’altra con il valore “TxtPercorsoFile”, inseriamo un controllo di tipo Picturebox, che permetterà di visualizzare il barcode generato, e tre pulsanti, uno sotto la prima casella con la proprietà name impostato su “BtGenera”, con il quale andremo a generare il codice barcode dalla prima casella di testo. Un altro pulsante con la proprietà impostata name impostata su “btnCerca” al fianco della seconda casella di testo, che permetterà di aprire una finestra per la selezione del file immagine con il barcode, ed un pulsante con la proprietà name impostata su “BtnLeggi” sotto la seconda casella di testo per estrapolare il testo presente nel file immagine del barcode, il tutto come riportato in fugura 1.

Figura 1 – I controlli e la prova della generazione del barcode


Terminata la creazione della nostra schermata, con il posizionamento dei vari controlli, non resta che scrivere il codice per la creazione del barcode.

Stesura del codice

Prima di scrivere il codice, tramite nuget, occorre aggiungere la libreria “Zxing” che permette la creazione di QrCode e barcode, oltre ad altre interessanti funzionalità.
Tramite la gestione dei pacchetti di “Nuget” (Strumenti->Gestione Pacchetti Nuget->Gestione Pacchetti NuGet per la soluzione) digitiamo il componente “Zxing” e selezioniamo quello con il nome “Zxing.Net” con oltre 11 milioni di download e versione 0.16.8 nel momento in cui si sta scrivendo l’articolo, il tutto come mostrato in figura 2.




Figura 2 – Il componente Zxing.net da aggiungere al progetto

Dopo aver aggiunto il componente, passiamo in visualizzazione codice, in alto, sopra ad ogni dichiarazione aggiungiamo lo spazio dei nomi relativo a questa libreria.
Di seguito si riporta il frammento di codice delle suddette operazioni

C#

using ZXing;


Ritorniamo in visualizzazione grafica della nostra form, e sul primo pulsante, quello con la dicitura “Genera”, facciamo doppio click in modo da passare in visualizzazione codice nell’evento “Click” del pulsante.
Tramite la classe “BarcodeWriter” , impostando alcune proprietà come il tipo di barcode e le dimensioni, possiamo generare il codice a barre da un testo, utilizzando il metodo “Write”, una volta ottenuto un oggetto di tipo “Bitmap” lo visualizziamo in un controllo pictureBox, e  tramite un oggetto di tipo “BitMap” possiamo salvarlo in una determinata cartella, passando percorso e nome file, ed il formato immagine.
Qui di seguito il frammento di codice delle suddette operazioni nell’evento click del pulsante.


C#

private void BtnGenera_Click(object sender, EventArgs e)

        {

            try

            {

                BarcodeWriter BarcodeCreazione = new BarcodeWriter {

                    Format = BarcodeFormat.CODE_128,

                    Options = { Height=100, Width = 400}

                };

                var risultato = BarcodeCreazione.Write(TxtTesto.Text);

                var barcodeBitmap = new Bitmap(risultato);

                pictureBox1.Image = barcodeBitmap;

                barcodeBitmap.Save(@"C:\Varie\barcodeGenerato.Jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);

             

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }




Dopo aver scritto il codice, non resta che eseguirlo per verificare il funzionamento, cambiando il percorso del salvataggio dell’immagine, in una cartella esistente.
Accertato il corretto funzionamento, ritorniamo in visualizzazione grafica, e facciamo click sul pulsante dei tre punti, quello al fianco alla seconda casella di testo, che permetterà di aprire una finestra per la selezione del file.
Di seguito si riporta il codice delle suddette operazioni.

C#

private void BtnCerca_Click(object sender, EventArgs e)

        {

            OpenFileDialog openDlg = new OpenFileDialog();

            openDlg.Title = "Trova immagine Barcode";

            if (openDlg.ShowDialog()== DialogResult.OK)

            {

                TxtPercorsoFile.Text = openDlg.FileName;

            }

 

 

        }


Torniamo in visualizzazione grafica e facciamo doppio click sul pulsante denominato “Leggi” in modo da passare in visualizzazione codice dell’evento “click” del pulsante”.
Tramite il metodo “Decode” della classe “BarcodeReader”, leggendo lo stream dal file immagine, viene rilevo il testo presente nell’immagine del codice a barre.
Di seguito si riporta il codice dell’evento click del pulsante delle suddette operazioni.


C#

private void BtnLeggi_Click(object sender, EventArgs e)

        {

            try

            {

                BarcodeReader BarcodeLettura = new BarcodeReader();

                var barcodeBitmap = (Bitmap)Image.FromFile(TxtPercorsoFile.Text);

                

                var testoRilevato = BarcodeLettura.Decode(barcodeBitmap);

               

                if (testoRilevato != null)

                {

                    TxtTesto.Text = testoRilevato.Text;

                }

 

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }









Ora non resta che eseguire il codice per verificare il funzionamento del codice e selezionare il file immagine di un barcode, eventualmente creato in precedenza.

Conclusioni

L’articolo ha fornito al lettore la possibilità di avvicinarsi alla gestione dei codice a barre, e dotare le proprie applicazioni della creazione e letture dei barcode.
La libreria Zxing, offre potenzialità nella gestione dei codice a barre e nei QrCode, mettendo a disposizione del programmatore funzionalità anche avanzate in tale ambito, ma soprattutto facilitando la stesura del codice. Soprattutto la creazione dei barcode negli ultimi anni ha visto un vasto impiego. Ancora oggi in ambito di gestione dei magazzini si fa uso dei barcode.

lunedì 6 marzo 2023

C# No data is available for encoding 1252. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.

 


Utilizzando la libreria PdfSharp, può capitare che durante l'inizializzazione della classe Font, venga generato il seguente errore "No data is available for encoding 1252. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.", questo perchè nel costruttore della form non è stata inizializzata la classe "Encoding".


Di seguito si riporta il frammento di codice da aggiungere nel costruttore della classe form per risolvere il problema.


public Form1()

        {

            InitializeComponent();

             Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

        }


domenica 5 marzo 2023

Sito per la creazione delle immagini tramite Intelligenza artificiale ghostlystock

 

Il sito Ghostlystock, visibile qui https://www.ghostlystock.com/ permette la creazione di immagini, da utilizzare liberamente, tramite l'intelligenza artificiale digitando nella casella di testo, l'immagine che si vuole realizzare.

Un sito ben fatto e che non richiede nessuna registrazione e nessuna email per scaricare le immagini gratuite.


sabato 4 marzo 2023

APT2000 cannot find the file specified

 



Quando si sviluppano applicazione MAUI, se viene visualizzato il messaggio di errore "APT2000 cannot find the file specified" molto probabilmente è dovuto che il progetto si è creato in un percorso dove il testo è con accento.

Se abbiamo un percorso del tipo  "C:\attività\progettoProva\ProgettoMAUI.SLN" l'accento sulla a genera l'errore.

Per tanto verificare che nel progetto, nei file ma soprattutto nel percorso dove si trova il progetto non sono presenti caratteri particolari come l'accento sulle vocali.

venerdì 3 marzo 2023

download gioco Rise of Industry

 

Disponibile gratuitamente e senza limitazioni il gioco di simulatore Rise Of Industry, con il quale si dovrà costruire aree industriali.

Il gioco in lingua italiana è per sistemi operativi Windows e per tutta la famiglia.

Fino al 9 marzo 2023 si potrà scaricare gratuitamente dopo tale data il download sarà a pagamento, per maggiori informazioni e download visitate il seguente sito Rise of Industry | Acquistalo e scaricalo subito sull'Epic Games Store

.Net formazione ed articoli sulla creazione di video giochi

 


La tecnologia .Net da diversi permette anche la creazione di video giochi tramite il linguaggio di programmazione C#.

Lo sviluppo avviene anche tramite varie framework, componenti e nuova versione del framework .Net.

Qui https://devblogs.microsoft.com/dotnet/choose-a-net-game-engine/ un post con vari riferimenti sui vari componenti gratuiti, mentre qui https://devblogs.microsoft.com/dotnet/game-development-with-net/ altro post sullo sviluppo dei video giochi.

Qui https://dotnet.microsoft.com/apps/games?WT.mc_id=gamedev-blog-abhamed il nuovo portale per la creazione dei video giochi, mentre qui https://dotnet.microsoft.com/learn/games?WT.mc_id=gamedev-blog-abhamed l'area formativa, qui https://dotnet.microsoft.com/learn/games/unity-tutorial/intro?WT.mc_id=gamedev-blog-abhamed l'area formativa Unity.

Che dire, buona programmazione e buon divertimento.

giovedì 2 marzo 2023

DepCheck indicates VC 10.0 Runtime (x86) is not installed.

 

Nell'eventualità che durante l'installazione di Visual Studio 2010 Professional sul sistema operativo Windows 11, può capitare di visualizzare un errore d'installazione dovuto al componente VC 10.0 Runtime (x86) il quale non viene installato come riportato nell'immagine precedente, con l'errore "DepCheck indicates VC 10.0 Runtime (x86) is not installed." nel file log.

Una soluzione che tra l'altro non ho trovato su internet, è quella di effettuare una prima installazione di Visual C# Express qui  https://my.visualstudio.com/Downloads  il sito dove scaricarlo, installazione del componente VC 10.0 Runtime (x86) qui https://learn.microsoft.com/it-it/cpp/windows/latest-supported-vc-redist?view=msvc-170 vedere la voce la versione 2010, ed il VC 10.0 Runtime (x86) con MFC qui https://www.microsoft.com/it-it/download/details.aspx?id=26999 il sito, e finalmente scaricare (dopo aver installato i precedenti programmi) Visual Studio 2010 Professional  da qui https://my.visualstudio.com/Downloads.

Durante l'installazione tenere disabilitati l'antivirus e Firewall, anche se non penso che sia determinate.

A questo punto verrà installato Visual Studio 2010 Professional.





mercoledì 1 marzo 2023

C# linq effettuare la differenza tra due classi con multiple proprietà

Di seguito si riporta un frammento di codice per effettuare la differenza tra due classi esaminando le proprietà come parametri di condizione.


Può capitare di avere due liste di oggetti che hanno una serie di proprietà, questi oggetti contengono n dati e vogliamo verificare che i dati presenti in uno non sono contenuti nell'altro. Un caso potrebbe essere che gli oggetti mappano due tabelle con le stesse colonne ma che si vuole verificare la differenza tra il primo ed il secondo.

La classe che utilizzeremo come oggetto e lista è la seguente:

  public class Anagrafica
    {
        public string Nome { get; set; }
        public string Cognome { get; set; }
    }


Di seguito l'inizializzazione della classe con una ipotetica fonte dati:


 List<Anagrafica> AnagraficaOrigine = CaricaDati();

 List<Anagrafica> AnagraficaDestinazione = CaricaDati();

Dopo aver valorizzato i due oggetti contenenti i dati per le due proprietà (nome e cognome) dobbiamo effettuare una select per verificare quali dati mancano nel secondo oggetto utilizzando le proprietà come condizione di filtro dei dati stessi.


 var risultato = AnagraficaOrigine .Where(a => !AnagraficaDestinazione .Any(b => a.Nome  == b.Nome && a.Cognome== b.Cognome));

L'oggetto "risultato" avrà i valori che non sono presenti nell'oggetto "AnagraficaDestinazione".