forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_imgs: выводим картинку на картинку (http://forum.boolean.name/showthread.php?t=14722)

barsunduk 13.05.2011 00:57

Lib_imgs: работа с изображениями
 
Вложений: 1
изучать java в отсутствие интернета и учебников, по стандартным примерам sdk и багрепортам компилятора - всё одно, что учить казахский по инструкции на освежителе воздуха, сидя на горшке. вроде и большинство букв знакомы, и тужишься, а выходит что-то... ну, что всегда там выходит... изучал этот забавный язык и писал либу дня три, так что, как всегда - сделано ногами...
баловался, пытаясь повторить основные библиотеки, работающие с графикой -Lib_alpha и Lib_beta - с которыми я чаще всего работаю. собрать в одну кучку.
ну и еще продублировал работу с битмапом. тут можно запихать в память в виде массива точек 2 картинки, чтобы проводить их попиксельную обработку или смешивание из MP.
это для работы с пикселями напрямую из MP. вдруг эффекты какие захотите сами создать в MP ..)
потом добавил пару функций - в т.ч. рисовалку картинки на другой картинке. из-за них и выкладываю. вдруг кому понадобится.

исходники прилагаются

barsunduk 13.05.2011 13:34

Ответ: Lib_imgs: выводим картинку на картинку
 
PHP код:

/*
    Lib_imgs
    (c) barsunduk
    май, норябрь 2011
    
    библиотека для работы с изображениями
*/

// ******************************************************************
// функции работы с картинками

// копирует часть экрана, вместо ширины и высоты указывать координаты второго угла
function copyxxyy(x1y1x2y2integer): image;

// возвращает экран
function copyscrimage;

// копировать часть картинки
function copyrect(imgimagexywhinteger): image;

// установить текущий цвет экрана
procedure setcolorint(colinteger);

// установить текущий цвет экрана (в 16-ричном виде)
procedure setcolorhex(colstring);

// рисует картинку imgSource на картинке imgDest
function draw2image(imgSourceimgDestimagexyinteger): image;

// создает прозрачную картинку
function createimage(whinteger): image;

// изменить размер картинки
function resize(imgimagewhinteger): image;

// установить цвет
procedure setcolorint(colinteger);

// установить цвет
procedure setcolorhex(colstring);

// быстрая заливка экрана цветом col
procedure cls(colinteger);

// заливка экрана полупрозрачным цветом col
procedure clsa(colinteger);

// нарисовать точку на экране (можно полупрозрачную)
procedure point(xycolinteger);

// получить цвет точки экрана
function getpoint(xyinteger): integer;

// установить цвет пера для рисования на картинках
procedure imgsetcolor(colorinteger);

// получить цвет пера для рисования на картинках
function imggetcolorinteger;

// установить непрозрачность пера для рисования на картинках (0/1)
procedure solid(valueinteger);

// получить состояние непрозрачности пера для рисования на картинках (0/1)
function getsolidinteger;

// линия на картинке
function imgline(imgimagex1y1x2y2integer): image;

// прямоугольник на картинке
function imgrect(imgimagexywhinteger): image;

// закрашенный прямоугольник на картинке
function imgfillrect(imgimagexywhinteger): image;

// эллипс на картинке
function imgellipse(imgimagexywhinteger): image;

// залитый эллипс на картинке
function imgfillellipse(imgimagexywhinteger): image;

// треугольник на картинке
function imgtriangle(imgimagex1y1x2y2x3y3integer): image;

// закрашенный треугольник на картинке
function imgfilltriangle(imgimagex1y1x2y2x3y3integer): image;

// заливка на картинке
function imgfill(imgimagexyinteger): image;

// сектор на картинке
function imgarc(imgimagexywha1a2integer): image;

// кривая на картинке (все опорные точки лежат на кривой)
function imgbow(imgimagex1y1x2y2x3y3integer): image;

// кривая на картинке (2-я опорная точка не лежит на кривой)
function imgbezier(imgimagex1y1x2y2x3y3integer): image;

// заливка экрана
procedure scrfill(xy);

// получить цвет точки картинки (медленная функция)
function getimagepoint(imgimagexyinteger): integer;

// меняет каналы каждого пикселя, прибавляя к ним значения (da, dr, dg, db)
// т.е. если все значения задать = 0, только da = -128 - можно в половину уменьшить прозрачность
function addargb(imgimage imgdadrdgdbinteger): image;

// устанавливает прозрачность всех пикселов картинки
// (кроме совершенно прозрачных)
function setalpha(imgimage imgainteger): image;

// ******************************************************************
// битмапы, работа с пикселями картинки

// создать битовую карту 1
procedure bmp1create (whinteger);

// удалить битовую карту
procedure bmp1free;

// затолкать в битмап картинку (можно использовать вместо bmpcreate)
// размеры битмапа изменятся под размер картинки
procedure bmp1setimage(imgimage);

// создать картинку из битмапа
function bmp1getimageimage;

// установить пиксель[x, y] в цвет col
procedure setpixel1(xycolinteger);

// извлечь пиксель [x, y]
function getpixel1(xyinteger): integer;

// заливка (можно сделать полупрозрачную)
procedure bmp1fill(xycolinteger);

// линия (можно сделать полупрозрачную)
procedure bmp1line(x1y1x2y2colinteger);

// дуга
procedure bmp1bow(x1y1x2y2colinteger);

// возвращает ширину битмапа
function bmp1widthinteger;

// возвращает высоту битмапа
function bmp1heightinteger;

// создать битовую карту 2
procedure bmp2create (whinteger);

// удалить битовую карту
procedure bmp2free;

// затолкать в битмап картинку (можно использовать вместо bmpcreate)
// размеры битмапа изменятся под размер картинки
procedure bmp2setimage(imgimage);

// создать картинку из битмапа
function bmp2getimageimage;

// установить пиксель[x, y] в цвет col
procedure setpixel2(xycolinteger);

// извлечь пиксель [x, y]
function getpixel2(xyinteger): integer;

// заливка (можно сделать полупрозрачную)
procedure bmp2fill(xycolinteger);

// линия (можно сделать полупрозрачную)
procedure bmp2line(x1y1x2y2colinteger);

// дуга
procedure bmp2bow(x1y1x2y2colinteger);

// возвращает ширину битмапа
function bmp2widthinteger;

// возвращает высоту битмапа
function bmp2heightinteger;

// создать битовую карту 2
procedure bmpcreate (whinteger);

// удалить битовую карту
procedure bmp2free;

// ********************************************************
// функции, которые могут пригодиться... или не пригодиться

// выделение каналов:
function getAlpha(colinteger): integer;
function 
getRed(colinteger): integer;
function 
getGreen(colinteger): integer;
function 
getBlue(colinteger): integer;

// каналы => integer
function argb2int(alpharedgreenblueinteger): integer;

// результат наложения цветов с учетом степени прозрачности обоих цветов
function pixMix(colSrccolBackinteger): integer;

// Copy как в Delphi с защитой от дурака
function sCopy(sstringoffsetcountinteger): string;

// Delete как в Delphi с защитой от дурака
function sDelete(sstringoffsetcountinteger): string;

// попатченый перевод из HEX в INT, не теряет старший байт
function hex2int(hexstring): integer;

// попатченый перевод из HEX в INT, не теряет старший байт
function int2hex(iinteger): string


Nerd 14.05.2011 00:16

Ответ: Lib_imgs: выводим картинку на картинку
 

Цитата:

2b or not 2b = ff
Неправда, 2b or not 2b = 2b

barsunduk 15.05.2011 01:39

Ответ: Lib_imgs: выводим картинку на картинку
 
Цитата:

Сообщение от Nerd96 (Сообщение 188387)

Неправда, 2b or not 2b = 2b

долго думал. для верности проверил на калькуляторе. сдается мне, что тебя на... э-э... накололи.

а либу я опять поправил. блин, вот нафига нерабочие варианты в живых оставлять. в итоге выкладываю их, а рабочие вместо них удаляю. сижу потом дописываю по памяти ..(

Nerd 15.05.2011 02:15

Ответ: Lib_imgs: выводим картинку на картинку
 

Цитата:

долго думал. для верности проверил на калькуляторе. сдается мне, что тебя на... э-э... накололи.
2b or not 2b
1) not 2b = 0
2) 2b or 0 = 2b
Не?
Код:

Print Hex($2b Or (Not $2b)) ;Даёт 2b

barsunduk 15.05.2011 18:30

вы - омереканетс?
 
Цитата:

Сообщение от Nerd96 (Сообщение 188519)
2b or not 2b
1) not 2b = 0
2) 2b or 0 = 2b
Не?
Код:

Print Hex($2b Or (Not $2b)) ;Даёт 2b

