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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2015, 16:49   #11
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Потому что в файле находится изображение в формате jpeg, а не bmp.
А как можно уменьшенный файл в bmp перегнать снова, чтобы он был тоже небольшим?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.05.2015, 17:27   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
type
  TRGBArray = ARRAY [0 .. 32767] OF TRGBTriple;
  pRGBArray = ^TRGBArray;

procedure SmoothResize(abmp: tbitmap; NuWidth, NuHeight: integer);
var
  xscale, yscale: Single;
  sfrom_y, sfrom_x: Single;
  ifrom_y, ifrom_x: integer;
  to_y, to_x: integer;
  weight_x, weight_y: array [0 .. 1] of Single;
  weight: Single;
  new_red, new_green: integer;
  new_blue: integer;
  total_red, total_green: Single;
  total_blue: Single;
  ix, iy: integer;
  bTmp: tbitmap;
  sli, slo: pRGBArray;
begin
  abmp.PixelFormat := pf24bit;
  bTmp := tbitmap.Create;
  bTmp.PixelFormat := pf24bit;
  bTmp.Width := NuWidth;
  bTmp.Height := NuHeight;
  xscale := bTmp.Width / (abmp.Width - 1);
  yscale := bTmp.Height / (abmp.Height - 1);
  for to_y := 0 to bTmp.Height - 1 do
  begin
    sfrom_y := to_y / yscale;
    ifrom_y := Trunc(sfrom_y);
    weight_y[1] := sfrom_y - ifrom_y;
    weight_y[0] := 1 - weight_y[1];
    for to_x := 0 to bTmp.Width - 1 do
    begin
      sfrom_x := to_x / xscale;
      ifrom_x := Trunc(sfrom_x);
      weight_x[1] := sfrom_x - ifrom_x;
      weight_x[0] := 1 - weight_x[1];
      total_red := 0.0;
      total_green := 0.0;
      total_blue := 0.0;
      for ix := 0 to 1 do
      begin
        for iy := 0 to 1 do
        begin
          sli := abmp.Scanline[ifrom_y + iy];
          new_red := sli[ifrom_x + ix].rgbtRed;
          new_green := sli[ifrom_x + ix].rgbtGreen;
          new_blue := sli[ifrom_x + ix].rgbtBlue;
          weight := weight_x[ix] * weight_y[iy];
          total_red := total_red + new_red * weight;
          total_green := total_green + new_green * weight;
          total_blue := total_blue + new_blue * weight;
        end;
      end;
      slo := bTmp.Scanline[to_y];
      slo[to_x].rgbtRed := Round(total_red);
      slo[to_x].rgbtGreen := Round(total_green);
      slo[to_x].rgbtBlue := Round(total_blue);
    end;
  end;
  abmp.Width := bTmp.Width;
  abmp.Height := bTmp.Height;
  abmp.Canvas.Draw(0, 0, bTmp);
  bTmp.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
const
  col = 60;
var
  bmp: tbitmap;
  i, j, dx: integer;
  t: tdatetime;
  Pixels: PByteArray;
begin
  bmp := GetFormImage;
  //bmp.PixelFormat := pf24bit;
  t := now;
  SmoothResize(bmp, bmp.Width div 2, bmp.Height div 2);
  dx := DWord(bmp.Scanline[1]) - DWord(bmp.Scanline[0]);
  Pixels := bmp.Scanline[0];
  for i := 0 to bmp.Height - 1 do
  begin
    for j := 0 to bmp.Width - 1 do
    begin
      Pixels[j * 3] := max(0, Pixels[j * 3] - col); // blue
      Pixels[j * 3 + 1] := max(0, Pixels[j * 3 + 1] - col); // green
      Pixels[j * 3 + 2] := max(0, Pixels[j * 3 + 2] - col); // red
    end;
    inc(DWord(Pixels), dx);
  end;
  caption := FormatDateTime('s.zzz', now - t);
  bmp.SaveToFile(ExtractFilePath(ParamStr(0)) + '1.bmp');
  bmp.Free;
end;
Например так разрешение будет уменьшено в 4 раза (SmoothResize нашел в интернете), а затем затемнено. Можно уменьшить битность изображения. Можно сохранить картинку в формате png. Если просто проделать преобразование BMP -> JPG -> BMP, то размер не изменится (если исходные и новые разрешение и битность картинки совпадают).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.05.2015, 19:13   #13
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ок, в итоге решил не заморачиваться пока с битмапом, нет времени. Решил испльзовать свойство AlphaBlend формы.
Но, вопрос: как установить размеры второй формы (которая полупрозрачная), чтобы она было аккуратно и рвно по размерам главной формы?
Так:
Код:
 Form_Main_Menu.Width:=Form_Main.ClientWidth;
 Form_Main_Menu.Height:=Form_Main.ClientHeight;
не работает. Полупрозрачная формы абы где и как появляется.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.05.2015, 19:27   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А положение Top и Left кто будет устанавливать?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.05.2015, 06:05   #15
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос

Цитата:
Сообщение от Аватар Посмотреть сообщение
А положение Top и Left кто будет устанавливать?
Ладно, с размерами формы я разобрался вроде бы.
Вопрос в другом. Компоненты размещенные на форме, тоже становятся прозрачными. Можно ли как-то этого избежать? Чтобы только формы была прозрачной. Хочется, чтобы кнокпи, например, не становились прозрачными.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 03.05.2015, 12:29   #16
Diamond15
 
Регистрация: 30.04.2015
Сообщений: 4
По умолчанию

Добрый день!
А нет возможности создать Trectangle черного цвета такого же размера, как и ваша картинка, и на заднем фоне. А потом играть через FloatAnimations c Opacity самой картинки, понижая с 1 до 0. Нельзя так в вашем случае?
Diamond15 вне форума Ответить с цитированием
Старый 03.05.2015, 12:35   #17
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от Diamond15 Посмотреть сообщение
Добрый день!
А нет возможности создать Trectangle черного цвета такого же размера, как и ваша картинка, и на заднем фоне. А потом играть через FloatAnimations c Opacity самой картинки, понижая с 1 до 0. Нельзя так в вашем случае?
Да зачем, это слишком замутно. Через ALphablend это решается.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу алгоритм для открытия изображения BMP, PNG, JPG Rubelka Помощь студентам 5 10.12.2014 15:41
Перемещая папки с экзел файлом и jpg картинками, ссылки на jpg не работают?? Igorilla Microsoft Office Excel 0 16.03.2013 21:36
Изменение разрешения изображения .jpg Nina+ Общие вопросы C/C++ 2 21.06.2012 22:28
Затемнение экрана Renok Общие вопросы Delphi 1 02.05.2012 19:16
Сохранение заданий на печать в файл изображения JPG DimD Фриланс 1 15.04.2009 19:27