AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Surface Stream

Ein Thema von EWeiss · begonnen am 28. Dez 2013 · letzter Beitrag vom 30. Dez 2013
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Surface Stream

  Alt 28. Dez 2013, 17:06
Ich möchte mein Surface (nein nicht das man kaufen kann) also das von DirectX in einen Stream(TStream) kopieren.

Ich finde nur Möglichkeiten unter SlimDX

Zitat:
DataRectangle dr = s.LockRectangle(LockFlags.None);
DataStream gs = dr.Data;
Ich möchte das aber unter Delphi bewerkstelligen. DirectX

Was fehlt mir da ..

SDK SlimDX

Code:

namespace SlimDX
{
  // Summary:
  //     A DataRectangle provides supporting information for a SlimDX.DataStream whose
  //     data is organized within two dimensions (a rectangle).
  public class DataRectangle
  {
    // Summary:
    //     Initializes a new instance of the SlimDX.DataRectangle class.
    //
    // Parameters:
    //   pitch:
    //     The row pitch, in bytes.
    //
    //   data:
    //     The data.
    public DataRectangle(int pitch, DataStream data);

    // Summary:
    //     Gets the SlimDX.DataStream containing the actual data bytes.
    public DataStream Data { get; }
    //
    // Summary:
    //     Gets or sets the number of bytes of data between two consecutive (1D) rows
    //     of data.
    public int Pitch { get; set; }
  }
}
Code:
    // Summary:
    //     Reads a sequence of bytes from the current stream and advances the position
    //     within the stream by the number of bytes read.
    //
    // Parameters:
    //   buffer:
    //     An array of values to be read from the stream.
    //
    //   offset:
    //     The zero-based byte offset in buffer at which to begin storing the data read
    //     from the current stream.
    //
    //   count:
    //     The maximum number of bytes to be read from the current stream.
    //
    // Returns:
    //     The number of bytes read from the stream.
    //
    // Exceptions:
    //   System.NotSupportedException:
    //     This stream does not support reading.
    //
    //   System.ArgumentNullException:
    //     buffer is a null reference.
    //
    //   System.ArgumentOutOfRangeException:
    //     offset or count is negative.
    //
    //   System.ArgumentException:
    //     The sum of offset and count is greater than the buffer length.
    public override int Read(byte[] buffer, int offset, int count);

gruss

Geändert von EWeiss (28. Dez 2013 um 17:18 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Surface Stream

  Alt 28. Dez 2013, 19:21
Hab das Surface jetzt erst mal temporär in ein Bitmap gespeichert.
Das wird auf die Platte geschaufelt so alle 250 MS

wenn ich aber die Farben ermittle sind es immer die falschen

Delphi-Quellcode:
function TCapX.GetColor(gs: TMemoryStream; List: TStrings): TColor;
var
  bu : Array[0..3] of byte;
  i: Integer;
  pos: Integer;
begin

  i := 0;
  r := 0;
  g := 0;
  b := 0;

  for pos := 0 to List.Count - 1 do
  begin
    gs.Position := strToInt(List.Strings[pos]);
    //gs.Seek(gs.Position, 4);
    gs.Read(bu, 0);
    r := r + bu[2];
    g := g + bu[1];
    b := b + bu[0];
    inc(I);
  end;

  Result := RGB2TColor(r div i , g div i , b div i);

end;
sorry hab da mit TMemoryStream noch nichts am hut gehabt.

Wollte die Funktion eigentlich so auslegen was aber mit Listen nicht funktioniert.

for Pos in List
gruss

Geändert von EWeiss (29. Dez 2013 um 01:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Surface Stream

  Alt 28. Dez 2013, 19:38
Was ist das denn?
gs.Read(bu, 0);
1. sollte man Readbuffer statt Read verwenden und 2. muss das zweite Argument die Anzahl der zu lesenden Bytes enthalten (also sizeof(bu)).
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.804 Beiträge
 
Delphi 12 Athens
 
#4

AW: Surface Stream

  Alt 28. Dez 2013, 19:46
1. sollte man Readbuffer statt Read verwenden
Read liest "maximal" soviele Bytes, wie angegeben und bei weniger (z.B. Ende des Streams) erkennt man das am Result, was er aber nicht auswertet.

ReadBuffer liest genau so viel, wie man angibt und bei weniger, gibt es eine Exception.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Surface Stream

  Alt 28. Dez 2013, 20:07
hmm Danke nur was ist jetzt richtig

gruss

Geändert von EWeiss (29. Dez 2013 um 01:07 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Surface Stream

  Alt 28. Dez 2013, 23:43
Sorry Change denke hab ne Lösung gefunden.

gruss

Geändert von EWeiss (29. Dez 2013 um 01:06 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz