![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прграммно изменить разрешение рисунка?
ShotGun © (2005-07-19 09:24:00)Как можно это сделать? Кто может помочь?
Gydvin (2005-07-22 08:41:00) [1]Тоесть
FileStream := TFileStream.Create(name,
fmOpenReadWrite); следует читать как
FileStream := TFileStream.Create(filename,
fmOpenReadWrite);
Gydvin (2005-07-22 08:39:00) [2]Вот гдето выдрал и доделал, у меня работает
procedure tkart.SetResJpg(filename: string; dpix, dpiy: Integer);
const
BufferSize = 50;
DPI = 1; //inch
DPC = 2; //cm
var
Buffer: string;
index: INTEGER;
FileStream: TFileStream;
xResolution: WORD;
yResolution: WORD;
_type: Byte;
begin
FileStream := TFileStream.Create(name,
fmOpenReadWrite);
try
SetLength(Buffer, BufferSize);
FileStream.Read(buffer[1], BufferSize);
index := POS('JFIF',buffer);
if index > 0
then begin
FileStream.Seek(index + 6, soFromBeginning);
_type := DPI;
FileStream.write(_type, 1);
xresolution := swap(dpix);
FileStream.write(xresolution, 2);
yresolution := swap(dpiy);
FileStream.write(yresolution, 2);
end ;
index := POS('BM',buffer);
if index > 0
then begin
FileStream.Seek(index + 37, soFromBeginning);
// FileStream.write(_type, 1);
xresolution := strtoint(floattostr(RoundFloat(strtofloat(inttostr(dpix))*39.4,0)));
//swap(dpix);
// showmessage(floattostr(RoundFloat(strtofloat(inttostr(xresolution))/39.4,0)));
FileStream.write(xresolution, 2);
FileStream.Seek(index + 41, soFromBeginning);
yresolution :=strtoint(floattostr(RoundFloat(strtofloat(inttostr(dpiy))*39.4,0)));
//swap(dpiy);
FileStream.write(yresolution, 2);
end
finally
FileStream.Free;
end;
end;
dmk (2005-07-20 20:17:00) [3]Ознакомься с парой-тройкой алгоритмов ресемплинга.
Выбери подходящий и банзай.