в нормальном виде not XX, где XX занимает 1 байт, есть побитовое отрицание, то бишь инверсия. боюсь вас огорчить, но not 2b = d4. в правильности моей версии убедитесь, открыв мелкософтовский калькулятор и проверив там. ваше Not $2b дает 0, потому что вы интерпретируете его как логическое выражение:
2B = ( 2B <> 0 ) = True = 1
Not( 2B ) = Not True = False = 0

и не спорьте со мной по этому вопросу, я начал в уме в двоичный код переводить в начале 90-х, когда в российских провинциальных городках в школах появились компьютеры (жалко, что виснущие раз в 5 минут "электроники"). я помнил 10-е значения большинства ассемблерных команд, так как у меня не было компиллятора и я писал графические редакторы на асме, вводя код в 10-м виде прямо из бейсика...
и мне кажется, сейчас вы похожи на того американского ученого из задорновской байки, который считал на калькуляторе 2+2*2, хотя сейчас тот случай, когда калькулятор вернее.

блин, молодой человек, вы бы не могли библиотеку покритиковать вместо подписи. может, что-то не так с ней?
почему у меня вконтакте, скажем, поэты критикуют не философскую составляющую стихов, а уместность моей жoпы на аватарке? а здесь - не содержимое библиотеки, а подпись...
вот вечно оно так ..(

з.ы.:
Цитата:

Сообщение от barsunduk (Сообщение 188582)
и не спорьте со мной по этому вопросу, я начал в уме в двоичный код переводить в начале 90-х...

- пальцы веером, сопли пузырями. извините, самому стыдно за дешевые понты

alexprey 16.08.2011 02:03

Ответ: Lib_imgs: выводим картинку на картинку
 
Не работает либа или я делаю что то не так.
Конкретно не работает работа с пиксилями изображения

barsunduk 28.08.2011 17:22

Ответ: Lib_imgs: выводим картинку на картинку
 
Цитата:

Сообщение от alexprey (Сообщение 199063)
Не работает либа или я делаю что то не так.
Конкретно не работает работа с пиксилями изображения

мда, мы нубы такие нубы... половина функций работает только в эмуле, где либа и тестилась ..( в общем и целом получилась лажа, первый блин... удалить бы эту темку к лешему, а то мне чего-то стремно.

alexprey 07.10.2011 20:38

Ответ: Lib_imgs: выводим картинку на картинку
 
Ну я в эмуле и проверял Оо

barsunduk 07.10.2011 23:03

Ответ: Lib_imgs: выводим картинку на картинку
 
Цитата:

Сообщение от alexprey (Сообщение 205030)
Ну я в эмуле и проверял Оо

даже в эмуляторе не пашет?.. тогда я хуже нуба, похоже ..(
заманался я что-то на паскале пытаться что-то сделать. надо java осваивать, наверное. и там всё писать...

barsunduk 04.11.2011 19:50

Ответ: Lib_imgs: выводим картинку на картинку
 
Цитата:

Сообщение от alexprey (Сообщение 199063)
Не работает либа или я делаю что то не так.
Конкретно не работает работа с пиксилями изображения

сегодня решил посмотреть на телефоне. на эмуле пашет, на теле виснет. поменял функции обращения к пикселам экрана. неожиданно заработало. остальное трогать не стал. рабочий вариант выкладываю в первом посте.
если что-то еще не будет работать, пишите - поправлю.

===

выкинул неработающие на телефоне функции передачи фокуса. превратил процедуру draw2image в функцию. заработала. в принципе, этот трупик еще можно реанимировать, кажется...

alexprey 12.11.2011 01:13

Ответ: Lib_imgs: выводим картинку на картинку
 
Во теперь работает отлично =)

alexprey 14.11.2011 17:02

Ответ: Lib_imgs: выводим картинку на картинку
 
А можно добавить функции типа FillRectImg (image img, integer x, y, width, height) ??? Если добавишь, то это огромный зачет!!!!

barsunduk 14.11.2011 19:11

Ответ: Lib_imgs: выводим картинку на картинку
 
Цитата:

Сообщение от alexprey (Сообщение 209652)
А можно добавить функции типа FillRectImg (image img, integer x, y, width, height) ??? Если добавишь, то это огромный зачет!!!!

это, конечно, пожалуйста. только назвал по другому:
PHP код:

// рисует прямоугольник на картинке, смешивая цвет с фоном
function imgfillrect(imgSourceImagexywh): image

для пробы можно попробовать полупрозрачные цвета. скажем, fillcolor := hex2int('88008800');

alexprey 14.11.2011 19:39

Ответ: Lib_imgs: выводим картинку на картинку
 
Пошел пробовать =)


Часовой пояс GMT +4, время: 15:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot