Deutsch
Forum

GDI+

 
- Seite 1 -



Georg
Hovenbitzer
Hallo zusammen,

mich erdrückt gerade eine riesige Wissenslücke und ich hoffe ihr könnt mir weiterhelfen.
Ziel ist es, ein Bild zu laden, es zu einem Thumbnail zu verkleiner und dann in einer Datenbank abzulegen.
Mein Problem ist nun der Teil zwischen Thumbnail und Datenbank und da der, wie ich an eine Speicheradresse / Array des Bildes und dessen Größe komme:
Als Vorlage habe ich das geile GDI+ Demo von Andreas genommen.
 $H \windows.ph
 $H \includes\Functions_GDIPLUS.ph
 $H \includes\GDIP_Imageging.ph
 $I \includes\GDIP_Helper.inc
Declare gdiplusToken&,ImageObject&,ImageWidth&,ImageHeight&,GraphicObject&
Declare hPic&
Declare imgThumb&
Declare lngImage&
Declare hBitmap&
Window 0,0-1024,786
Cls ~GetSysColor(~COLOR_3DFACE)
gdiplusToken& = InitGDIPlus()
hPic& = @Create(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 ich nun etwas, was mir eine Adresse oder Array und 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  
 



 
- Seite 2 -


Wollte mal von meiner Bmp-Datei(64x64Pixel) die RGB-Werte auslesen. Das Bild hat 3 verschiedene waagerechte
Farbstreifen(RGB). Es kommen total falsche Werte 31 0 31, 227 0 227 usw.

Obwohl reine RGB-Werte kommen sollen 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&
Window 20,20-200,200
hWin& = Create(Window, %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 von BITMAPINFOHEADER
~GetDIBits(%hdc,Handle&,0,0,0,bmi#,0)--Dummy-Aufruf, um bmpHeader zu füllen (Rückgabe: 1=OK)
print sizeof(bmi#)
dim b#,bmi#.SizeImage&-----------------Bereich für 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 mit geänderten Farben erzeugen
startpaint hwin&
drawpic Neu&,10,10;0
endpaint
wert&=bmi#.SizeImage&

whileloop 0,wert&,4

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

endwhile

 
05.03.2009  
 




Jörg
Sellmeyer
Hast Du denn die Bitmap schon mit einem externen Programm überprüft? Wenn ich einfarbige Bitmaps einsetze, werden die Werte korrekt ausgegeben.
Hier ist meine Bitmap


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



Die Werte habe ich bei mir überprüft, haben alle den Wert 255 in R, G und B.
Mit 2 Grafikprogrammen : Paintshop und Micrografx.

mfg
 
05.03.2009  
 



Bei mir nicht.
Zuerst kommt zwar 0 248 0 8x dann wieder 224 7 224 8x und 31 0 31 8x das bis zum schluss.

Zeig mal deine Ausleseprogramm.

mfg
 
05.03.2009  
 



Wohlbemerkt die Werte imho nicht im Format RGB sondern BGR vorliegen.
 
05.03.2009  
 



das spielt jetzt im Test keine Rolle, derweil jede Farbe den Wert 255 einzeln hat. Zumindest muss das eigentlich mit einer kleinen Schwankung seperat rauskommen und nicht diese Ausgabe oben. Vielleicht ist auch meine Aufrufreihenfolge falsch...

mfg
 
05.03.2009  
 




Jörg
Sellmeyer
Peter Bierbachh
Bei mir nicht.
Zuerst kommt zwar 0 248 0 8x dann wieder 224 7 224 8x und 31 0 31 8x das bis zum schluss.

Zeig mal deine Ausleseprogramm.

mfg


Welches Ausleseprogramm? Ich habs mit Deinem Code ausgelesen.
Die Bitmap ist mit CorelDraw erstellt.
Zeig doch mal Deine Bitmap.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
05.03.2009  
 



Im Anhang sind die Bitmap.

mfg

15 kB
Hochgeladen:05.03.2009
Ladeanzahl168
Herunterladen
15 kB
Hochgeladen:05.03.2009
Ladeanzahl151
Herunterladen
 
05.03.2009  
 




E.T.
Eben (wegen noch-nicht-schlafen-können ) mal probiert:
Test1 und Test2.bmp zeigen bei mir jeweils 255 (Rest 0) für die jeweilige Farbe an (Photoshop und AutoCad). Ebenso die bmp von Jörg.

Die im o.g. Quellcode verwendete Test.bmp ist wohl nicht dabei oder hat beim hochladen den 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  
 



 
- Seite 3 -


Ich habe jetzt mal nachgeschaut und festgestellt das die Auflösung auf 16bit gelaufen ist statt auf 32bit.
Ich weiss noch nicht welches Programm das beeinflusst.
Mir fiel jetzt auf, das ich die Fenster im Vollbildmodus verschieben kann statt im Rändermodus, obwohl ich vorher auf Rändermodus ging auf der Grafikkarte. Da habe ich dann auch festgestellt das diese auf 16bit stand.

mfg
 
06.03.2009  
 




Jörg
Sellmeyer
Na schau an - demnächst gilt also nicht nur Minimalnbeispiel posten, sondern gleich den ganzen Rechner mitschicken
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
06.03.2009  
 



Noch ein Problem.
Wenn ich die Bitmap kopiere nach neu1& kommt nur ein schwarzes Viereck wenn ich es neben der anderen Grafik setze.
Muss das auch irgendwie wieder umgewandelt werden?

mfg
window 30,30-500,500
 $H Windows.ph
declare bmi#,b#
declare Pic$,Handle&,Neu&,wert&,hwin&,neu1&
Window 20,20-200,200
hWin& = Create(Window, %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 von BITMAPINFOHEADER
~GetDIBits(%hdc,Handle&,0,0,0,bmi#,0)--Dummy-Aufruf, um bmpHeader zu füllen (Rückgabe: 1=OK)
print sizeof(bmi#)
dim b#,bmi#.SizeImage&-----------------Bereich für 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 mit geänderten Farben erzeugen
startpaint hwin&
drawpic Neu&,0,0;0
endpaint
neu1&=create(hpiccopy,hwin&,0,0,64,64)
startpaint hwin&
drawpic neu1&,100,0;0
endpaint
wert&=bmi#.SizeImage&

whileloop 0,wert&,4

    print byte(b#,&loop),byte(b#,&loop+1),byte(b#,&loop+2)
    sleep 20

endwhile

dispose bmi#
dispose b#
waitkey
 
06.03.2009  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

18.758 Betrachtungen

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

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie