completeknowitall Ответов: 1

Функциональность C++ Scanline в конструкторе embarcadero


Эм ... Я думал, что понял линию сканирования... но когда я перехожу через код, исходный указатель остается пустым, и nothng передается. Если у вас есть какие-то советы, я вас слушаю.
это ядро моего кода, я надеюсь сделать что-то с пикселями между чтением и записью, но эта часть не работает, и я не знаю почему.

void TDriverFrm::MoveBmp(Graphics::TBitmap *Dest, Graphics::TBitmap *Source, TColor Color)
{
  int x,y;
  TRGBTriple *Sbyte, *Dbyte;

  for(y=0; y<TILEDIM; y++){
    Sbyte = (TRGBTriple *)Source->ScanLine[y];
    Dbyte = (TRGBTriple *)Dest->ScanLine[y];
    for(x=0; x<TILEDIM; x++){
      Dbyte[x] = Sbyte[x];
    }
  }
}

Dave Kreskowiak

Вам придется определить, что "не работает". Это нам ни о чем не говорит. Что именно должен делать код и что он на самом деле делает?

Строка сканирования-это всего лишь массив байтов, составляющих одну строку пикселей в растровом изображении.

completeknowitall

извините, я думал, что это очевидно ( я думаю, что это никогда не бывает), я пытаюсь скопировать пиксельные данные пиксель за пикселем из одного растрового изображения в другое, используя функцию scanline. линия:

Sbyte = (TRGBTriple *) Источник->Scanline[y];

назначает указатель на правильную строку (я думаю) и линию

Dbyte[x] = Sbyte[x];

следует передать данные RGB в целевое растровое изображение. однако мой отладчик показывает, что

Sbyte[0] ... Sbyte[2] содержит все 0x00
(или, скорее, "\0", потому что он думает, что это символ *)

Я надеялся, что кто-то с опытом работы в scanline сможет указать на "очевидную" ошибку, которую я совершил.

1 Ответов

Рейтинг:
12

Dave Kreskowiak

Я не прикасался к C++ уже около 5 лет и никогда даже не слышал о Embarcadero, но... похоже, что ваш гипс применяется не к тому предмету. Разве это не должно быть что-то вроде:

Sbyte = (TRBGTriple *)(Source->scanline[y]);


completeknowitall

Вы правы. Я многому научился у тебя.
Я должен тебе, я должен тебе денег.

Спасибо.