Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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]

Какая то жопа с клеем получается :)



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

Форум: "Media";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.015 c
14-25602
antonyan
2003-12-17 13:05
2004.01.09
Нужен русский help


14-25580
Wizard_Ex
2003-12-16 16:54
2004.01.09
Интересно как узнать какой фонт использует программа


14-25554
Тимохов
2003-12-18 17:31
2004.01.09
Chess


1-25286
kotel
2003-12-25 16:53
2004.01.09
Панель инструментов


1-25386
Rate
2003-12-24 20:09
2004.01.09
Нажатие кнопки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский