-
Доброе время суток. Уважаемые форумчане. Использую в программе рисование jpg.Draw(PB.Canvas.Handle,0,0); но тогда остаётся белая рамка рисунок "не правильный квадрат". Рисунок у меня сейчас в двух формат есть bmp и jpg. При использовании KOLPng; можно рисовать и делать прозрачным фон рисунка. png2.DrawTransparent(PBox.Canvas.Handle, 665, 397, png2.Width, png2.Height, $DC7E5A ); Может есть другие варианты обойти этот момент без использования KOLPng?
-
где связь между жпег и прозрачно?
-
в джпеге нет альфа-канала вроде, но если с заменой цвета, качество - высокое, то можно так:
Jpеg.bitmap.DrawTransperent(dc, x, y, $ff00ff)
Результат будет фиговый, так как джпег не lossless формат :( лучше битмап, либо png.
-
а, еще можно программно подправить битмап, приводя некоторые цвета (с такого-то к такому) к 'прозрачному', в твоем случае белый. Но стоит ли это усилий? :)
-
> где связь между жпег и прозрачно?
Связи нет. Но может есть варианты как сделать. > Jpеg.bitmap.DrawTransperent(dc, x, y, $ff00ff) >
попробую так. )
-
Во общем так нельзя сделать. Jpеg.bitmap.DrawTransperent(dc, x, y, $ff00ff) буду использовать KOLPng; Всем спасибо.
-
> остаётся белая рамка рисунок "не правильный квадрат"
Всё просто. Надо просто изменить рисунок чтобы окантовка была того же цвета, что и канва на которую рисуешь.
> QAZ (24.08.11 21:46) [1] > > где связь между жпег и прозрачно?
+1 пока шел на работу понял что не так. Спасибо.
-
> Всё просто. Надо просто изменить рисунок чтобы окантовка > была того же цвета, > что и канва на которую рисуешь.
в таком случае цвет канвы должен задаваца строго в ручную ибо "цвета"-константы типа clBtnFace,clWindow и т.д. зависят от настроек винды
-
>Во общем так нельзя сделать. J p е g . b i t m a p . D r a w T r a n s p e r e n t ( d c , x , y , $ f f 0 0 f f )
Странно, у меня работает. Правда из-за сжатия цвет, который должен быть прозрачным, варьируется, но опять же, нужен фильтр о котором упоминал.
-
> > Всё просто. Надо просто изменить рисунок чтобы окантовка > > была того же цвета, > > что и канва на которую рисуешь. > > в таком случае цвет канвы должен задаваца строго в ручную > ибо "цвета"-константы типа clBtnFace,clWindow и т.д. зависят > от настроек винды >
Хорошо. Так и сделаю.)
-
> Правда из-за сжатия цвет, который должен быть прозрачным, > варьируется
Это и есть не очень хорошо.
> Результат будет фиговый
-
собственно вот, пояснять нечего.
+++++ program test1;
uses KOL, JpegObj;
procedure Click1(Dummy, Sender: PObj); var p : PJpeg; b : PBitmap; s : PStream; lineX, lineY, sx, sy: integer; begin p := NewJpeg; p.LoadFromFile('c:\1.jpg'); s := NewMemoryStream; p.Bitmap.SaveToStream(s); s.Position := 0; b := NewBitmap(0, 0); b.LoadFromStream(s); Free_And_Nil(s); sx := b.Width; sy := b.Height; for lineY := 0 to sy do begin for lineX := 0 to sx do begin if b.DIBPixels[lineX, lineY] > $F0F0F0 then b.DIBPixels[lineX, lineY] := $FFFFFF; end; end; b.DrawTransparent(Applet.Canvas.Handle, 0, 0, $FFFFFF); end;
begin Applet := NewForm(nil, 'test1').SetSize(400, 200); with NewButton(Applet, 'load & draw')^ do begin Width := 100; Height := 20; Left := Applet.ClientWidth - Width; Top := Applet.ClientHeight - Height; OnClick := TOnEvent(MakeMethod(nil, @Click1)); end; Run(Applet); end.
-
У меня av на function _GetDIBPixelsTrueColor( Bmp: PBitmap; X, Y: Integer ): TColor;
asm
PUSH EBX
XCHG EBX, EAX
PUSH EDX
MOV EAX, [EBX].TBitmap.fScanLineDelta
IMUL ECX
XCHG ECX, EAX
POP EDX
MOV EAX, [EBX].TBitmap.fBytesPerPixel
MUL EDX
ADD EAX, [EBX].TBitmap.fScanLine0
-> MOV EAX, [EAX+ECX] Можно взглянуть какой рисунок ты загружаешь?
-
Влияние оказывает размер рисунка.
-
-
DIBPixels имеет ограничение по размеру 366x445 больше идёт ошибка Runtime error 216 at 00406652. Не имеет ограничения по Pixels ( долгое время рисования) У меня не такое большое изображение так что попробую как вариант. Большое спасибо:)
-
понятно конечно что фигней маитесь,но цель вообще какая? положить картинку на панельку??
-
насчет картинки на панели. Тоже столкнулся с такой проблемой на днях. Был в проге AboutBox, в нем картинка fallout pip-boy, титры, музыка, всё как полагается. Единственное что смущало - разбухшее приложение. Jpeg-изображение 280х280 25кб + обжекты самого джпега фигова туча кб, даже не засекал. Семпл - 6 кб и уфмод для проигрывания семпла 8кб. Явно что только изображение в экзешнике мусор создает. Почитал книгу кол, что там по поводу битмапов написано и понял, что дурак) TBitmap умеет загружать rle-сжатые изображения. Вооружился пайнтом, эксэнвьювером и подогнал изображение в 16 цветный битмап. Итого - 8кб. Без лишних обжектов. Чтобы его рисовать с прозрачностью - лишь на его основе маску изготовить и из 4битного в 32битное перебить. Благо всё придумали уже и эти методы есть в кол.
-
> Явно что только изображение в экзешнике мусор создает
т.е. музыка с плеером в абауте за мусор не считается? типа наиважнейшая функция всей проги ?
-
>т.е. музыка с плеером в абауте за мусор не считается? типа наиважнейшая функция всей проги ?
Может и не наиважнейшая функция, но явно не мусор. Как любитель трекерной музыки я получаю эстетическое удовольствие вшивая их туда. Если кого-то это не устраивает - не стоит тогда этой функцией и пользоваться ("о программе"). И вы явно неправильно толкуете мои сообщения. Поставлена задача - сделать эбаутбокс с таким-то изображением и такой-то музыкой. Есть два решения - с jpeg и без оного. Разница в конечном итоге и есть мусор. Так более понято?
-
А что форматов больше нет? GIF чем не устраивает?
З.Ы. Хотя, в общем, согласен с QAZ...
-
Изображение 280x280 4bit Функции - NewXXX, LoadFromStream, Draw
Формат/Размер кода/Размер данных/Итого
______________________________________________
Bmp | 2 560 | 39 318 | 41 878 | lossless
BmpRle | 3 584 | 7 708 | 11 292 | lossless
Gif | 21 204 | 5 233 | 26 437 | 8bit only
Png | 32 768 | 3 365 | 36 133 | lossless
Jpeg | 56 320 | 22 886 | 79 206 |
Естественно рассматривался конкретный случай.
-
-
Bis | 26 112 | 4 675 | 30 787 |
В исходниках написано что легко заменить ZLib на любой другой декомпрессор, видимо можно выиграть если использовать DIUcl, он компактней вроде. Выигрыш по всей видимости будет, если в программе использовать эту компрессию и для других целей, например, если использовать ZLib в протоколе над Http и прочее.
-
> rdnks (07.09.11 19:56) [21]
а как можно из бмп 39 318 получить жпег 22 886 ? чисто теоретически :)
-
Очень просто. 39 318 битмап 4-х битный. Жпег формирует из него 24 или 32 битную карту уже, которую и сжимает ;)
-
Извиняюсь за даблпостинг, вот отчет, который формирует Jedi
Name Size Group Package
-------- ------ ----------------- -------
bis 2 692 (CODE+ICODE+DATA)
err 3 415 (CODE+ICODE+DATA)
JpegObj 52 352 (CODE+ICODE+DATA)
KOL 13 215 (CODE+ICODE+DATA)
KOLadd 372 (CODE+ICODE+DATA)
KolGif 9 472 (CODE+ICODE+DATA)
KOLPng 12 960 (CODE+ICODE+DATA)
KolZLib 17 656 (CODE+ICODE+DATA)
Messages 56 (CODE+ICODE+DATA)
Mmx 341 (CODE+ICODE+DATA)
Windows 600 (CODE+ICODE+DATA)
Dependences
bis : windows, kol, koladd, kolzlib;
JpegObj : windows, KOL, err;
KolGif : windows, KOL, err;
KOLPng : Windows, KOL, KOLZlib, Mmx;
|