Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - salvataggio immagine da una picturebox solo 96 dpi ?
Forum - Visual Basic 6 - salvataggio immagine da una picturebox solo 96 dpi ?

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
untipo (Normal User)
Rookie


Messaggi: 54
Iscritto: 14/10/2009

Segnala al moderatore
Postato alle 12:10
Mercoledì, 16/01/2013
Ciao a tutti.

Qualcuno mi può confermare se caricando una immagine ( a 300 dpi) in una picturebox in vb6 quando si effettua il salvataggio dell'immagine sia in jpg o bmp i dpi scendono a 96 ?
Non c'è verso di salvare l'immagine caricata a 300 dpi ?

PM Quote
Avatar
gibra (Normal User)
Pro


Messaggi: 154
Iscritto: 16/04/2009

Segnala al moderatore
Postato alle 15:57
Venerdì, 18/01/2013
Non puoi semplicemente 'salvare' l'immagine BMP in JPG.
Da come lo dici sembra che tu cambi solo l'estensione.

L'immagine va convertita dal formato BMP a quello JPG.
Vedi il mio progetto di esempio BMP to JPG che trovi su questa pagina:

http://nuke.vbcorner.net/Progetti/VB60/Progettivari/tabid/ ...

Nota che è possibile indicare il fattore di compressione JPG. :)

Ultima modifica effettuata da gibra il 18/01/2013 alle 15:58
PM Quote
Avatar
untipo (Normal User)
Rookie


Messaggi: 54
Iscritto: 14/10/2009

Segnala al moderatore
Postato alle 8:07
Sabato, 19/01/2013
Cia Gibra e grazie per la risposta. Il mio problema non era salvare una immagine in jpg. So benissimo che non basta cambiare l'estensione di un file per cambiarne il tipo :-)
L'immagine riuscivo a salvarla convertendola in jpg tranquillamente ma non capivo perchè controllando i dettagli del file i DPI erano per tutte le immagini 96 dpi.
Ho risolto usando una classe della gdiplus. Quindi salvo l'immagine in formato jpg impostando nel comando anche i DPI che nel mio caso sono 300 e 300. Grazie, in ogni caso.
Il tuo progetto me lo spulcio comunque :-)

PM Quote
Avatar
gibra (Normal User)
Pro


Messaggi: 154
Iscritto: 16/04/2009

Segnala al moderatore
Postato alle 9:26
Sabato, 19/01/2013
Ah, scusa non era chiaro ed io ho frainteso.
Comunque l'importante è che tu abbia risolto. :yup:

PM Quote
Avatar
Pino1946 (Normal User)
Newbie


Messaggi: 10
Iscritto: 09/04/2013

Segnala al moderatore
Postato alle 20:58
Mercoledì, 09/06/2021
Testo quotato

Postato originariamente da untipo:
Cia Gibra e grazie per la risposta. Il mio problema non era salvare una immagine in jpg. So benissimo che non basta cambiare l'estensione di un file per cambiarne il tipo :-)
L'immagine riuscivo a salvarla convertendola in jpg tranquillamente ma non capivo perchè controllando i dettagli del file i DPI erano per tutte le immagini 96 dpi.
Ho risolto usando una classe della gdiplus. Quindi salvo l'immagine in formato jpg impostando nel comando anche i DPI che nel mio caso sono 300 e 300. Grazie, in ogni caso.
Il tuo progetto me lo spulcio comunque :-)



Ciao,

spero solo che il tema sia ancora attuale: avrei lo stesso problema.

Potrei avere un esempio (VB6) di salvataggio con 300 dpi ?

Grazie in anticipo e buona serata

Pino

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 972
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 0:25
Giovedì, 10/06/2021
Il link è ancora valido basta che ti registri...

Voglio solo puntualizzare che i DPI non cambiano la qualità dell'immagine. I DPI hanno un senso solo quando l'immagine viene stampata e determinano la densità di stampa.

Se ho un'immagine da 800x600 pixel da 72DPI e un'immagine da 800x600 pixel da 300DPI, le immagini a livello di file sono identiche, la differenza però c'è quando l'immagine viene stampata, DPI significa Dots Per Inch (punti per pollice), con un rapido calcolo l'immagine da 72DPI verrà stampata di dimensioni 800/72 = 11 pollici = 28 cm, 600/72 = 8 pollici = 20 cm (stampa qualità media), la stessa immagine stampata a 300DPI risulterà 800/300 = 2,6 pollici = 6,6 cm, 600/300 = 2 pollici = 5 cm (stampa qualità alta).

Questo per dire che cambiando i DPI non si cambia la qualità dell'immagine ma la qualità di stampa, se nel tuo programma VB6 la risoluzione in pixel è rimasta la stessa, significa che l'immagine è rimasta la stessa, l'utente al momento della stampa sceglierà la dimensione di stampa variando i DPI al volo e la qualità di stampa.

I DPI sono di fondamentale importanza quando la dimensione di stampa è un fattore vincolante, per esempio devo stampare un'immagine in scala, per essere certi di stampare un'immagine della dimensione prefissata, il modo più semplice è comporre un file PDF.

Ultima modifica effettuata da Carlo il 10/06/2021 alle 10:36


in programmazione tutto è permesso
PM Quote
Avatar
Pino1946 (Normal User)
Newbie


Messaggi: 10
Iscritto: 09/04/2013

Segnala al moderatore
Postato alle 12:10
Giovedì, 10/06/2021
Ciao Carlo,

