Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.22;
Скачать: CL | DM;

Вниз

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

 
Vitas2 ©   (2002-08-11 08:33) [0]

Подскажете как в Bitmap загрузить файл формата JPG?

Я использую следующий код

........

uses ..., jpeg, ...;

........

var
Bitmap : TBitmap;
begin
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile (FileName);

........

то возникает ошибка при попытке открытия файла формата JPG.
А компонент TImage поле подключения модуля jpeg справляется с этой
звдачей.
И еще подскажите как загрузить другие форматы.

Заранее спасибо.


 
Prooksius ©   (2002-08-11 10:25) [1]

Эта процедура преобразует загруженный JPEG в Bitmap.
Загрузить JPEG надо в TJPEGImage или подобный.

procedure GetBitmapFromImg(PhotoPicture: TPicture; Bitmap: TBitmap);
begin
if PhotoPicture.Graphic is TBitmap then begin
Bitmap.Assign(PhotoPicture.Bitmap);
end else if PhotoPicture.Graphic is TGIFImage then begin
Bitmap.Assign((PhotoPicture.Graphic as TGIFImage).Frames[0].Bitmap)
end else if PhotoPicture.Graphic is TJPEGImage then begin
(PhotoPicture.Graphic as TJPEGImage).DIBNeeded;
Bitmap.Assign(PhotoPicture.Graphic);
end else if PhotoPicture.Graphic is TMetafile then begin
Bitmap.Width := PhotoPicture.Metafile.Width;
Bitmap.Height := PhotoPicture.Metafile.Height;
Bitmap.Canvas.Draw(0, 0, PhotoPicture.Metafile);
end else if PhotoPicture.Graphic is TIcon then begin
Bitmap.Width := PhotoPicture.Icon.Width;
Bitmap.Height := PhotoPicture.Icon.Height;
Bitmap.Canvas.Draw(0, 0, PhotoPicture.Icon);
end;
end;


Можно также загрузить картинку в Stream и из него - нарисовать на Bitmap. Вот процедура (немного другая, но принцип тот же), делающая это:

procedure BLOBToPicture(BlobField: TBlobField; Picture: TPicture);
var
StrStream: TStringStream;
StreamStr: string;
GIFImage: TGIFImage;
JPEGImage: TJPEGImage;
begin
StrStream := TStringStream.Create(StreamStr);
BlobField.SaveToStream(StrStream);
StrStream.Position := 0;
if CompareText(Copy(StrStream.DataString, 0, 2), "BM") = 0 then begin
Picture.Assign(BlobField);
end else if CompareText(Copy(StrStream.DataString, 0, 3), "GIF") = 0 then begin
GIFImage := TGIFImage.Create;
GIFImage.LoadFromStream(StrStream);
Picture.Bitmap.Canvas.Draw(0, 0, GIFImage);
GIFImage.Free;
end else if CompareText(Copy(StrStream.DataString, 7, 4), "JFIF") = 0 then begin
JPEGImage := TJPEGImage.Create;
JPEGImage.ProgressiveDisplay := True;
if JPEGImage.PixelFormat = jf24bit then Picture.Bitmap.PixelFormat := pf24bit
else Picture.Bitmap.PixelFormat := pf8bit;
JPEGImage.LoadFromStream(StrStream);
Picture.Bitmap.Width := JPEGImage.Width;
Picture.Bitmap.Height := JPEGImage.Height;
Picture.Bitmap.Canvas.Draw(0, 0, JPEGImage);
JPEGImage.Free;
end else Picture.Assign(nil);
StrStream.Free;
end;


 
PC Maniac   (2002-08-12 12:14) [2]

У tbitmap есть метод DRAW, предназначенный для рисования на канве битмапа. Загрузи jpeg в tjpegimage и рисуешь его на битмапе. Не забудь в конце удалить (free) объект tjpegimage.



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

Текущий архив: 2002.08.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
14-71365
greenrul
2002-07-27 19:01
2002.08.22
Посоветуйте книжку для новичка по РНР+MySQL


14-71327
AL2002
2002-07-26 13:19
2002.08.22
Кто играл в детстве на Аtаri 8-бит


1-71150
michael_b
2002-08-13 14:00
2002.08.22
как вызвать HTML help из программы


14-71364
quark
2002-07-24 01:06
2002.08.22
Помогите с сайтом adept7.narod.ru


3-71020
Andrushk
2002-07-25 14:58
2002.08.22
Научите пользоваться DBGridOnDrawColumnCell