Français
Forum

GDI+

 
- page 1 -



Georg
Hovenbitzer
allô zusammen,

mich erdrückt justement une riesige Wissenslücke et je hoffe vous pouvez mir weiterhelfen.
but ist es, un Bild trop magasin, es trop einem Thumbnail trop verkleiner et ensuite dans einer banque de données abzulegen.
mon Problem ist eh bien qui partie entre Thumbnail et banque de données et là qui, comment je à une Speicheradresse / Array des Bildes et dessen Taille viens:
comme Présentation habe je cela geile GDI+ Demo de Andreas pris.
 $H \windows.ph
 $H \includes\Functions_GDIPLUS.ph
 $H \includes\GDIP_Imageging.ph
 $I \includes\GDIP_Helper.inc
Déclarer gdiplusToken&,ImageObject&,ImageWidth&,ImageHeight&,GraphicObject&
Déclarer hPic&
Déclarer imgThumb&
Déclarer lngImage&
Déclarer hBitmap&
Fenêtre 0,0-1024,786
Cls ~GetSysColor(~COLOR_3DFACE)
gdiplusToken& = InitGDIPlus()
hPic& = @Créer(hPic,-1,Bild.jpg)
~GdipCreateBitmapFromHBITMAP(hPic&,0,@Addr(lngImage&))
~GdipGetImageThumbnail(lngImage&,92,69,@Addr(imgThumb&),0,0)
~GdipCreateHBITMAPFromBitmap(imgThumb&,@Addr(hBitmap&))
DrawPic hBitmap&,50,50;0
ici bräuchte je eh bien quelque chose, quoi mir une Adresse ou bien Array et dessen Taille ermittelt !!!
WaitInput
DeleteObject hPic&
DeleteObject hBitmap&
~GdipDisposeImage(imgThumb&)
~GdipDisposeImage(lngImage&)
ExitGDIPlus(gdiplusToken&)
Fin
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.02.2009  
 



 
- page 2 -



Georg
Hovenbitzer
allô Pascal,

j'ai doch dit, c'est une interessante Possibilité
trop deiner Frage si es Grenzen gibt, ici qui original Text de qui SQLite Page d'accueil:


Supports terabyte-sized databases and gigabyte-sized strings and blobs.


là hat on plutôt un Problem avec Plattenplatz, comme avec dem quoi on dans qui Blobs verstauen veux.
un le tort hat qui DLL il peut pas verschlüsseln, quoi mais la fois wieder avec den Exportgesetze zusammen hängen pourrait.
mais j'ai déjà une page trouvé qui une Verschlüsselung im Quellcode incorporé ist et on sich qui DLL récente Compilieren muss.


Pour Aufruf de SaveJpgToMem  findet sich qui vollständige Code qui récente erstellten JPG dans PicData#.
sûrement encore verbesserungsfähig,mais avec cela pourrait on déjà quoi anfangen..


Es klappt, es klappt
je vois aucun nötigen amélioration, là es oui c'est ca den Weg allez comment cela VB Demo.
qui ausgiebige Test venez demain et puis suis je mich déjà.

Super vielen Dank !!
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
04.02.2009  
 




Uwe
''Pascal''
Niemeier
Hi gens!

Georg
je vois aucun nötigen amélioration, là es oui c'est ca den Weg allez comment cela VB Demo.


cela peux je pas sur mir être assis laisser

ici une verbesserte Version, chez qui en tout seulement un Stream verwendet wird, qui aussi zur Rüchverwandlung données > Bild  herhält et am Programmende aussi korrekterweise wieder entfernt wird.
alors quasi un Rundum-Sorglos-paquet, cela nebenbei aussi une praktische Funktion hat; es läßt sich comme Vorschau pour verschieden Kompressionsraten chez JPG verwenden
KompilierenMarqueSéparation
window 0,0-600,500
 $H windows.ph
--GDIPlus-Erweiterungen von Andreas Miethe
 $H Functions_GDIPLUS.ph
 $H GDIP_Imageging.ph
 $I GDIP_Helper.inc
--Funktionen aus shlwapi.dll unter XP (SP3) nur indirekt per Ordinal erreichbar
var shlwapi&=~GetModulehandle(shlwapi.dll)
var SHCreateMemStream&=~GetProcAddress(shlwapi&,12)
var IStream_Write&=~GetProcAddress(shlwapi&,212)
var IStream_Reset&=~GetProcAddress(shlwapi&,213)
var IStream_Size&= ~GetProcAddress(shlwapi&,214)
var IStream_Read&= ~GetProcAddress(shlwapi&,184)

proc StreamRelease-------------------------------------StreamRelease

    var VTable&=long(IStream&,0 )
    var Method&=long(VTable&,8 )
    call(Method&,IStream&)
    endproc-------------------------------------------------------------

    proc StreamToMem-----------------------------------------StreamToMem

        declare Size&
        call(IStream_Size&,IStream&,addr(Size&))
        dim PicData#,Size&
        call(IStream_Reset&,IStream&)
        call(IStream_Read&,IStream&,PicData#,Size&)
        endproc-------------------------------------------------------------

        proc MemToStream-----------------------------------------MemToStream

            call(IStream_Reset&,IStream&)
            call(IStream_Write&,IStream&,PicData#,sizeof(PicData#))
            endproc-------------------------------------------------------------

            Proc SaveJpgToStream---------------------------------SaveJpgToStream

                --Modifizierte Variante der SaveAsJPG-Prozedur von Andreas Miethe
                Parameters Bitmap&,Quality&
                Declare encoderCLSID#,result&
                result& = 0
                Dim encoderCLSID#,16
                Declare encoderParameters#
                Declare wTemp$,encoder#
                wTemp$ = S2WS(~EncoderQuality)
                Dim encoder#,16
                IIDFromString(ADDR(wTemp$),encoder#)
                Dim encoderParameters#,32
                Long encoderParameters#,0 = 1
                MoveMemory(encoderParameters#+4,encoder#,16)
                Long encoderParameters#,20 = 1
                Long encoderParameters#,24 = ~EncoderParameterValueTypeLong
                Long encoderParameters#,28 = ADDR(Quality&)

                If GetEncoderCLSID(image/jpeg,encoderCLSID#)

                    call(IStream_Reset&,IStream&)
                    ~GdipSaveImageToStream(Bitmap&,IStream&,encoderCLSID#,encoderParameters#)
                    result& = 1

                Endif

                Dispose encoder#
                Dispose encoderParameters#
                Dispose encoderCLSID#
                Return result&
                EndProc-------------------------------------------------------------
                external(ole32,CoInitialize,0)--OLE initialisieren
                var Token&=InitGDIPlus()------------GDI+ initialisieren
                usermessages 16---------------------WM_CLOSE abfangen
                declare PicData#,IStream&--PicData# und IStream& global deklariert!
                IStream&=call(SHCreateMemStream&,0,0)--Stream erzeugen
                var Pic&=create(hPic,-1,C:1TestBild.jpg)--Demo-Bild (Pfad anpassen!)
                declare Image&,Thumb&
                ~GdipCreateBitmapFromHBITMAP(Pic&,0,addr(Image&))--------Image von Bitmap
                ~GdipGetImageThumbnail(Image&,250,250,addr(Thumb&),0,0)--Thumb von Image (Größe 250*250)
                ~GdipDisposeImage(Image&)--------------------------------Image freigeben
                deleteobject Pic&----------------------------------------Bitmap freigeben
                SaveJpgToStream(Thumb&,5)----Thumb als JPG (schlechte Qualität) nach IStream&
                StreamToMem()----------------JPG-Daten von IStream& nach PicData#
                var LoQuality$=char$(PicData#,0,sizeof(PicData#))--PicData# als String zwischenspeichern
                SaveJpgToStream(Thumb&,100)--Thumb als JPG (gute Qualität) nach IStream&
                StreamToMem()----------------JPG-Daten von IStream& nach PicData#
                var HiQuality$=char$(PicData#,0,sizeof(PicData#))--PicData# als String zwischenspeichern
                declare Handle&,Bmp&
                char PicData#,0=LoQuality$--Daten aus String nach PicData#
                MemToStream()---------------Daten von PicData# nach IStream&
                ~GdipLoadImageFromStream(IStream&,addr(Handle&))----Image aus IStream&
                ~GdipCreateHBITMAPFromBitmap(Handle&,addr(Bmp&),0)--Bitmap aus Image
                ~GdipDisposeImage(Handle&)--------------------------Image freigeben
                drawpic Bmp&,10,10;0--------------------------------Bitmap anzeigen
                deleteobject Bmp&-----------------------------------Bitmap freigeben
                char PicData#,0=HiQuality$--Daten aus String nach PicData#
                MemToStream()---------------Daten von PicData# nach IStream&
                ~GdipLoadImageFromStream(IStream&,addr(Handle&))----Image aus IStream&
                ~GdipCreateHBITMAPFromBitmap(Handle&,addr(Bmp&),0)--Bitmap aus Image
                ~GdipDisposeImage(Handle&)--------------------------Image freigeben
                drawpic Bmp&,270,10;0-------------------------------Bitmap anzeigen
                deleteobject Bmp&-----------------------------------Bitmap freigeben

                while 1

                    waitinput
                    case %umessage=16:break

                endwhile

                StreamRelease()---------------------Stream freigeben
                external(ole32,CoUninitialize)--OLE aus
                ExitGDIPlus(Token&)-----------------GDI+ aus

PS: qui Frage pour qui maximalen Datenlänge bezog sich eigendlich sur qui @Decode64() -Funktion, weil iF cela so betonte. avec cela ließe sich JPG dans DB nämlich aussi pour konventionelle DBs (Memo-Felder ou bien so) nutzen.

SeeYou
Pascal
 
06.02.2009  
 



dans diesem Beispiel volonté korrekt 10MB trop 13MB trop 10MB konvertiert per encode64 et decode64.
KompilierenMarqueSéparation
cls
long l=1024*1024
string s=mkstr$(0123456789,l)
print len(s)/1024/1024,MB
s=encode64(s)
print len(s)/1024/1024,MB
s=decode64(s)
print len(s)/1024/1024,MB
print mid$(s,1,20)
print mid$(s,len(s)-19,20)
waitkey
KompilierenMarqueSéparation
CLS
var L&=1024*1024
var S$=MKSTR$(0123456789,L&)
PRINT LEN(S$)/1024/1024,MB
S$=ENCODE64(S$)
PRINT LEN(S$)/1024/1024,MB
S$=DECODE64(S$)
PRINT LEN(S$)/1024/1024,MB
PRINT MID $(S$,1,20)
PRINT MID $(S$,LEN(S$)-19,20)
WAITKEY

1.025 kB
Hochgeladen:06.02.2009
Downloadcounter84
Download
 
06.02.2009  
 



voulais la fois de meiner Bmp-Dossier(64x64Pixel) qui RGB-Werte auslesen. cela Bild hat 3 verschiedene waagerechte
Farbstreifen(RGB). Es venons total falsche Werte 31 0 31, 227 0 227 usw.

quoique reine RGB-Werte venons devoir 255 0 0, 0 255 0, 0 0 255 zb.
window 30,30-500,500
 $H Windows.ph
declare bmi#,b#
declare Pic$,Handle&,Neu&,wert&,hwin&
Fenêtre 20,20-200,200
hWin& = Créer(Fenêtre, %hWnd, Test, 250, 20, 650,500)
Pic$=test.bmp
Handle&=create(hPic,-1,Pic$)
struct bmpHEADER=Size&,Width&,Height&,Planes%,BitCount%,Compression&,SizeImage&,X#(24)
dim bmi#,bmpHEADER
bmi#.Size&=sizeof(bmi#)------------------Taille de BITMAPINFOHEADER
~GetDIBits(%hdc,Handle&,0,0,0,bmi#,0)--Dummy-Aufruf, um bmpHeader trop füllen (Rückgabe: 1=OK)
imprimer sizeof(bmi#)
dim b#,bmi#.SizeImage&-----------------Bereich pour Bildinformationen (Pixel) bereitstellen
~GetDIBits(%hdc,Handle&,0,bmi#.Height&,b#,bmi#,0)--Eigendliche Bilddaten aus Handle ermitteln
Neu&=~CreateDIBitmap(%hdc,bmi#,4,b#,bmi#,0)------Neue DIB avec modifié Farben erzeugen
startpaint hwin&
drawpic Neu&,10,10;0
endpaint
wert&=bmi#.SizeImage&

whileloop 0,wert&,4

    imprimer byte(b#,&loop),byte(b#,&loop+1),byte(b#,&loop+2)
    sleep 10

endwhile

 
05.03.2009  
 




Jörg
Sellmeyer
la hâte Du car qui Bitmap déjà avec einem externe Programme überprüft? si je einfarbige Bitmaps einsetze, volonté qui Werte korrekt ausgegeben.
ici ist mon Bitmap


15 kB
Hochgeladen:05.03.2009
Downloadcounter174
Download
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
05.03.2009  
 



qui Werte habe je chez mir überprüft, avons alle la valeur 255 dans R, G et B.
avec 2 Grafikprogrammen : Paintshop et Micrografx.

mfg
 
05.03.2009  
 



chez Je ne.
d'abord venez zwar 0 248 0 8x ensuite wieder 224 7 224 8x et 31 0 31 8x cela jusqu'à zum schluss.

Zeig la fois deine Ausleseprogramm.

mfg
 
05.03.2009  
 



Wohlbemerkt qui Werte imho pas im Format RGB mais BGR vorliegen.
 
05.03.2009  
 



jouer maintenant im Test aucun rôle, derweil chacun la couleur la valeur 255 einzeln hat. Zumindest muss cela eigentlich avec einer kleinen Schwankung seperat rauskommen et pas cet Ausgabe dessus. Peut-être mon Aufrufreihenfolge faux...

mfg
 
05.03.2009  
 




Jörg
Sellmeyer
Peter Bierbachh
chez Je ne.
d'abord venez zwar 0 248 0 8x ensuite wieder 224 7 224 8x et 31 0 31 8x cela jusqu'à zum schluss.

Zeig la fois deine Ausleseprogramm.

mfg


Welches Ausleseprogramm? je habs avec Deinem Code ausgelesen.
qui Bitmap ist avec CorelDraw erstellt.
Zeig doch la fois Votre Bitmap.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
05.03.2009  
 



Im Anhang sommes qui Bitmap.

mfg

15 kB
Hochgeladen:05.03.2009
Downloadcounter172
Download
15 kB
Hochgeladen:05.03.2009
Downloadcounter155
Download
 
05.03.2009  
 




E.T.
plan (à cause de encore-pas-dormir-peut ) la fois probiert:
Test1 et Test2.bmp montrer chez mir jeweils 255 (reste 0) pour qui jeweilige la couleur à (Photoshop et AutoCad). Ebenso qui bmp de Jörg.

qui im o.g. Quellcode verwendete Test.bmp ist wohl pas dabei ou bien hat beim hochladen den nom geändert ??
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
06.03.2009  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

19.298 Views

Untitledvor 0 min.
Thomas Freier27.08.2019
Georg11.05.2015
Andre Rohland14.02.2015
Uwe ''Pascal'' Niemeier11.12.2014
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie