ich habe folgendes Problem.
Ich will per Pointer auf einer Textur einen Farbwert auslesen(z.B. Rot).
Wenn ich nun meinen Code anwende wird mir ein anderer Farbwert angezeigt als wenn ich ihn über PB mit Point() auselese.
Code: Alles auswählen
Procedure D3D9_Point(Texture.l, x,y)
pRow = 0
*pPixel = 0
Global LockedRect.D3DLOCKED_RECT
ForEach Texture()
   If Texture()\TextureID = Texture
      If x > Texture()\Details\Width
         x = Texture()\Details\Width
      EndIf
      If y > Texture()\Details\Height
         y = Texture()\Details\Height
      EndIf
      
      ;LockedRect\pBits ist der Bereich in dem die Textur geladen worden ist.
      ;LockedRect\Pitch ist der Abstand der Zeilen der Textur
      ;LockRect(Level,@LockedRect,0,#D3DLOCK_READONLY) Level ist der Bereich auf dem die Werte ausgelesen werden.
      
      
      Texture()\Texture\LockRect(0,@LockedRect,0,#D3DLOCK_READONLY)  ;<--------------------------Farbe auslesen
      pRow = LockedRect\pBits  ;<--------------------------Farbe auslesen
      pRow + (LockedRect\Pitch*y)  ;<--------------------------Farbe auslesen
      *pPixel = pRow  ;<--------------------------Farbe auslesen
      Debug PeekL(*pPixel+(x)*3)&$FF  ;<--------------------------Farbe auslesen
      ProcedureReturn PeekL(*pPixel+x*3) ;<--------------------------Farbe auslesen
      Texture()\Texture\UnlockRect(0) ;<--------------------------Farbe auslesen
      
    EndIf
Next
EndProcedure
Zum Testen:
Code: Alles auswählen
;/based on Steven "Dreglor" Garcias DX9 files 
    #D3D_OK = 0 
    #D3DADAPTER_DEFAULT = 0 
    #D3DDEVTYPE_HAL = 1 
    #D3DCREATE_HARDWARE_VERTEXPROCESSING = $00000040 
    #D3DMULTISAMPLE_NONE =  0 
    #D3DSWAPEFFECT_DISCARD = 1 
    #D3DPRESENT_RATE_DEFAULT = $00000000 
    #D3DPRESENT_INTERVAL_DEFAULT = $00000000 
    #D3DFMT_D16 = 80 
    #D3DUSAGE_DEPTHSTENCIL = ($00000002)     
    
  Enumeration  
    #D3DXIFF_BMP         = 0
    #D3DXIFF_JPG         = 1
    #D3DXIFF_TGA         = 2
    #D3DXIFF_PNG         = 3
    #D3DXIFF_DDS         = 4
    #D3DXIFF_PPM         = 5
    #D3DXIFF_DIB         = 6
    #D3DXIFF_HDR         = 7
    #D3DXIFF_PFM         = 8
    #D3DXIFF_FORCE_DWORD = $7FFFFFFF
  EndEnumeration
    
  Enumeration
      #D3DRTYPE_SURFACE                =  1
      #D3DRTYPE_VOLUME                 =  2
      #D3DRTYPE_TEXTURE                =  3
      #D3DRTYPE_VOLUMETEXTURE          =  4
      #D3DRTYPE_CUBETEXTURE            =  5
      #D3DRTYPE_VERTEXBUFFER           =  6
      #D3DRTYPE_INDEXBUFFER            =  7
      #D3DRTYPE_FORCE_DWORD            = $7FFFFFFF
  EndEnumeration
       
    #D3DLOCK_READONLY = $00000010
    #D3DLOCK_DISCARD = $00002000
    #D3DLOCK_NOOVERWRITE = $00001000
    #D3DLOCK_NOSYSLOCK = $00000800
    #D3DLOCK_DONOTWAIT = $00004000
    #D3DLOCK_NO_DIRTY_UPDATE = $00008000
       
;- Globals 
Global *D3D.IDIRECT3D9 
Global *D3DDevice.IDIRECT3DDEVICE9 
 ;- Macro 
  
CompilerIf Defined(D3DCOLOR_DEFINED, #PB_Constant) = #False
Macro D3DCOLOR
      l
 EndMacro
      #D3DCOLOR_DEFINED = 0
CompilerEndIf
  
Macro D3DFORMAT 
      l 
EndMacro 
Macro D3DPOOL 
      l 
EndMacro              
Macro D3DXIMAGE_FILEFORMAT 
      l 
EndMacro 
Macro D3DRESOURCETYPE
      l
EndMacro
;-  Structure 
 Structure D3DDISPLAYMODE 
      Width.l 
      Height.l 
      RefreshRate.l 
      Format.l 
 EndStructure 
  
 Structure D3DPRESENT_PARAMETERS 
      BackBufferWidth.l 
      BackBufferHeight.l 
      BackBufferFormat.l 
      BackBufferCount.l 
      MultiSampleType.l 
      MultiSampleQuality.l 
      SwapEffect.l 
      hDeviceWindow.l 
      Windowed.l 
      EnableAutoDepthStencil.l 
      AutoDepthStencilFormat.l 
      flags.l 
      FullScreen_RefreshRateInHz.l 
      PresentationInterval.l 
 EndStructure 
  
 Structure D3DXMACRO 
      Name.s 
      Definition.s 
 EndStructure  
  
 Structure D3DBOX
      left.l
      top.l
      right.l
      bottom.l
      Front.l
      Back.l
 EndStructure
  
 Structure D3DXIMAGE_INFO
     Width.l
     Height.l
     Depth.l
     MipLevels.l
     Format.D3DFORMAT
     ResourceType.D3DRESOURCETYPE
     ImageFileFormat.D3DXIMAGE_FILEFORMAT;
EndStructure 
  
Structure D3DLOCKED_RECT
      Pitch.l
      *pBits.l
EndStructure
  
Structure Texture
     TextureID.l
     Texture.IDIRECT3DTEXTURE9
     Details.D3DXIMAGE_INFO
EndStructure 
    
 Global NewList Texture.Texture()
  
;- Import 
                
Import "d3d9.lib" 
    Direct3DCreate9(SDKVersion.l) 
EndImport 
Import "d3dx9.lib" 
    D3DXGetImageInfoFromFileA.l(pSrcFile.s, *pSrcInfo.D3DXIMAGE_INFO)
    D3DXGetImageInfoFromFileW.l(pSrcFile.s, *pSrcInfo.D3DXIMAGE_INFO)
    D3DXCreateTextureFromFileA.l(*pDevice.IDIRECT3DDEVICE9, pSrcFile.s, *ppTexture.IDIRECT3DTEXTURE9)
    D3DXCreateTextureFromFileW.l(*pDevice.IDIRECT3DDEVICE9, pSrcFile.s, *ppTexture.IDIRECT3DTEXTURE9)
EndImport
  
  
  CompilerIf #PB_Compiler_Unicode
    Macro D3DXGetImageInfoFromFile
      D3DXGetImageInfoFromFileW
    EndMacro
  CompilerElse
    Macro D3DXGetImageInfoFromFile
      D3DXGetImageInfoFromFileA
    EndMacro
  CompilerEndIf
  
    CompilerIf #PB_Compiler_Unicode
    Macro D3DXCreateTextureFromFile
      D3DXCreateTextureFromFileW
    EndMacro
  CompilerElse
    Macro D3DXCreateTextureFromFile
      D3DXCreateTextureFromFileA
    EndMacro
  CompilerEndIf
Procedure InitD3D9()
 
  If hwnd = #Null
    
    *D3D = Direct3DCreate9(32)
    ProcedureReturn #True
  Else
    
    ProcedureReturn #False
  EndIf
EndProcedure
Procedure D3D9_OpenWindowedScreen(Window.l, x.l, y.l, Width.l, Height.l, Title.s, WindowFlags.l = #PB_Window_ScreenCentered | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar) 
  
  If *D3D <> #Null And *D3DDevice = #Null 
    
    If *D3DDevice <> #Null 
      
      ;Device Check 
      *D3DDevice\Release() 
      *D3DDevice = #Null 
    EndIf 
    
    Current.D3DDISPLAYMODE 
    If *D3D\GetAdapterDisplayMode(#D3DADAPTER_DEFAULT, Current) = #D3D_Ok 
      
      ;Back Buffer Check 
      If *D3D\CheckDeviceType(#D3DADAPTER_DEFAULT, #D3DDEVTYPE_HAL, Current\Format, Current\Format, #True) = #D3D_Ok 
        
        ;Z-buffer Check 
          
          hwnd.l = OpenWindow(Window, x, y, Width, Height, Title, WindowFlags) 
          
          If hwnd <> #Null 
          
            Rendering.D3DPRESENT_PARAMETERS 
            Rendering\BackBufferCount = 1 
            Rendering\MultiSampleType = #D3DMULTISAMPLE_NONE 
            Rendering\MultiSampleQuality = 0 
            Rendering\SwapEffect = #D3DSWAPEFFECT_DISCARD 
            Rendering\hDeviceWindow = hwnd 
            Rendering\flags = #Null 
            Rendering\FullScreen_RefreshRateInHz = #D3DPRESENT_RATE_DEFAULT 
            Rendering\PresentationInterval = #D3DPRESENT_INTERVAL_DEFAULT 
            Rendering\BackBufferFormat = Current\Format 
            Rendering\EnableAutoDepthStencil = #True 
            Rendering\AutoDepthStencilFormat = #D3DFMT_D16 
            Rendering\Windowed = #True 
            Rendering\BackBufferWidth = 0 
            Rendering\BackBufferHeight = 0 
            
            If *D3D\CreateDevice(#D3DADAPTER_DEFAULT, #D3DDEVTYPE_HAL, hwnd, #D3DCREATE_HARDWARE_VERTEXPROCESSING, Rendering, @*D3DDevice) = #D3D_Ok 
              
              ProcedureReturn #True 
            Else 
              
              ;Creation of the device failed 
              CloseWindow(Window) 
              ProcedureReturn #False 
            EndIf 
          Else 
            
          
          ;16bit z-buffer does not work 
          ProcedureReturn #False 
        EndIf 
      Else 
        
        ;the back buffer format failed 
        ProcedureReturn #False 
      EndIf 
    Else 
      
      ;Failed to get the current mode. 
      ProcedureReturn #False 
    EndIf 
  Else 
    
    ;D3D not initilized! 
    ProcedureReturn #False 
  EndIf 
EndProcedure 
Procedure D3D9_Shutdown(Window) 
  If *D3DDevice <> #Null 
    
    *D3DDevice\Release() 
    *D3DDevice = #Null 
  EndIf 
  
  If IsWindow(Window) 
    
    CloseWindow(Window) 
  EndIf 
  
  
  If *D3D <> #Null 
    
    *D3D\Release() 
    *D3D = #Null 
  EndIf 
  
  ProcedureReturn #True 
EndProcedure 
Procedure D3D9_LoadTexture(Texture.l, File.s)
  AddElement(Texture())
  Texture()\TextureID = Texture
  Texture()\Texture = TextureID.IDIRECT3DTEXTURE9
  
  D3DXGetImageInfoFromFile.l(File, Texture()\Details)
  
  If D3DXCreateTextureFromFile(*D3DDevice, File, @Texture()\Texture) = #D3D_Ok
    ProcedureReturn #True
  Else
    
    ;failed to load texture
    ProcedureReturn #False
  EndIf
EndProcedure
Procedure D3D9_Point(Texture.l, x,y)
pRow = 0
*pPixel = 0
Global LockedRect.D3DLOCKED_RECT
ForEach Texture()
   If Texture()\TextureID = Texture
      If x > Texture()\Details\Width
         x = Texture()\Details\Width
      EndIf
      If y > Texture()\Details\Height
         y = Texture()\Details\Height
      EndIf
      
      ;LockedRect\pBits ist der Bereich in dem die Textur geladen worden ist.
      ;LockedRect\Pitch ist der Abstand der Zeilen der Textur
      ;LockRect(Level,@LockedRect,0,#D3DLOCK_READONLY) Level ist der Bereich auf dem die Werte ausgelesen werden.
      
      
      Texture()\Texture\LockRect(0,@LockedRect,0,#D3DLOCK_READONLY)  ;<--------------------------Farbe auslesen
      pRow = LockedRect\pBits  ;<--------------------------Farbe auslesen
      pRow + (LockedRect\Pitch*y)  ;<--------------------------Farbe auslesen
      *pPixel = pRow  ;<--------------------------Farbe auslesen
      Debug PeekL(*pPixel+(x)*3)&$FF  ;<--------------------------Farbe auslesen
      ProcedureReturn PeekL(*pPixel+x*3) ;<--------------------------Farbe auslesen
      Texture()\Texture\UnlockRect(0) ;<--------------------------Farbe auslesen
      
    EndIf
Next
EndProcedure
Procedure GetTextureWidth(Texture.l)
  
  ForEach Texture()
    If Texture()\TextureID = Texture
       ProcedureReturn Texture()\Details\Width
    EndIf
  Next
  
EndProcedure
Procedure GetTextureHeight(Texture.l)
  
  ForEach Texture()
    If Texture()\TextureID = Texture
       ProcedureReturn Texture()\Details\Height
    EndIf
  Next
  
EndProcedure
Procedure LoadTerrain(File.s)
 If D3D9_LoadTexture(0,File) = #False
     End
 EndIf
  
 Global TerrainWidth
 Global TerrainHeight
 Global LockedRect.D3DLOCKED_RECT
 
  TerrainWidth = GetTextureWidth(0)
  TerrainHeight = GetTextureHeight(0)
  For x=0 To TerrainWidth-1
    For y=0 To TerrainHeight-1
    Color = D3D9_Point(0, x,y)
    Next 
  Next
EndProcedure
If InitD3D9() = #True
  If D3D9_OpenWindowedScreen(0, 10, 10, 640, 480, "DirectX For PB: Textures")  = #True
  
     If LoadTerrain("Data\terrain.png") = #False
        End
     EndIf
  EndIf
EndIf
Hab keine Ahnung wo ich die Hochladen kann.
Und ein Bild zum Auslesen.
z.B.
(Von neobrothers.de)

Das Bild könnt ihr unter anderem im PNG oder BMP Format einlesen.
Leider wird gif in dem Fall nicht unterstützt.
Ich hoffe ihr könnt mir helfen.
Falls der Code zu unübersichtlich ist sagt es dann werde ich versuchen in übersichtlicher zu machen.
Danke für die Antworten schonmal im Vorraus.
Mit freundlichen Grüßen Pandora

 - LibSGD - MP3D Engine -
  - LibSGD - MP3D Engine -  