![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
Hallo,
gibt es in XProfan (API wäre auch noch in Ordnung, zumindest mit einem funktionierenden Quellcode-Beispiel) eine Möglichkeit, eine Bilddatei vom Arbeitsspeicher aus zu laden? Also, sagen wir mal, ich lade den Inhalt einer JPG-Datei in einen Bereich/String/Array/... und möchte nun mit dieser geladenen Datei wie mit Create("hPic" ein Bitmap-Objekt erzeugen und das Handle darauf bekommen. Den Umweg über die Festplatte will ich nicht gehen. In Wirklichkeit lade ich den Inhalt natürlich nicht aus einer Datei, wäre ja schon dämlich Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
|
#2 (Direktlink) | |
|
Weiß worum´s geht
![]() Registriert seit: 15.02.2011
Beiträge: 106
|
Hallo Jonathan,
Reicht Dir das nicht aus? Zitat:
__________________
Anhören lohnt sich wuestensand.info |
|
|
|
|
|
|
#3 (Direktlink) |
|
Gast
Beiträge: n/a
|
Es gibt einen Code von Andreas, wenn du sowas suchst.
Code:
Proc CatchImage
Parameters MemPointer& ,Size&
Struct GdiplusStartupInput = GdiplusVersion&,DebugEventCallback&,SuppressBackgroundThread&,SuppressExternalCodecs&
Var GDIP& = ImportDll("Gdiplus.dll","")
Var OLE& = ImportDll("Ole32.dll","")
Var Kernel& = ImportDll("Kernel32.dll","")
Declare gdpsi#,gdiplusToken&,ImageObject&,GraphicObject&,pStream&,RetVal&
'GDIPlus starten
Dim gdpsi#,GdiplusStartupInput
gdpsi#.GdiplusVersion& = 1
gdpsi#.DebugEventCallback& = 0
gdpsi#.SuppressBackgroundThread& = 0
gdpsi#.SuppressExternalCodecs& = 0
GdiplusStartup(ADDR(gdiplusToken&),gdpsi#,0)
Dispose gdpsi#
'Speicher bereitstellen
Var m_hBuffer& = GlobalAlloc(2,Size&)
Var pBuffer& = GlobalLock(m_hBuffer&)
RtlMoveMemory(pBuffer&,MemPointer&,Size&)
GlobalUnlock(m_hBuffer&)
'Stream erzeugen
CreateStreamOnHGlobal(m_hBuffer&,1,Addr(pStream&))
GdipCreateBitmapFromStream(pStream&,Addr(ImageObject&))
'hBitmap erzeugen
GdipCreateHBITMAPFromBitmap(ImageObject&,Addr(RetVal&),0)
'aufräumen
Var Command& = Long(pStream&,0)
call(Long(Command&,8),pStream&)'IStream.Release
GlobalFree(m_hBuffer&)
GdipDisposeImage(ImageObject&)
GdipDeleteGraphics(GraphicObject&)
GdiplusShutdown(gdiplusToken&)
FreeDll GDIP&
FreeDll OLE&
FreeDll Kernel&
Return RetVal&
EndProc
' cls
' declare mem#,size&
' var bild$ = Loadfile$("Bild laden","*.*")
' case bild$ = "":end
' size& = filesize(bild$)
' dim mem#,size&
' set("Filemode",0)
' Blockread(bild$,mem#,0,size&)
' set("filemode",2)
' var hBild& = CatchImage(mem#,sizeof(mem#))
' Dispose mem#
Geändert von Frabbing (09.10.2011 um 16:42 Uhr) |
|
|
|
#4 (Direktlink) |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
@_Joerg_: Nein, denn ich habe den Inhalt einer JPG-Datei (also wirklich komplett mit Header und allem, wie es auch auf der Festplatte stehen würde) im RAM. Nicht als Bitmap-Objekt / MemoryBitmap. Deshalb suche ich auch etwas, was aus JPG-Daten im RAM ein Bitmap-Objekt erstellt.
Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
Geändert von Jonathan (09.10.2011 um 17:44 Uhr) Grund: Kleines Missverständnis, an wen der Post gerichtet ist... |
|
|
|
|
|
#5 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
Aus einem Speicherbereich wird ein Bitmap erstellt.
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher Geändert von Andreas Miethe (09.10.2011 um 16:20 Uhr) |
|
|
|
|
|
|
|
#6 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
Hier noch eine Version nur für BMP, dafür wird aber auch kein GDIPlus benötigt, läuft also ab Win95
Code:
Proc CatchBmp
Parameters MemPointer&
Declare hDC&, BITMAPFILEHEADER#, BMPInfo&, init&, hImage&
Var cv$ = Get("CallConv")
Set("CallConv", "STDCALL")
hDC& = External("user32.dll", "GetDC", External("user32.dll", "GetDesktopWindow"))
Dim BITMAPFILEHEADER#, 14
BITMAPFILEHEADER# = MemPointer&
BMPInfo& = MemPointer& + 14
init& = MemPointer& + Long(BITMAPFILEHEADER#, 10)
hImage& = External("gdi32.dll", "CreateDIBitmap", hDC&, BMPInfo&, 4, init&, BMPInfo&, 0)
External("user32.dll", "ReleaseDC", External("user32.dll", "GetDesktopWindow"), hDC&)
Dispose BITMAPFILEHEADER#
Set("CallConv", cv$)
Return hImage&
EndProc
__________________
Gruß Thomas Wenn mir früher jemand gesagt hätte, ich würde freiwillig eine Wanze mit mir herum tragen und sie auch noch selbst aufladen, hätte ich laut gelacht. Heute habe ich ein Smartphone. http://realsource.de |
|
|
|
|
|
#7 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
Zitat:
@Unregistriert & ts-soft: Danke! Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
|
#8 (Direktlink) |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
Öhm, kann mir mal jemand einen funktionierenden Beispielcode geben...? Ich krieg's nicht zum laufen
Das hier geht nicht: Code:
'Ich lade einfach eine JPG-Datei in den String Bitmap& = @CatchImage(Addr(String$), Len(String$) - 1) Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
#9 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Als Parameter musst du den Bereich nehmen, wo das Bild drin steckt und die Größe des Bereichs. Also keine Strings!
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#10 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 12.04.2009
Beiträge: 52
|
Geht doch einwandfrei.
Einen String darfst du auch nicht nehmen. Lade eine .jpg in Frank Abbings XProfan_Datengenerator. Gib darin einen Bereich# an und kopiere das Generierte. Du bekommst sogar die Größe (Dim Bereich# ....) mitgeliefert. Dann brauchst du nur noch anzeigen : Code:
Declare Pointer&, img& Pointer& = Bereich# img& = CatchImage(Pointer&, 4728) '-> Größe aus Franks Datengenerator DrawPic img&, 5, 10, 0 Waitkey Dispose Bereich# |
|
|
|
|
|
|
#11 (Direktlink) |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
AARGH! Jetzt weiß ich, warum das nicht geht... Ich lade die Datei nämlich mit @DownloadFile() herunter und nehme die Daten aus $download. Blöderweise ist das ein String. Und mein JPG enthält Nullbytes. Mist.
Also doch der Umweg über die Festplatte... (Oder weiß jemand, wie ich sonst an die Daten von @DownloadFile() rankomme?) @RGH: Könntest Du nicht sowas wie "#download" in XProfan einbauen? Büddebüdde Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
#12 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
Zitat:
Code:
Var internetdll& = ImportDLL("Wininet.dll", "")
Proc DownLoadToMem
Parameters Url$, Mem#, Size&
Declare Bytes&
Var agent$ = "Mozilla/4.0 (compatible; ST)"
Var hInet& = InternetOpenA(agent$, 0, 0, 0, 0)
Var hData& = InternetOpenUrlA(hInet&, Url$, "", 0, $8000000, 0)
Case hData& : InternetReadFile(hData&, Mem#, Size&, Addr(Bytes&))
InternetCloseHandle(hInet&)
InternetCloseHandle(hData&)
Return Bytes&
EndProc
verbessern. Das Ergebnis der Procedure ist die tatsächliche Grösse des Bildes / der Datei. Vorher also den Buffer (Mem#) nicht zu klein wählen.
__________________
Gruß Thomas Wenn mir früher jemand gesagt hätte, ich würde freiwillig eine Wanze mit mir herum tragen und sie auch noch selbst aufladen, hätte ich laut gelacht. Heute habe ich ein Smartphone. http://realsource.de |
|
|
|
|
|
|
#13 (Direktlink) |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
Juhuu! Danke!!! Genau sowas hab ich gebraucht!
Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
#14 (Direktlink) |
|
Stammuser
![]() Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
|
Öhm... Deine Downloadfunktion geht nicht ganz... Du hast nämlich den String direkt übergeben und nicht als Adresse - da konvertiert XProfan dann mittels Val() den String in eine Zahl -> es kommt Mist raus. Ich hab's mal korrigiert
Code:
Var internetdll& = ImportDLL("Wininet.dll", "")
Proc DownLoadToMem
Parameters Url$, Mem#, Size&
Declare Bytes&
Var agent$ = "Mozilla/4.0 (compatible; ST)"
Var hInet& = InternetOpenA(Addr(agent$), 0, 0, 0, 0)
Var hData& = InternetOpenUrlA(hInet&, Addr(Url$), "", 0, $8000000, 0)
Case hData& : InternetReadFile(hData&, Mem#, Size&, Addr(Bytes&))
InternetCloseHandle(hInet&)
InternetCloseHandle(hData&)
Return Bytes&
EndProc
Gruß Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b Das Schönste am Programmieren ist immernoch die Fehlersuche Dieser Beitrag besteht zu 100% aus Recycling-Bytes.
|
|
|
|
|
|
#15 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
Woher soll ich denn Wissen welche XProfan Version Du nutzt, X2 kann es auch
ohne Addr
__________________
Gruß Thomas Wenn mir früher jemand gesagt hätte, ich würde freiwillig eine Wanze mit mir herum tragen und sie auch noch selbst aufladen, hätte ich laut gelacht. Heute habe ich ein Smartphone. http://realsource.de |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| BF 2 brauche ich ca. 8 min um zu laden | defPlaya | Computerspiele | 5 | 12.07.2007 19:39 |
| [Byte-Code/Hex]In Bitmap Bilddaten komische zwei 0 Bytes.. ? | Sniper-Hawk | Sonstige Programmiersprachen | 4 | 22.11.2006 21:57 |
| S-ATA Treiber aus DOS laden | Anaconda | Software - Allgemein | 1 | 11.07.2005 13:01 |
| pc laden | weinachtsmann | Allgemein | 4 | 23.04.2003 17:44 |
| WIN ME neu laden | Rolf | Windows 95/98/ME/2000/NT | 2 | 22.12.2002 11:51 |