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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2014, 20:37   #1
Xaker_Two
Пользователь
 
Регистрация: 03.02.2013
Сообщений: 73
Смущение Черные поля при вращении изображения(2D графика Delphi)

Всем зрасьте) говорю сразу поиском не пользовался а по сему не знаю была такая тема или нет!!!
Вобщем есть некая картинка, которая вращается в окне на заданное количество гадусов, все вроде хорошо и картинка вращается и не лагает особо НО есть черные поля! Дабы видеть всю картинку я задал размеры второго битмапа в который сливается уже повернутая картинка как радиус будущего круга(просто нашёл длину диагонали своей картинки) и отцентровал её и в тех местах где нет какого либо цвета все рисуется мрачным черным(.
Так вот вопрос в том и заключается как эту черноту убрать(ну а в идеале заменить на нужный цвет)?!
Я не спрашиваю методы задания цвета пикселю я спрашиваю как избавиться от черноты НЕ ПРИБЕГАЯ к методам сравнения(хотя смотря какого может я чего-то не знаю) т.к. на самой картинке тоже может быть черный цвет...

вот код поворота
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
x, y: integer;
r: single;
s, c: extended;
begin
ct:=ct+1;
for y := -my to bm1.Height - 1 do
  begin
  for x := -mx to bm1.Width - 1 do
    begin
    r := sqrt(sqr(x - xo) + sqr(y - yo));
    SinCos(Angle + arctan2((y - yo), (x - xo)), s, c);
    bm1.Canvas.Pixels[x+mx,y+my]:=bm.Canvas.Pixels[round(xo + r * c), round(yo + r * s)];
    end;
  end;
Form1.Canvas.Draw(100, 100, bm1);
Form1.Caption:=VarToStr(Angle);
Angle:= Angle + AngleValue;
if ct>StrToFloat(Edit2.Text) then Timer1.Enabled:=False;
if ct>StrToFloat(Edit2.Text) then ct:=0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ct:=0;
Angle:=0;
AngleValue:=(PI/180)*StrToFloat(Edit1.Text);

bm := TBitMap.Create;
bm.LoadFromFile('la2(old).bmp');

Sbm1:=Round(sqrt(sqr(bm.Width) + sqr(bm.Height)));

bm1 := TBitMap.Create;
bm1.Width:=Sbm1;
bm1.Height:=Sbm1;

xo:=bm.Width div 2;
yo:=bm.Height div 2;
mx:=(bm1.Width - bm.Width) div 2;
my:=(bm1.Height - bm.Height) div 2;
end;
ну и картинка с чернотой
Изображения
Тип файла: png Безымянный.png (85.5 Кб, 50 просмотров)
Xaker_Two вне форума Ответить с цитированием
Старый 15.02.2014, 22:15   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

А залить всё перед отрисовкой цветом фона пробовали ?
Код:
BackColor := bm.canvas.pixels[0, 0]; // в формкреэйт
...
Form1.Canvas.Brush.Color := BackColor;
Form1.Canvas.Pen.Color := BackColor;
Form1.Canvas.Fillrect(Bounds(100, 100, bml.Width, bml.Height));
phomm вне форума Ответить с цитированием
Старый 16.02.2014, 00:04   #3
Xaker_Two
Пользователь
 
Регистрация: 03.02.2013
Сообщений: 73
Печаль

разумеется вот только толку от этого ноль т.к. перерисовка проходится по всем пикселям второго битмапа и присваивает им цвет заново(кстати из-за этого начало мигать + мне не надо заливать цветом второго битмапа а надо тем же розовым который на фоне у самолета)
Код:
for y := -my to bm1.Height - 1 do
  begin
  for x := -mx to bm1.Width - 1 do

Последний раз редактировалось Xaker_Two; 16.02.2014 в 00:07.
Xaker_Two вне форума Ответить с цитированием
Старый 16.02.2014, 00:26   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
function pix(var bm: tbitmap; x, y: integer): TColor;
begin
  if (x < 0) or (y < 0) or (x >= bm.Width) or (y >= bm.Height) then
    result := bm.Canvas.pixels[0, 0]
  else
    result := bm.Canvas.pixels[x, y];
end;

...

bm1.Canvas.Pixels[x+mx,y+my]:=pix(bm,round(xo + r * c),round(yo + r * s));
Скорость работы будет удручать
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.02.2014, 23:50   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

А почему бы не наложить каст "floodfill" на тьму?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 17.02.2014, 03:09   #6
Xaker_Two
Пользователь
 
Регистрация: 03.02.2013
Сообщений: 73
По умолчанию

Rin Вопрос что это?? я не знаю что это и как этим пользоваться
Xaker_Two вне форума Ответить с цитированием
Старый 17.02.2014, 10:51   #7
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

А установить розовый цвет как transparent?
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 17.02.2014, 15:30   #8
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Щелкай меня полностью. Переходишь по линку, CTRL+F, вводишь "Floodfill".
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 18.02.2014, 01:36   #9
Xaker_Two
Пользователь
 
Регистрация: 03.02.2013
Сообщений: 73
По умолчанию

Rin пасибки ценная инфа но как я уже написал в самом вопросе может получиться так что само изображение будет содержать заданный цвет...(
Xaker_Two вне форума Ответить с цитированием
Старый 18.02.2014, 01:38   #10
Xaker_Two
Пользователь
 
Регистрация: 03.02.2013
Сообщений: 73
По умолчанию

BDA пасибо работает корректно но скорость реально удручает особенно на слабых машинках
Xaker_Two вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое изменение графика при переносе данных, формулы и графика на другой лист REztor Microsoft Office Excel 0 01.06.2013 18:01
Классы. Чтение и создание .bmp изображения. Пропадает 1 пиксел при создании изображения. s-mumrik Visual C++ 3 12.04.2013 21:21
Flash сглаживание при вращении изображения demon112 Общие вопросы Web 2 23.12.2012 11:17
Измененние цвета фона поля (поля со списком) при редактировании TimRus Microsoft Office Access 2 17.05.2010 21:56
черные пиксели на изображении при Paste из Clipboard NieL Мультимедиа в Delphi 3 30.04.2009 15:55