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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2012, 22:51   #1
antoxamad
Пользователь
 
Регистрация: 04.02.2012
Сообщений: 32
Вопрос Image - белая полоса

Уважаемы форумчане вообщем проблема такая, у меня есть 100 - 200 jpg файлов(фотографий), мне требуется в каждой фотографии дорисовать(именно дорисовать с увеличением размера по высоте ровно на толщину полоски, а не приклеить белую полоску поверх фотографии) снизу фотографии белую полоску 100 - 200 пикселей толщиной для дальнейшей подписи фотографий.
Естественно через фотошоп ручками это все лопатить не серьезно.

Крутил, вертел в Delphi XE компонент timage пробовал дорисовывать через канвасы но нечего не выходило. подскажите как организовать данную ситуацию в программном коде.
Заранее благодарен за помощь!
antoxamad вне форума Ответить с цитированием
Старый 04.02.2012, 23:40   #2
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

Даже не знаю зачем вы его крутили) вот, сварганил, на 7ке правда.

Код:
......
uses jpeg;
......


procedure whiteline(fLoad,fSave:string;dy:byte);
var
  bm:TBitmap;
  rct:trect;
  jp:TJPEGImage;
begin
  bm:=TBitmap.Create;
  jp:=TJPEGImage.Create;
  try
  jp.LoadFromFile(fLoad);
  except
  end;
  bm.Width:=jp.Width;
  bm.Height:=jp.Height+dy;
  rct:=Rect(0,0,jp.Width,jp.Height);
  bm.Canvas.Brush.Color:=clWhite;
  bm.Canvas.FillRect(bm.Canvas.ClipRect);
  bm.Canvas.StretchDraw(rct,jp);
  jp.Assign(bm);
  jp.SaveToFile(fSave);
  bm.Free;
  jp.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 whiteline('c:\1.jpg','c:\3.jpg',20);
end;
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 05.02.2012, 10:48   #3
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Механизм Action в фотошопе не знаете? Тут и делфи не нужен. Незнание порождает головную боль.
А теперь по коду:
MadReason, смысл ставить try..except на загрузку файла? тогда уже на всю процедуру и сделать ее функцией, типа этого:
Код:
function whiteline(fLoad,fSave:string;dy:byte):Boolean;
begin
  Result:=True;
  try
    //код обработки
  except
    Result:=False;
  end;
end;
Для создаваемого TBitmap следует явно задавать глубину цвета:
Код:
TBitmap.PixelFormat:=pf24bit;
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 05.02.2012 в 10:54.
3D Hunter вне форума Ответить с цитированием
Старый 05.02.2012, 21:58   #4
antoxamad
Пользователь
 
Регистрация: 04.02.2012
Сообщений: 32
По умолчанию

MadReason
спс за помощь, посмотрел ваш код, малость добавил напильника как говорится, все работает, но есть одно но, подскажи пожалуйста что значат строки:

Цитата:
bm.Width:=jp.Width; //Ширина бм будет такая же как ширина загруженного jpg файла
bm.Height:=jp.Height+dy; //Высота бм будет такая же как высота загруженного jpg файла + количество пикселей dy
rct:=Rect(0,0,jp.Width,jp.Height); //в переменную загоняем прямоугольник первые две координаты указывают начало прямоугольника, вторые естественно конец, то есть рисуем большой белый прямоугольник на всю фотографию
bm.Canvas.Brush.Color:=clWhite; //белый цвет кисти
bm.Canvas.FillRect(bm.Canvas.ClipRe ct); //это непонятно
bm.Canvas.StretchDraw(rct,jp);//это не понятно
jp.Assign(bm);//вот это не понятно
собственно сам новичок с делфой на вы ) вот не понятные последние три строки, подскажи как и для чего они.



3dHunter
Цитата:
Для создаваемого TBitmap следует явно задавать глубину цвета:
Код:

TBitmap.PixelFormat:=pf24bit;
куда нужно поместить данный код чтобы создать 24х битный бм, заранее спасибо.

Ну и общий вопросец такой, с каким качеством сохраняется конечный жпг? размер исходного файла 1,5 мб а конечный получается 300кб.
antoxamad вне форума Ответить с цитированием
Старый 05.02.2012, 22:14   #5
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

Код:
rct:=Rect(0,0,jp.Width,jp.Height);//это просто задание прямоугольника с 4мя координатами
bm.Canvas.FillRect(bm.Canvas.ClipRect); //заливаем всю бм белым цветом
bm.Canvas.StretchDraw(rct,jp);//грубо говоря копируем изображение из jp в bm
jp.Assign(bm);//а тут преобразовываем bm в jp
FillRect и StretchDraw гляньте в справочнике, яснее будет

немножко доработан:
Код:
procedure whiteline(fLoad, fSave: string; dy: byte);
var
  bm: TBitmap;
  rct: trect;
  jp: TJPEGImage;
begin
  bm := TBitmap.Create;
  bm.PixelFormat := pf24bit;
  jp := TJPEGImage.Create;
  jp.PixelFormat := jf24Bit;
  try
    jp.LoadFromFile(fLoad);
    jp.CompressionQuality := 85;//коэф сжатия, не знаю сколько нужно. он от 0 до 100
  except
    bm.Free;
    jp.Free;
    Exit;
  end;
  bm.Width := jp.Width;
  bm.Height := jp.Height + dy;
  rct := Rect(0, 0, jp.Width, jp.Height);
  bm.Canvas.Brush.Color := clWhite;
  bm.Canvas.FillRect(bm.Canvas.ClipRect);
  bm.Canvas.StretchDraw(rct, jp);
  jp.Assign(bm);
  jp.SaveToFile(fSave);
  bm.Free;
  jp.Free;
end;
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###

Последний раз редактировалось MadReason; 05.02.2012 в 22:32.
MadReason вне форума Ответить с цитированием
Старый 07.02.2012, 09:52   #6
antoxamad
Пользователь
 
Регистрация: 04.02.2012
Сообщений: 32
По умолчанию

вот спасибо огромное, буду разбираться, отличный подгончик на сегодняшний мой день варенья!

На сколько я понимаю
Цитата:
jp.CompressionQuality := 85;//коэф сжатия, не знаю сколько нужно. он от 0 до 100
действует для сохранения jpg файла.?.
antoxamad вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Белая полоса в 2-ной рамке Syltan HTML и CSS 3 07.04.2010 14:57
Белая страница при входе на один сайт???? murmaid Помощь студентам 7 08.03.2010 14:55
Белая страница при входе в интернет. Помогите исправить! furenok Помощь студентам 10 19.12.2009 22:22