innanzitutto, grazie per la pronta risposta !

Ho cercato di iscrivermi al sito ma ... vogliono sapere "vita, morte e miracoli" e, a questa età ... !

Sono già iscritto a "1000" siti e, al momento, siamo letteralmente bombardati da pubblicità, virus, trojan, etc., etc. e, con questo, non voglio dire che il sito non sia serio, per carità !

Però, preciso che sono un "vecchio" programmatore alla vecchia maniera (Cobol, ASM, Clipper, etc. (in Germania) e un po' di VB6 per hobby, per voglia di apprendere) e sono principalmente contrario alle moderne App, invasive e pericolose (WhatsApp, TicToc, etc., etc.).

Tanto premesso, solo per farti capire la mia indole tranquilla e pacifica.

Se, almeno come "collega" (scusa se oso), mi potresti dare solo la/le API precisa/e del caso e "la riga" colla quale posso (speriamo) salvare a 300x300 dpi (o, anche meno), sarei ultrafelice !

A me, serve per il solo testo per motivi di OCR: pare che le immagini di testo a 300x300 dpi,vengano meglio analizzate dai software del caso.

E, a questo punto, ti ringrazio comunque (che mi invii o meno le poche righe che mi occorrono).

Buona giornata

Pino

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 972
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 15:13
Giovedì, 10/06/2021
Posta il codice che usi, solo l'indispensabile, in modo che non scrivo basandomi su delle supposizioni :k:

Ultima modifica effettuata da Carlo il 10/06/2021 alle 15:20


in programmazione tutto è permesso
PM Quote
Avatar
Pino1946 (Normal User)
Newbie


Messaggi: 10
Iscritto: 09/04/2013

Segnala al moderatore
Postato alle 6:44
Venerdì, 11/06/2021
Buongiorno Carlo,

allora, non ho molto perchè, come dicevo, mi sono appena interessato a GdiPlus e ho scaricato (e buttato) diverso materiale perchè non ci ho capito un'acca (... colpa mia, è chiaro !).

Quello che al momento ho:

1 - stretch (e simili) ... che ho capito come funziona, ma il risultato non è soddisfacente (al riguardo dell'OCR),

        StretchBlt Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, picDc, 0, 0, picWidth, picHeight, vbSrcCopy

2 - il codice che allego (trovato online) che non ho capito bene come funzioni:

_____________________________________________________

Private Type GUID
   Data1 As Long
   Data2 As Integer
   Data3 As Integer
   Data4(0 To 7) As Byte
End Type
Private Type GdiplusStartupInput
   GdiplusVersion As Long
   DebugEventCallback As Long
   SuppressBackgroundThread As Long
   SuppressExternalCodecs As Long
End Type
Private Type EncoderParameter
   GUID As GUID
   NumberOfValues As Long
   type As Long
   Value As Long
End Type
Private Type EncoderParameters
   Count As Long
   Parameter As EncoderParameter
End Type

Private Declare Function GdiplusStartup Lib "GDIPlus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Private Declare Function GdiplusShutdown Lib "GDIPlus" (ByVal token As Long) As Long
Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" (ByVal hbm As Long, ByVal hpal As Long, Bitmap As Long) As Long
Private Declare Function GdipDisposeImage Lib "GDIPlus" (ByVal Image As Long) As Long
Private Declare Function GdipSaveImageToFile Lib "GDIPlus" (ByVal Image As Long, ByVal filename As Long, clsidEncoder As GUID, encoderParams As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long

Public Sub SaveJPG(ByVal pict As StdPicture, ByVal filename As String, Optional ByVal Quality As Byte = 100)    ' ----==== SaveJPG ====----
   Dim tSI As GdiplusStartupInput
   Dim lRes As Long
   Dim lGDIP As Long
   Dim lBitmap As Long

   tSI.GdiplusVersion = 1                              ' Initialize GDI+
   lRes = GdiplusStartup(lGDIP, tSI)
  
   If lRes = 0 Then
      lRes = GdipCreateBitmapFromHBITMAP(pict.Handle, 0, lBitmap)         ' Create the GDI+ bitmap from the image handle

      If lRes = 0 Then
         Dim tJpgEncoder As GUID
         Dim tParams As EncoderParameters
        
         CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder  ' Initialize the encoder GUID
    
         tParams.Count = 1                          ' Initialize the encoder parameters
         With tParams.Parameter                     ' Quality
            CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .GUID             ' Set the Quality GUID
            .NumberOfValues = 1
            .type = 4
            .Value = VarPtr(Quality)
         End With
        
         lRes = GdipSaveImageToFile(lBitmap, StrPtr(filename), tJpgEncoder, tParams)            ' Salva
                            
         GdipDisposeImage lBitmap                                                                                                      ' Destroy the bitmap
      End If
    
      GdiplusShutdown lGDIP                           ' Shutdown GDI+
   End If
  
   If lRes Then
      Err.Raise 5, , "Cannot save the image. GDI+ Error:" & lRes
   End If
  
End Sub

Private Sub Form_Load()
   Call SaveJPG(StdPicture, "c:\Prova.bmp", 100)
End Sub
_____________________________________________________

Premetto che, quello che mi ha colpito, è la frase "Ho risolto usando una classe della gdiplus. Quindi salvo l'immagine in formato jpg impostando nel comando anche i DPI che nel mio caso sono 300 e 300", postato da "untipo".

Auguro una buona giornata:cheer:

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo