Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 129
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09.10.2011, 12:31   #1 (Direktlink)
Stammuser
 
Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
Standard JPG-Bilddaten vom RAM aus laden

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.
Jonathan ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 09.10.2011, 12:46   #2 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von _Joerg_
 
Registriert seit: 15.02.2011
Beiträge: 106
Standard

Hallo Jonathan,
Reicht Dir das nicht aus?
Zitat:
@Create("hPic",N,S)
...
"&MEMBMP" - Es wird eine Bitmapkopie mit der aktuellen mit MCLS oder MLOADBMP erzeugten Speicherbitmap erstellt.

"&OGLBMP" - Es wird eine Bitmapkopie des aktuellen OpenGL-Bildschirms erstellt.

"&SCRBMP" - Es wird eine Bitmapkopie des aktuellen Hauptfensters erstellt.

"&DSKBMP" - Es wird eine Bitmapkopie des aktuellen Desktops erstellt.

"&CLPBMP" - Es wird eine Bitmapkopie der aktuellen Zwischenablage erstellt, wenn diese eine Bitmap enthält.
__________________
Anhören lohnt sich wuestensand.info
_Joerg_ ist offline   Mit Zitat antworten
Alt 09.10.2011, 13:23   #3 (Direktlink)
Unregistriert
Gast
 
Beiträge: n/a
Standard

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)
  Mit Zitat antworten
Alt 09.10.2011, 13:25   #4 (Direktlink)
Stammuser
 
Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
Standard

@_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...
Jonathan ist offline   Mit Zitat antworten
Alt 09.10.2011, 14:43   #5 (Direktlink)
Stammuser
 
Benutzerbild von Andreas Miethe
 
Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
Standard

Zitat:
Zitat von Jonathan Beitrag anzeigen
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.
Genau das macht der Code oben doch.
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)
Andreas Miethe ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 09.10.2011, 16:07   #6 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

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
ts-soft ist gerade online   Mit Zitat antworten
Alt 09.10.2011, 17:42   #7 (Direktlink)
Stammuser
 
Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
Standard

Zitat:
Zitat von Andreas Miethe Beitrag anzeigen
Genau das macht der Code oben doch.
Aus einem Speicherbereich wird ein Bitmap erstellt.
Äh, da haben sich unsere Posts wohl überschnitten (bzw. Unregistriert's Post wurde erst später freigeschaltet)...

@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.
Jonathan ist offline   Mit Zitat antworten
Alt 09.10.2011, 18:11   #8 (Direktlink)
Stammuser
 
Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
Standard

Ö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)
Mit einem Bereich gehts auch nicht. Hilfe


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.
Jonathan ist offline   Mit Zitat antworten
Alt 09.10.2011, 19:30   #9 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

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
Jac de Lad ist offline   Mit Zitat antworten
Alt 09.10.2011, 19:40   #10 (Direktlink)
Ist öfter hier
 
Registriert seit: 12.04.2009
Beiträge: 52
Standard

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#
H.Brill ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 10.10.2011, 12:37   #11 (Direktlink)
Stammuser
 
Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
Standard

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.
Jonathan ist offline   Mit Zitat antworten
Alt 10.10.2011, 13:29   #12 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Zitat:
Zitat von Jonathan Beitrag anzeigen
@RGH: Könntest Du nicht sowas wie "#download" in XProfan einbauen? Büddebüdde
Bis das soweit ist, nimm dies:
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
Keine großartigen Überprüfungen drinnen, aber das kannste selber ja noch
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
ts-soft ist gerade online   Mit Zitat antworten
Alt 10.10.2011, 13:41   #13 (Direktlink)
Stammuser
 
Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
Standard

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.
Jonathan ist offline   Mit Zitat antworten
Alt 12.10.2011, 15:37   #14 (Direktlink)
Stammuser
 
Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
Standard

Ö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
Trotzdem danke für die Funktion!


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.
Jonathan ist offline   Mit Zitat antworten
Alt 12.10.2011, 16:23   #15 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

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
ts-soft ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ä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



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:49 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2