Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 19:36   #1
Xdron
Пользователь
 
Регистрация: 11.03.2010
Сообщений: 21
Печаль роцедура из Delphi в функцию C++ Builder

ребят ни как не могу переделать процедуру из делфи в функцию в билдере помогите пожалуйста!?!??!?!
вот процедура написаная в Делфи

procedure ReadBufFromBmp(Bmp: TBitmap; StartPos, Count, Val: integer; var MS: TStream);
var
Ind, Indx, Indy, Indz, Ind1, Divider: integer;
CurVal, MByte, R: byte;
begin
If Val > 8 then
Exit;
If (Val mod 2 <> 0) and (Val <> 1) then
Exit;
If MS = nil then
MS := TMemoryStream.Create;
MByte := Round(Power(2, Val) - 1);
Indz := Val;
CurVal := 0;
If Bmp.Width > Bmp.Height then
Divider := Bmp.Height
else
Divider := Bmp.Width;
StartPos := StartPos * 8 div Val + 1;
for Ind1 := 0 to (Count * 8 div Val) do
begin
Ind := 16;
Indx := StartPos div Divider;
Indy := StartPos mod Divider;
while (Ind >= 0) and (MS.Position <= StartPos + Count) do
begin
R := Byte(Bmp.Canvas.Pixels[Indx, Indy] shr Ind);
R := R and MByte;
CurVal := CurVal or (R shl (Indz - Val));
Inc(Indz, Val);
If Indz > 8 then
begin
Indz := Val;
MS.Write(CurVal, 1);
CurVal := 0;
end;
Dec(Ind, 8);
end;
Inc(StartPos);
end;
end;
Xdron вне форума Ответить с цитированием
Старый 08.06.2010, 21:45   #2
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

Несколько несложных изменений, и процедура на Delphi превращается в процедуру на C++Builder:
Код:
void __fastcall ReadBufFromBmp(Graphics::TBitmap *Bmp, int StartPos, int Count, int Val, TStream *MS)
{
int Ind, Indx, Indy, Indz, Ind1, Divider;
unsigned char CurVal, MByte, R;

if (Val > 8)
return;
if (Val % 2 != 0 && Val != 1)
return;
if (MS == NULL)
MS = new TMemoryStream();
MByte = Round(Power(2, Val) - 1);
Indz = Val;
CurVal = 0;
if (Bmp->Width > Bmp->Height)
Divider = Bmp->Height;
else
Divider = Bmp->Width;
StartPos = StartPos * 8 / Val + 1;
for (Ind1 = 0; Ind1 <= Count * 8 / Val; Ind1++)
{
Ind = 16;
Indx = StartPos / Divider;
Indy = StartPos % Divider;
while (Ind >= 0 && MS->Position <= StartPos + Count)
{
R = (unsigned char)(Bmp->Canvas->Pixels[Indx][Indy] >> Ind);
R &= MByte;
CurVal |= R << (Indz - Val);
Indz += Val;
if (Indz > 8)
{
Indz = Val;
MS->Write(CurVal, 1);
CurVal = 0;
}
Ind -= 8;
}
StartPos++;
}
}
n@sok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С Delphi 7 на C++ Builder 6 Kazik Помощь студентам 0 06.06.2010 13:25
Builder -> Delphi Avtograf Общие вопросы Delphi 0 02.06.2010 20:02
Из Delphi в Builder koljsch C++ Builder 2 03.09.2009 20:12
Разработать функцию генерирующую псевдослучайную последовательность чисел в DELPHI Алексей_xXx Помощь студентам 0 02.05.2009 21:34
Пишу DLL в Delphi.Вызываю функцию в С.Не работает Ozerich Общие вопросы Delphi 4 26.08.2008 10:17