Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Вниз

JPG в BMP   Найти похожие ветки 

 
Sergey2005   (2006-01-02 21:04) [0]

Как можно быстро перевести JPG формат в BMP. Хочу вывести рисунок на канву, и обработать его, но для этого подходит ток BMP, который занимает много места. Вот и подумал, что если имея картинку в JPG, быстро преобразовать её BMP.


 
kami ©   (2006-01-02 21:08) [1]

MyBmp.Assign(MyJpg)


 
Sergey2005   (2006-01-02 21:11) [2]

И эт всё, так просто?
Спасибо, щас попробую.


 
antonn ©   (2006-01-03 08:12) [3]

uses JPEG;

jpeg := TJPEGImage.Create;
try
  jpeg.CompressionQuality := 100;
  jpeg.LoadFromFile(s);
  bmp := TBitmap.Create;
  try
    bmp.Assign(jpeg);

    bmp <-- .BMP

  finally
    bmp.Free
  end;
finally
  jpeg.Free
end;


 
Sergey2005   (2006-01-03 18:47) [4]

Спасибо antonn ©  за код, вот ток не понял что эт значит - bmp <-- .BMP
Эт коментарий чтоли?


 
antonn ©   (2006-01-03 18:49) [5]

это так, показать, что тут уже появился нужный bmp, с которым и работаем.
а вообще, я этот код когда то давно постил, вот и снома скопировал, да переправлять лень было:)


 
Sergey2005   (2006-01-03 18:55) [6]

Окей, попробую что получится, спасибо ещё раз.


 
antonn ©   (2006-01-04 10:32) [7]

да поздравляю


 
antonn ©   (2006-01-04 10:33) [8]

ой, то есть - пожалуйста :)


 
Sergey2005   (2006-01-07 19:13) [9]

Продолжение вопроса!
Нактал такой код:

procedure TForm1.FormCreate(Sender: TObject);
var
 jpg: TJPEGImage;
 bitm:TBitMap;
begin
 jpeg := TJPEGImage.Create;
 try
   jpg.LoadFromFile("C:\Test\1.jpg");
   jpg.CompressionQuality := 100;
   bitm := TBitMap.Create;
   try
     bitm.Assign(jpg);
     form1.TransparentColorValue:=clBlack;//
     form1.TransparentColor:=true;//
     form1.Width:=bitm.Width;
     form1.Height:=bitm.Height;
     image1.Picture.Assign(bitm);
   finally
     bitm.Free
   end;
 finally
   jpg.Free
 end;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
 x, y: integer;
begin
 for x := 0 to Form1.ClientWidth div bitm.Width do
   for y := 0 to Form1.ClientHeight div bitm.Height do
     image1.Canvas.Draw(x * bitm.Width, y * bitm.Height, bitm);
end;


Вот и возникло пару вопросов.
1. Перекодирование происходит не чисто, тоесть чёрный цвет не везде чистый, что делает своего рода грязь по краям рисунка. Как это можно исправить?
2. Есть ещо какой нибудь другой вариант перекодировать, но чтоб без грязи?
3. Если нет других вариантов, то как лудше поменять все пексиля в опреднлённом диапозоне цвета на чистый цвет? Если можно в примере.


 
Virgo_Style ©   (2006-01-07 19:27) [10]

это особенность jpeg, сжатие с потерями.

для каждого пикселя сравнить, к примеру
(r>250) and (g>250) and (b>250), если выполняется, то заменить на 255, 255, 255.

P.S. еще, лучше, пиксели, определенном, диапазоне.


 
Кефир87 ©   (2006-01-07 19:43) [11]

1. Интерполяция
2. Чтоб без грязи, нету
3. Увеличить контрестность?


 
Sergey2005   (2006-01-07 19:46) [12]

* для каждого пикселя сравнить, к примеру
(r>250) and (g>250) and (b>250), если выполняется, то заменить на 255, 255, 255. *
А другим способом нельзя?, типа If (bit>00000000 or bit<01010000) ......
Я просто не знаю как в дельфи получить и проверить код цвета, я привёл пример опираясь на общий код цвета их фотошопа.


 
Virgo_Style ©   (2006-01-07 19:56) [13]

Sergey2005   (07.01.06 19:46) [12]

получить
Pixels + GetRValue, GetGValue, GetBValue.
Вместо Pixels также можно (а то и нужно, если большая картинка) использовать ScanLine.

проверить
>, <, =, <>

А другим способом нельзя?
можно, можно сумму квадратов разностей сравнивать, сумму модулей разностей, по отдельности, как я написал, еще какие-нибудь варианты... Никаких ограничений, кроме синтаксиса языка :-)


 
Sergey2005   (2006-01-07 19:59) [14]

Мда, ладно буду пробовать.
Спасибо.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
2-1136437869
rubey
2006-01-05 08:11
2006.01.22
Добавление в COMBOBOX


10-1111131843
AloneAli
2005-03-18 10:44
2006.01.22
Как передать двойной щелчек мыши в Word e


2-1136637611
Igorioha
2006-01-07 15:40
2006.01.22
Blob


14-1135978840
Sergey Masloff
2005-12-31 00:40
2006.01.22
Оказывается сегодня уже 31


11-1116963540
sormy
2005-05-24 23:39
2006.01.22
Сохранить все позиции ListBox a, а затем их вернуть как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский