Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Fast DIB Resize, Delphi -> C++ 
:(
    Опции темы
stab
  Дата 7.11.2004, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Вот, решил сконвертировать:

Код

procedure FastResize32(Src,Dst:TFastDIB);
var
 x,y,xp,yp,sx,sy: Integer;
 Line: PLine32;
 pc: PFColorA;
begin
 sx:=(Src.Width shl 16)div Dst.Width;
 sy:=(Src.AbsHeight shl 16)div Dst.AbsHeight;
 yp:=0; pc:=Pointer(Dst.Bits);
 for y:=0 to Dst.AbsHeight-1 do
 begin
   Line:=Src.Scanlines[yp shr 16]; xp:=0;
   for x:=0 to Dst.Width-1 do
   begin
     pc^:=Line[xp shr 16];
     Inc(pc); Inc(xp,sx);
   end;
   pc:=Ptr(Integer(pc)+Dst.Gap);
   Inc(yp,sy);
 end;
end;


получил:

Код

void DIB::FastResize32(DIB * dst)
{
if (!dst->width || !dst->height) return;

int sx = (width << 16) / dst->width;
int sy = (height << 16) / dst->height;
int yp = 0;
DWORD * pc = (DWORD *) dst->bits;

for (int y = 0; y < dst->height; y++)
{
 DWORD * line = (DWORD *) (bits + (yp >> 16) * width);
 int xp = 0;
 for (int x = 0; x < dst->width; x++)
 {
  *pc = line[xp >> 16];
  pc++;
  xp += sx;
 }
 //pc:=Ptr(Integer(pc)+Dst.Gap); gap for 32bpp dibs is always 0
 yp += sy;
}
}


но, не работает, получается какая-то странная смесь пикселей исходного изображения, в чем может быть проблема? Вроде же код переписан один в один, а оригинал точно работает.
Добавлено @ 16:00
Как всегда, мучаешся весь день, идешь за помощью на форум, а потом через пять минут понимаешь все сам smile энергетика тут такая, видимо. Кароче:

Код

DWORD * line = (DWORD *) (bits + ((yp >> 16) * width) * sizeof(DWORD));


может кому пригодится...


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1377 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.