Форум: "Media";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизПреобразовать Graphic в BitMap Найти похожие ветки
← →
gunner (2003-09-03 14:20) [0]У меня в Image.Picture.Graphic находится изображение
что нужно сделать чтобы это изображение перегнать в Image2.Picture.BitMap ?
Заранее спасибо !
← →
Skier (2003-09-03 14:22) [1]Image.Picture.Bitmap
← →
gunner (2003-09-03 14:26) [2]> Skier ©
Если бы это было так просто я бы не писал !
Image.Picture.Bitmap.Empty даёт True
← →
Skier (2003-09-03 14:29) [3]>gunner (03.09.03 14:26)
Image2.Assign(Image) ?
← →
gunner (2003-09-03 14:41) [4]> Skier ©
Нет, так он ругается, пишет что не может сконвертировать Image в Image
Жопа с клеем вобщем
← →
Skier (2003-09-03 14:44) [5]Shit. Моя ошибка. Извини.
Image2. Picture.Assign(Image .Picture);
← →
gunner (2003-09-03 16:27) [6]> Skier ©
Эта фишка не катит... я таким образом просто перегоняю из одного Image в другой всё тот же Graphic а BitMap - па там нету :(
← →
Skier (2003-09-03 16:30) [7]>gunner (03.09.03 16:27)
ОК. Зачем тебе именно BitMap ?
← →
gunner (2003-09-03 16:32) [8]Нужно мне потом из Image в базу BitMap скинуть.....
наверняка должен быть какой то простой способ как из Graphic в BitMap преобразовать....
этож всё одно и тоже можно сказать хранящеяся в одном месте....
чёт вот никк только не выходит
← →
Skier (2003-09-03 16:37) [9]А изначально что ты грузил в Image gif или jpeg ?
← →
gunner (2003-09-03 16:39) [10]Изначально в Image приежает изображение со сканера... я не знаю что там такое... мне нужно из этого получить BitMap неужели нет алгоритма
← →
Skier (2003-09-03 16:42) [11]
> я не знаю что там такое
Я тем более...
← →
gunner (2003-09-03 16:44) [12]Ну это понятно я спрашивал изначально алгоритм
как из Image.Picture.Graphic сделать Image.Picture.BitMap
← →
ZEE (2003-09-03 16:51) [13]
Image2.Width:=Image1.Width;
Image2.Height:=Image1.Height;
Image2.Picture.Bitmap:=TBitmap.Create;
Image2.Picture.Bitmap.Width:=image2.Width;
Image2.Picture.Bitmap.Height:=image2.Height;
Image2.Canvas.Draw(0,0,Image1.Picture.Graphic);
← →
Skier (2003-09-03 16:55) [14]
> Image2.Picture.Bitmap:=TBitmap.Create;
Укусит.
← →
ZEE (2003-09-03 16:57) [15][14] Укусит. - вполне возможно - поэтому проверять надо:
if not Assigned(Image2.Picture.Bitmap)
then Image2.Picture.Bitmap:=TBitmap.Create;
← →
Skier (2003-09-03 17:04) [16]>ZEE © (03.09.03 16:57)
> Image2.Canvas.Draw(0,0,Image1.Picture.Graphic);
Это не решит проблему конветрирования.
>gunner (03.09.03 16:44)
Попробуй использовать методы :
TPicture.SaveToClipboardFormat и
TPicture.LoadFromClipboardFormat
← →
ZEE (2003-09-03 17:11) [17]>Skier © (03.09.03 17:04) [16]
>Это не решит проблему конветрирования.
у меня так "решается проблема конвертирования" jpeg->bmp, gif->bmp ...
← →
Skier (2003-09-03 17:13) [18]>ZEE © (03.09.03 17:11)
Хм...
И после этого Image.Picture.Bitmap.Empty даёт False ?
← →
ZEE (2003-09-03 17:15) [19]Image.Picture.Bitmap.Empty не проверял, но по всей видимости =false (картинка-то появляется)
← →
Skier (2003-09-03 17:18) [20]>ZEE © (03.09.03 17:15)
Проверь.
if Image.Picture.Bitmap.Empty then Ты не прав
else Я не прав
← →
ZEE (2003-09-03 17:26) [21]Проверил...
Ты не прав :)
если хочешь пришлю проект которым проверял
Проект состоит из^
Image1, Image2,
Button1 - Открытие картинки,
Button2 - конвертация
OpenPictureDialog1 - ну понятно...
и код его взят тут, выше
разве что добавил код в Button1 ...
← →
Skier (2003-09-03 17:32) [22]>ZEE © (03.09.03 17:26)
> если хочешь пришлю проект которым проверял
Не надо. Я верю...:)
← →
ZEE (2003-09-03 17:37) [23]небольшая оговорка "Ты не прав" - имелось ввиду "Skier не прав"
(а то посмотрел на эту строку
if Image.Picture.Bitmap.Empty then Ты не прав
else Я не прав
и подумал, что может показаться что-то не то...)
← →
Skier (2003-09-03 17:41) [24]>ZEE © (03.09.03 17:37)
Нет. Я всё понял правильно.
Вот только это строка всё ж таки вызывает у меня подозрение : Image2.Picture.Bitmap:=TBitmap.Create;
Bitmap это св-во TPicture.
TPicture сам знаем когда его создать когда разрушить.
Не будет ли такое создание Bitmap"а опасным...
← →
ZEE (2003-09-03 17:49) [25]У TPicture все заносится в Graphic (Bitmap, Icon, MetaFile, JpegImage, etc) поэтому поумолчанию есть только Graphic, а вот Bitmap (и компания - см. выше) создается руками, ну правда при занесении картинки в Image в дизайне соотв. Create происходит автоматом...
А еще лучше - читай F1 :)
← →
Skier (2003-09-03 18:03) [26]
> А еще лучше - читай F1 :)
Сурово ! :)
← →
me (2003-09-03 18:06) [27]ZEE ©
>...а вот Bitmap (и компания - см. выше) создается руками...
>А еще лучше - читай F1 :)
Ещё лучше заглядывай в исходный код:
procedure TPicture.SetBitmap(Value: TBitmap);
begin
SetGraphic(Value);
end;
procedure TPicture.SetGraphic(Value: TGraphic);
var
NewGraphic: TGraphic;
begin
// при присваивании произойдёт создание TBitmap внутри
NewGraphic := nil;
if Value <> nil then
begin
NewGraphic := TGraphicClass(Value.ClassType).Create;
NewGraphic.Assign(Value);
NewGraphic.OnChange := Changed;
NewGraphic.OnProgress := Progress;
end;
try
FGraphic.Free;
FGraphic := NewGraphic;
Changed(Self);
except
NewGraphic.Free;
raise;
end;
end;
function TPicture.GetBitmap: TBitmap;
begin
ForceType(TBitmap); // Если Graphic - не битмап, он будет уничтожен и создан битмап
Result := TBitmap(Graphic);
end;
procedure TPicture.ForceType(GraphicType: TGraphicClass);
begin
if not (Graphic is GraphicType) then
begin
FGraphic.Free;
FGraphic := nil;
FGraphic := GraphicType.Create;
FGraphic.OnChange := Changed;
FGraphic.OnProgress := Progress;
Changed(Self);
end;
end;
← →
ZEE (2003-09-03 18:12) [28]>me (03.09.03 18:06) [27]
>при присваивании произойдёт создание TBitmap внутри
при присваивании да, а при копировании (Canvas.Draw) - нет
← →
me (2003-09-03 18:23) [29]Из приведённых кусков кода следует, что
для того, чтобы изменить Graphics на TBitmap,
достаточно всего лишь вызова TPicture.GetBitmap.
И то, что при
Image2.Picture.Bitmap:=TBitmap.Create;
внутри Image2.Picture будет создан новый битмап
(если Graphics не TBitmap), а созданный тобой битмап
никогда освобождён не будет и пополнит собой
длинный список утечек памяти.
← →
gunner (2003-09-04 08:36) [30]Вот вы тут развернулись ! :)
← →
gunner (2003-09-04 08:41) [31]> ZEE
Большое тебе спасибо !
Всё получилось !
← →
gunner (2003-09-04 09:00) [32]Так продолжаем разговор :)
Почему после конвертации теряются данные в загаловке BitMap
остаются только размеры. А мне нужно чтобы ещё сохранилось DPI в частности !
← →
ZEE (2003-09-04 09:54) [33]может я не понял что такое DPI, но подозреваю что это TBitmap.PixelFormat
← →
ZEE (2003-09-04 09:56) [34]>me (03.09.03 18:23) [29]
по этому поводу спорить не буду - наверно me лучше разбирается в этом вопросе (но у меня утечек памяти не было - см. [15])
← →
gunner (2003-09-04 10:09) [35]> ZEE ©
Мне нужно DPI это biYPelsPerMeter и biXPelsPerMeter
в чистом BMP в заголовке эти данные присутствуют
PixelFormat - это помоему не то
← →
ZEE (2003-09-04 10:16) [36]аааа... ясно - покопайся в исходниках Graphics.pas - там есть что-то типа того - правда это относится к DIB - в общем ищи процедуру TBitmap.ReadDIB() или сразу ищи biYPelsPerMeter
← →
gunner (2003-09-04 10:19) [37]существует такая API функция GetObject
Делаю следующее
DIB : TDIBSection;
GetObject(ImgScan.Image1.Picture.Bitmap.Handle, SizeOf(DIB), @DIB);
В итоге в DIP возвращаются только размеры все остальные данные заголовка забиты нулями
← →
gunner (2003-09-04 10:33) [38]У меня складывается впечатление, что BitMap достаточно кривой
он теряет данные о DPI и ещё всякое разное. Попробывал сохранить в файл Картинку и открыл в ФотоШопе сведеней о DPI там не оказалось... то есть даже своими средствами такими как SaveToFile TBitMap не может сохранить все данные заголовка. Получается чтоих там нет вообще, то есть наверное они теряются во время конвертации Graphic в Bitmap
Других сооброжений у меня нет.. или существуют какие то другие механизмы..........
← →
ZEE (2003-09-04 10:40) [39]Скорее всего при "конвертации Graphic в Bitmap" данные о DPI не заполняются так как просто их нет в Graphic
т.е. изначально при создании Bitmap эти данные нулевые и при копировании (конвертации) переносятся только Pixels, а всю остальную инфу вероятно надо самому прописывать - руками...
← →
gunner (2003-09-04 10:46) [40]Какая то жопа с клеем получается :)
← →
ZEE (2003-09-04 10:51) [41]точно...
буду закруглятся с этими рассуждениями - т.к. мои познания в этой области закончились еще несколько постов назад :)
← →
olb (2003-09-07 09:56) [42]По поводу разрешения и метрических размеров изображения. IMHO: придется забыть. Многие форматы (напр., .gif) просто не поддерживают ни метрики, ни разрешения. Хранят только размер в точках.
Страницы: 1 2 вся ветка
Форум: "Media";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.012 c