Español
Foro

GDI+

 
- Página 1 -



Georg
Hovenbitzer
¡Hola zusammen,

mich erdrückt gerade una riesige Wissenslücke y yo hoffe ihr könnt me weiterhelfen.
Ziel es, una Bild a invitar, lo a una Thumbnail a verkleiner y luego en uno Datenbank abzulegen.
Mein Problema es nun el Teil zwischen Thumbnail y Datenbank y como el, Yo a una Speicheradresse / Array des Bildes y dessen Größe komme:
Als Presentación Yo el geile GDI+ Demo de Andreas genommen.
 $H \windows.ph
 $H \includes\Functions_GDIPLUS.ph
 $H \includes\GDIP_Imageging.ph
 $I \includes\GDIP_Helper.inc
Declarar gdiplusToken&,ImageObject&,ImageWidth&,ImageHeight&,GraphicObject&
Declarar hPic&
Declarar imgThumb&
Declarar lngImage&
Declarar hBitmap&
Ventana 0,0-1024,786
Cls ~GetSysColor(~COLOR_3DFACE)
gdiplusToken& = InitGDIPlus()
hPic& = @Crear(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
hier bräuchte Yo nun algo, qué me una Adresse oder Array y dessen Größe ermittelt !!!
WaitInput
DeleteObject hPic&
DeleteObject hBitmap&
~GdipDisposeImage(imgThumb&)
~GdipDisposeImage(lngImage&)
ExitGDIPlus(gdiplusToken&)
End
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.02.2009  
 



 
- Página 2 -



Georg
Hovenbitzer
¡Hola Pascal,

Yo doch dijo, el es una interessante Möglichkeit
Zu deiner Cuestión si Grenzen son, hier el original Texto de el SQLite Homepage:


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


Como ha uno más una Problema con Plattenplatz, como con el qué en el Blobs verstauen voluntad.
Ein Nachteil ha el DLL ellos kann no verschlüsseln, qué aber veces otra vez con el Exportgesetze zusammen hängen dürfte.
Aber Yo ya una Página gefunden el una Verschlüsselung en el Quellcode instalado es y uno el DLL neu Compilieren muss.


Nach Aufruf de SaveJpgToMem  findet se el vollständige Code el neu erstellten JPG en PicData#.
Seguro todavía verbesserungsfähig,aber así podría uno ya qué anfangen..


Lo klappt, lo klappt
Yo sehe no nötigen Verbesserung, como lo genau el Weg va como el VB Demo.
Der ausgiebige Test kommt morgen y darauf freue Yo mich ya.

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




Uwe
''Pascal''
Niemeier
Hi Personas!

Georg
Yo sehe no nötigen Verbesserung, como lo genau el Weg va como el VB Demo.


Das kann Yo no en me sitzen dejar

Hier una verbesserte Versión, en total sólo una Stream verwendet se, el auch a Rüchverwandlung Daten > Bild  herhält y al Programmende auch korrekterweise otra vez lejos se.
Also quasi una Rundum-Sorglos-Paket, el nebenbei auch una praktische Función hat; lo läßt se como Prevista para verschieden Kompressionsraten en JPG uso
KompilierenMarcaSeparación
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+ de

PS: El Cuestión después de el maximalen Datenlänge bezog se eigendlich en el @Decode64() -Función, porque IF el así betonte. Damit ließe se JPG en DB nämlich auch para konventionelle DBs (Memo-Felder más o menos) nutzen.

SeeYou
Pascal
 
06.02.2009  
 



In diesem Ejemplo voluntad korrekt 10MB a 13MB a 10MB konvertiert por encode64 y decode64.
KompilierenMarcaSeparación
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
KompilierenMarcaSeparación
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
Ladeanzahl92
Descargar
 
06.02.2009  
 



Wollte tiempos de meiner Bmp-Expediente(64x64Pixel) el RGB-Werte auslesen. Das Bild ha 3 verschiedene waagerechte
Farbstreifen(RGB). Lo kommen total falsche Werte 31 0 31, 227 0 227 usw.

Obwohl reine RGB-Werte kommen debería 255 0 0, 0 255 0, 0 0 255 zb.
window 30,30-500,500
 $H Windows.ph
declarar bmi#,b#
declarar Pic$,Handle&,Neu&,wert&,hwin&
Ventana 20,20-200,200
hWin& = Crear(Ventana, %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#)------------------Größe de BITMAPINFOHEADER
~GetDIBits(%hdc,Handle&,0,0,0,bmi#,0)--Dummy-Aufruf, en bmpHeader a füllen (Rückgabe: 1=OK)
imprimir sizeof(bmi#)
dim b#,bmi#.SizeImage&-----------------Zona para Bildinformationen (Pixel) bereitstellen
~GetDIBits(%hdc,Handle&,0,bmi#.Height&,b#,bmi#,0)--Eigendliche Bilddaten de Handle ermitteln
Neu&=~CreateDIBitmap(%hdc,bmi#,4,b#,bmi#,0)------Neue DIB con geänderten Farben erzeugen
startpaint hwin&
drawpic Neu&,10,10;0
endpaint
wert&=bmi#.SizeImage&

whileloop 0,wert&,4

    imprimir byte(b#,&bucle),byte(b#,&bucle+1),byte(b#,&bucle+2)
    sleep 10

endwhile

 
05.03.2009  
 




Jörg
Sellmeyer
Hast Usted porque el Mapa de bits ya con un externo Programa überprüft? Wenn Yo einfarbige Bitmaps einsetze, voluntad el Werte korrekt ausgegeben.
Hier es mi Mapa de bits


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



El Werte Yo en me überprüft, haben todos valor 255 en R, G y B.
Mit 2 Grafikprogrammen : Paintshop y Micrografx.

mfg
 
05.03.2009  
 



En No.
Zuerst kommt zwar 0 248 0 8x entonces otra vez 224 7 224 8x y 31 0 31 8x el a para schluss.

Zeig veces deine Ausleseprogramm.

mfg
 
05.03.2009  
 



Wohlbemerkt el Werte imho no en el Formato RGB pero BGR vorliegen.
 
05.03.2009  
 



jugando ahora en el Test ningún papel, derweil jede Farbe valor 255 einzeln ha. Zumindest muss el eigentlich con uno pequeño Schwankung seperat rauskommen y no esta Edición oben. Tal vez mi Aufrufreihenfolge falso...

mfg
 
05.03.2009  
 




Jörg
Sellmeyer
Peter Bierbachh
En No.
Zuerst kommt zwar 0 248 0 8x entonces otra vez 224 7 224 8x y 31 0 31 8x el a para schluss.

Zeig veces deine Ausleseprogramm.

mfg


Welches Ausleseprogramm? Yo habs con su Code ausgelesen.
El Mapa de bits es con CorelDraw erstellt.
Zeig doch veces Su Mapa de bits.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
05.03.2009  
 



Im Anhang son el Mapa de bits.

mfg

15 kB
Hochgeladen:05.03.2009
Ladeanzahl179
Descargar
15 kB
Hochgeladen:05.03.2009
Ladeanzahl166
Descargar
 
05.03.2009  
 




E.T.
Eben (wegen todavía-no-schlafen-puede ) veces probiert:
Test1 y Test2.bmp zeigen en me jeweils 255 (Rest 0) para el jeweilige Farbe a (Photoshop y AutoCad). También el bmp de Jörg.

El en el o.g. Quellcode verwendete Test.bmp es probablemente no esta oder ha beim hochladen el Name 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  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

20.223 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie