| |
|
|
- Page 1 - |
|
Georg Hovenbitzer | Hallo zusammen,
mich erdrückt gerade eine riesige Wissenslücke und ich hoffe ihr può 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 Dimensione 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 Dimensione 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 ▲ |
|
|
|
|
| |
|
- Page 2 - |
|
| Wollte mal von meiner Bmp-File(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#)------------------Dimensione 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 per 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 modificato 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
|
|
|
| |
|
|
|
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
|
|
|
| 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 il valore 255 in R, G und B. Mit 2 Grafikprogrammen : Paintshop und Micrografx.
mfg |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| Wohlbemerkt die Werte imho nicht im Format RGB sondern BGR vorliegen. |
|
|
| |
|
|
|
| das spielt jetzt im Test keine Rolle, derweil jede Farbe il valore 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 |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
E.T. | Eben (wegen noch-nicht-schlafen-können ) mal probiert: Test1 und Test2.bmp zeigen bei mir jeweils 255 (Rest 0) per 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 ▲ |
|
|
|
| |
|
- Page 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 |
|
|
| |
|
|
|
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#)------------------Dimensione 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 per 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 modificato 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
|
|
|
| |
|
|