![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование графики в формате Jpeg в CLX
Mim1 © (2004-08-27 13:24:00)Не получется отобразить картинку jpeg в CLX приложении. Судя посему TJPEGImage в своих предках использует VCLные классы из модуля GRAPHICS а не CLXные из QGRAPHICS. :(
Кто нибудь знает любой способ отображения JPEG'а в CLX?
подскажите пожалуйста
Mim1 (2004-08-27 19:10:00) [1]Забыл сказать, программу и dll компилять с пакетом rtl70.bpl иначе будут проблеммы с необщим диспетчером памяти и использованием TStream.
> [2] Анонимщик © (27.08.04 16:54)
Если вы не поняли, jpeg в clx не поддерживается так что код (того что не существует) привести не могу.
Mim1 (2004-08-27 17:32:00) [2]
> Не буду комментировать первую часть вопроса, ты бы поосторожнее
> выражался, если не в курсе
Не у круто, что бы я без тебя делал. Я в этом уверен на 90 процентов. Тем более я говорю "судя по всему", куда уж тут осторожнее.
> код бы привел, что ли.
1) new -> clx application
2) положите картинку с палитры копонент на форму , проверте что в uses qgraphics
2) Image1.picture.loadfromfile('');
Фсе.
> var
> BMP : TBitmap;
> jpeg: TJpegImage;
> begin
> ...
>
> BMP.Assign(jpeg);
Я даже знаю результат, "can't assign" потому что TBitmap из Greaphics <> TBitmap из QGreaphics.
Не ну супер мегарулез, я кажется дал достаточно инфы, сукдя по этому коду в конкретном случае вы знаете меньше меня. Хотя бы попробывали прежде чем отвечать.
Тем не менее решение нашел, дело в том что под линуксом jpg работает отлично, а вот в Windows почемуто не поддерживается
{$IFDEF LINUX}.
Add('jpg', SVJpegs, 0, TBitmap);
{$ENDIF}
Вышел из ситуации я подключением библиотечки с windows загрузкой bmp в mswindows и использованием стандартного функционала под linux.
Вот библиотечка.
library w32jpeg;
uses
SysUtils,
Classes,
Graphics,
Jpeg;
{$R *.res}
Function Bmp2Jpg(bmp,jpg:TStream):boolean;
var b:TBitmap;
j:TJPEGImage;
begin
result := true;
try
b := TBitmap.Create;
try
b.LoadFromStream(bmp);
j :=TJPEGImage.Create;
try
j.Assign(b);
j.SaveToStream(jpg);
finally
j.Free;
end;
finally
b.Free;
end;
except
Result := false;
end;
end;
Function Jpg2Bmp(jpg,bmp:TStream):boolean;
var b:TBitmap;
j:TJPEGImage;
begin
result := true;
try
j :=TJPEGImage.Create;
try
j.LoadFromStream(jpg);
b := TBitmap.Create;
try
b.Assign(j);
b.SaveToStream(bmp);
finally
b.Free;
end;
finally
j.Free;
end;
except
Result := false;
end;
end;
exports Bmp2Jpg, Jpg2Bmp;
end.
{$IFDEF MSWINDOWS}
Function Jpg2Bmp(jpg,bmp:TStream):boolean; external 'w32jpeg.dll';
Function Bmp2Jpg(bmp,jpg:TStream):boolean; external 'w32jpeg.dll';
{$ENDIF}
ms := TMemoryStream.Create;
try
BinaryToStream(s,ms);
ms.Position := 0;
{$IF Defined(MSWINDOWS)}
ms1 := TMemoryStream.Create;
try
if Jpg2Bmp(ms,ms1) then
begin
ms1.Position := 0;
Image1.Picture.LoadFromStream(ms1);
end;
finally
ms1.Free;
end;
{$ELSEIF Defined(LINUX)}
if Image1.Picture.Graphic = nil then
Image1.Picture.Graphic := TBitmap.create;
Image1.Picture.Graphic.LoadFromStream(ms);
{$IFEND}
finally
ms.Free;
end;
end;
Анонимщик (2004-08-27 16:54:00) [3]Не буду комментировать первую часть вопроса, ты бы поосторожнее выражался, если не в курсе. Не знаю и почему у тебя ничего не получается, код бы привел, что ли.
А jpeg в bmp переводится так:
var
BMP : TBitmap;
jpeg: TJpegImage;
begin
...
BMP.Assign(jpeg);
MIm1 (2004-08-27 13:31:00) [4]Подскажите хотябы преобразования jpeg в bmp во премя выполнения программы. :)