![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
JPG в BMP [D2005, XP]
Sergey2005 © (2006-01-02 21:04:00)Как можно быстро перевести JPG формат в BMP. Хочу вывести рисунок на канву, и обработать его, но для этого подходит ток BMP, который занимает много места. Вот и подумал, что если имея картинку в JPG, быстро преобразовать её BMP.
Sergey2005 (2006-01-07 19:59:00) [1]Мда, ладно буду пробовать.
Спасибо.
Virgo_Style (2006-01-07 19:56:00) [2]Sergey2005 (07.01.06 19:46) [12]
получить
Pixels + GetRValue, GetGValue, GetBValue.
Вместо Pixels также можно (а то и нужно, если большая картинка) использовать ScanLine.
проверить
>, <, =, <>
А другим способом нельзя?
можно, можно сумму квадратов разностей сравнивать, сумму модулей разностей, по отдельности, как я написал, еще какие-нибудь варианты... Никаких ограничений, кроме синтаксиса языка :-)
Sergey2005 (2006-01-07 19:46:00) [3]* для каждого пикселя сравнить, к примеру
(r>250) and (g>250) and (b>250), если выполняется, то заменить на 255, 255, 255. *
А другим способом нельзя?, типа If (bit>00000000 or bit<01010000) ......
Я просто не знаю как в дельфи получить и проверить код цвета, я привёл пример опираясь на общий код цвета их фотошопа.
Кефир87 (2006-01-07 19:43:00) [4]1. Интерполяция
2. Чтоб без грязи, нету
3. Увеличить контрестность?
Virgo_Style (2006-01-07 19:27:00) [5]это особенность jpeg, сжатие с потерями.
для каждого пикселя сравнить, к примеру
(r>250) and (g>250) and (b>250), если выполняется, то заменить на 255, 255, 255.
P.S. еще, лучше, пиксели, определенном, диапазоне.
Sergey2005 (2006-01-07 19:13:00) [6]Продолжение вопроса!
Нактал такой код:
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. Если нет других вариантов, то как лудше поменять все пексиля в опреднлённом диапозоне цвета на чистый цвет? Если можно в примере.
antonn (2006-01-04 10:33:00) [7]ой, то есть - пожалуйста :)
antonn (2006-01-04 10:32:00) [8]да поздравляю
Sergey2005 (2006-01-03 18:55:00) [9]Окей, попробую что получится, спасибо ещё раз.
antonn (2006-01-03 18:49:00) [10]это так, показать, что тут уже появился нужный bmp, с которым и работаем.
а вообще, я этот код когда то давно постил, вот и снома скопировал, да переправлять лень было:)
Sergey2005 (2006-01-03 18:47:00) [11]Спасибо antonn © за код, вот ток не понял что эт значит - bmp <-- .BMP
Эт коментарий чтоли?
antonn (2006-01-03 08:12:00) [12]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-02 21:11:00) [13]И эт всё, так просто?
Спасибо, щас попробую.
kami (2006-01-02 21:08:00) [14]MyBmp.Assign(MyJpg)