Форум: "Media";
Текущий архив: 2011.05.08;
Скачать: [xml.tar.bz2];
ВнизTOleGraphic изменяет оригинальный размер GIFa? Найти похожие ветки
← →
miox © (2008-05-28 07:44) [0]Вот уже долгое время бьюсь над проблемой - надеюсь здесь мне помогут.
Мспользую TOleGraphic для загрузки в TImage изображений формата gif и jpg. Вот таким вот методом.
var
infs : TMemoryStream;//
s:string;
w,h,r : integer;
picture : TOleGraphic;
bitmap:TBitmap;
begin
picture := TOleGraphic.create;
bitmap:=TBitmap.Create;
try
infs:=TMemoryStream.Create;
infs.Clear ;
infs.LoadFromFile(filepic);
picture.LoadFromStream(штfs);
bitmap.Width:=picture.Width;
bitmap.Height:=picture.Height;
StatusBar1.Panels[0].Text := p.W="+InttoSTr(picture.Width) + " p.H="+InttoSTr(picture.Height);
bitmap.Canvas.Draw(0, 0, picture);
Image1.Picture.Bitmap := bitmap;
finally
FreeAndNil(picture);
FreeAndNil(bitmap);
infs.Free;
end;
end;
По какой то причине размер изображения загруженый из потока в picture меньше примерно на 20% (по свойствам hight/width и визуально также заметно) чем оригинальное изображение. В результате изображение несколько искажается да и вообще мне надо чтоб выводилось оригинальное.
Пробовал сохранять из потока в файл - этот файл нормальный - значит в потоке нормальный размер. Выходит TOleGraphic глючит или что? Может у меня где то ошибка?
Как побороть?
Сторонние компоненты не предлагать это уже напоследок.
Спасибо заранее.
miox
← →
Palladin © (2008-05-28 15:38) [1]для jpeg, все работает прекрасно если сделать uses jpeg; для gif, можно выкорчевать модуль из RxLib
а то, что ты привел, явно не то, что на самом деле
← →
miox © (2008-05-28 15:56) [2]Palladin, на самом деле работаю с GIF. А с JPEG и родные компоненты винды работают (во всяком случае то что мне нужно это просто отобразить на экране оригинальное изображение).
Кстати доп. информация. Размер выводимой картинки (hight/width) зависит от разрешения экрана. При большом разрешении возможна ситуация когда hight/width загруженной картинки даже больше чем оригинальные размеры. Закономерности не увидел никакой.
Что за фигня!
ЗЫ
Так неохота в winAPI ковырятся. :(
← →
Sapersky (2008-05-28 16:34) [3]http://delphimaster.net/view/15-1211878733/
Лично я получал размеры так:
Picture.get_Width(w); Picture.get_Height(h);
DC := CreateCompatibleDC(0);
B.bmWidth := MulDiv(w, GetDeviceCaps(DC, LOGPIXELSX), 2540);
B.bmHeight := MulDiv(h, GetDeviceCaps(DC, LOGPIXELSY), 2540);
DeleteDC(DC);
Наверное, CreateCompatibleDC правильнее чем GetDC(0), которая используется в TOleGraphic, во всяком случае, зависимости размера от разрешения не припомню.
Или, как вариант, Picture.get_Handle(hBmp), затем GetObject.
А вообще есть хороший компонент TGifImage.
← →
miox © (2008-05-29 10:44) [4]Sapersky, вы правы - так действительно размеры какие надо. Выходит это TOleGraphics кривой?
Чтож бум копаться в winAPI.
Спасибо.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2011.05.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c