AGB  ·  Datenschutz  ·  Impressum  







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

Totale Pointer-Verwirrung

Ein Thema von rowkajjh · begonnen am 9. Jan 2006 · letzter Beitrag vom 10. Jan 2006
Antwort Antwort
Seite 2 von 2     12   
rowkajjh

Registriert seit: 9. Jan 2006
38 Beiträge
 
#11

Re: Totale Pointer-Verwirrung

  Alt 9. Jan 2006, 15:28
Zitat von Der Jan:
Zitat von rowkajjh:
Eigentlich müßte doch die Konvertierung char -> double problemlos sein, oder? ...
Häh?
Ne leider nicht. Nimm "Byte". Char ist im Gegensatz zu C kein Integer-Typ. Pascal ist halt ganz schön gewöhnungsbedürftig, wenn man von C/C++ kommt. Ging mir auch so
Naja, macht aber Spaß.

Einen hab ich noch. Ich bin jetzt ziemlich weit gekommen, bloß mit dem Indexzugriff klappt es noch nicht. Ich habe mal ein Beispielprogramm erstellt:

Delphi-Quellcode:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const width = 4;
const height = 4;
const mapsused = 4;

type TLayer = array of double; //Feld von doubles
type pTLayer = ^TLayer; //Zeiger auf eben jenes
type TMap = array of pTLayer; //Feld von Zeigern

var
  map : TMap;
  i : Integer;

   x,y : Integer;
   srcmap : pTLayer;
   srcline : pTLayer;
begin

  GetMem(map, mapsused*sizeof(TLayer));

  for i := 0 to mapsused-1 do
  begin
       GetMem(map[i], width*height*sizeof(double));
  end;

  srcmap := map[0];
  for y := 0 to height-1 do
  begin

    srcline := srcmap;
    Inc(srcline, y*width);

    for x := 0 to width-1 do
    begin
      srcline^[x] := 1.0; // <--- Hier krachts
    end;
  end;



  for i := 0 to mapsused-1 do
  begin
    FreeMem(map[i], width*height*sizeof(double));
  end;
  
  FreeMem(map, mapsused*sizeof(TLayer));

end.

Könnte mir bitte jemand den Knoten ausm Kopf nehmen? Danke!
  Mit Zitat antworten Zitat
rowkajjh

Registriert seit: 9. Jan 2006
38 Beiträge
 
#12

Re: Totale Pointer-Verwirrung

  Alt 9. Jan 2006, 20:28
Ich schon wieder

Ich habs jetzt soweit:

Delphi-Quellcode:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const width = 5;
const height = 5;
const mapsused = 5;

type TLayer = array of double; //Feld von doubles
type TMap = array of array of double; //Feld von Zeigern

var
  map : TMap;
  i : Integer;
  x,y : Integer;
  srcline : array of double;
begin

  SetLength(map, mapsused);

  for i := 0 to mapsused-1 do
  begin
    SetLength(map[i], width*height);
  end;

  for y := 0 to height-1 do
  begin
    srcline := map[0]; // <--- 'Incompatible types'
    for x := 0 to width-1 do
    begin
      map[0,y*width+x] := 1.0;
    end;
  end;

  for i := 0 to mapsused-1 do
  begin
    map[i] := nil;
  end;

  map := nil;

end.
Ich hätte jetzt nur noch gerne map[0,y*width+x] ersetzt, daß man nur noch srcline[x] schreiben muß. Wie ich es jetzt hier gemacht habe gehts nicht: 'Incompatible types'

Jemand noch eine Idee?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Totale Pointer-Verwirrung

  Alt 9. Jan 2006, 20:32
Zitat:
Ich hätte jetzt nur noch gerne map[0,y*width+x] ersetzt, daß man nur noch srcline[x] schreiben muß. Wie ich es jetzt hier gemacht habe gehts nicht: 'Incompatible types'
y*width+x ist vom Typ float, als Indices von Arrays sind aber nur Integer erlaubt, deshalb mu0t du Sicherstellen dass Wert im Index eine Integer ist z.B. durch map[0,Trunc(y*width+x)]
Markus Kinzler
  Mit Zitat antworten Zitat
rowkajjh

Registriert seit: 9. Jan 2006
38 Beiträge
 
#14

Re: Totale Pointer-Verwirrung

  Alt 10. Jan 2006, 06:33
Ich habs jetzt so gelöst:

Delphi-Quellcode:

Procedure TImgProc.Byte2double(outmap : integer; img : TBitmap);
var
   x,y : Integer;
   line : PByteArray;
   src : pDouble;
begin
     if(img.PixelFormat <> pf8bit) then exit;

     for y := 0 to FHeight-1 do
     begin
          line := img.ScanLine[y];
          src := @FMap[outmap, FWidth*y];
          for x := 0 to FWidth-1 do
          begin
            src^ := line[x];
            Inc(src);
// FMap[outmap, y*FWidth+x] := line[x];
          end;
     end;
end;
also mit src := @FMap[outmap, FWidth*y];
So richtig gefällt es mir nicht, aber geht erstmal.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:06 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