Информация

Обсуждало 2 человека

Работа с классом Bitmap и BitmapData

Логика и программирование
13 октября 2011 в 23:36:43

Интересует вопрос, как сделать прозачную картинку. Помню делал такое, что подгружал картинку и ставил определенный цвет прозрачным. И картнинка была прозрачной где этот цвет был. Сейчас почему-то не могу найти пример как это делать. А исходники потерялись.

Обсуждение (вниз)

Не хватает только вашего мнения. Зарегистрируйтесь, чтобы написать!

14 октября 2011 в 20:52:25

:D

"было бы все просто, не было бы Бога"

14 октября 2011 в 20:45:13

видимо проще было картинку в базу запихивать))

14 октября 2011 в 20:32:26

Glega, через POST это нужно смотреть как раз мультизагрузчик (я давал ссылку на него ранее), и там уже смотреть, какой на самом деле пакет приходит и какие поля... но здесь я видимо делал по-простому, передавал имя в заголовке... как самое простое %)...

14 октября 2011 в 20:21:49

а вот можно как-нибудь передать name через POST, или нужно будет к адрессу приписывать и имя? Я подумал, нужно еще какую-нибудь защиту сделать, чтобы не наотправляли запросов.

14 октября 2011 в 20:09:36

я нашел у себя вот такое:

<?php if (isset($GLOBALS['HTTP_RAW_POST_DATA'])) { $img = $GLOBALS['HTTP_RAW_POST_DATA']; $dir = dirname(__FILE__); $fileName = $_GET['name']; $fullFilePath = $dir . '/img/' . $fileName; $file = fopen($fullFilePath, 'w'); fwrite($file, $img); fclose($file); } else echo 'error_send_file'; ?>

14 октября 2011 в 19:42:14

Да вот я тоже только и начал вспоминать этот пхп, и вся загвоздка в нем.

14 октября 2011 в 19:24:31

вот файлы (c мультизагрузчиком):
http://zalil.ru/31869268

и вот как применять (php я не подскажу, давно за него не садился):
var bitmapData:BitmapData = new BitmapData(30, 30); var byteArray:ByteArray = PNGEncoder.encode(bitmapData); var loader:MultipartURLLoader = new MultipartURLLoader(); loader.addEventListener(Event.COMPLETE, onUploadComplete); loader.addFile(byteArray, 'photo.png', 'photo'); loader.load('http;//site.ru/file.php');

14 октября 2011 в 19:14:21

http://gotoandlearnforum.com/viewtopic.php?f=29&t=16080 видимо этот пример не подходит

14 октября 2011 в 18:56:18

а как туда еще вставить данные о пользователе

14 октября 2011 в 18:52:30

Работает скрипт, но теперь как мне отослать с картинкой еще имя файла, чтобы потом прицепить его к пользователю.
Просто в myrequest.data запихиваем imageByteArray

14 октября 2011 в 18:25:37

don't mention it )

14 октября 2011 в 18:21:47

Спасибо))

14 октября 2011 в 18:01:38

Glega, PNGEncoder я всегда этот использовал:

http://zalil.ru/31868813

14 октября 2011 в 17:37:45

http://gotoandlearnforum.com/viewtopic.php?f=29&t=16080 а вот такой пример подойдет?

14 октября 2011 в 17:30:33

это не картинка, это ссылка XD.... вот (убери там пробел в начале):

http://henryjones.us /articles/using-the-as3-jpeg-encoder

14 октября 2011 в 17:27:49

Я тоже не могу найти нормальный пример. И у меня почему-то изображение не отображается, в твоем сообщение.

14 октября 2011 в 17:21:23

Где-то в сети был красивый пример, там и сразу сохранение и загрузка... но я его не могу что-то найти

Вот какой-то пример, но это чисто отправка на сервер:
-encoder

а для прозрачности нужно PNGEncoder использовать

14 октября 2011 в 16:46:40

250 мб, про базу данных ничего не сказали)) Просто у пользователя будет возможность создавать других юнитов. Боюсь забьют память))
А есть где-нибудь нормальный пример для сохранения картинки через as3+php, чтобы сохранилось с прозрачностью?

14 октября 2011 в 16:39:18

Glega, сколько дискового пространства? обычно под БД выделяют меньше свободного места... ты говоришь, что у тебя картинка 30x30, так она в PNG будет весить 3Кб... так на 1 Мб ты сможешь ~300 пользователей создать XD... и когда создаешь пользователя, он же регистрируется, значит, как например на фане, картинке можно задать имя самого пользователя, и ссылку на нее в базе хранить нет необходимости %)...

например:
http://fundux.ru/content/user/ava/user2909 _ tiny.jpg

14 октября 2011 в 15:48:52

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

14 октября 2011 в 15:47:26

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

14 октября 2011 в 01:42:22

Просто помню, что ещё на втором AS пытался сохранять в массив... Так даже небольшая картинка больше Мб места занимала... А это чудо надо ещё переслать, обработать и сохранить.

14 октября 2011 в 01:38:49

edapskov, я ему и предложил сразу использовать ByteArray и уже готовые классы %)...
Просто на всякий случай версия "для мазохистов" XD...


Да, прошу прощения - пропустил при первом прочтении...

14 октября 2011 в 01:33:07

edapskov, я ему и предложил сразу использовать ByteArray и уже готовые классы %)...
Просто на всякий случай версия "для мазохистов" XD...

14 октября 2011 в 01:06:52

Извиняюсь... Зачем массив, если AS 3.0 имеет ByteArray. Тем более, что пересылка и хранение данных в массиве - это более ресурсоёмкий способ. И зачем хранить картинку в базе MySQL. Там, обычно, хранят только ссылку на картинку.

14 октября 2011 в 00:26:16

Glega, картинка 30x30 будет весить может 1-2 Кб, и в базе она будет занимать может даже больше... но если тебе больше нравиться вариант с базой, то вот продолжение, как из той строки создать картинку:

//str - полученная строка var arr:Array = str.split(','); var w:int = arr[0]; var h:int = arr[1]; var bitmapData:BitmapData = new BitmapData(w, h, true, 0xFFFFFFFF); var c:int = 2; for (var i:int = 0; i < h; i++) { for (var j:int = 0; j < w; j++) { bitmapData.setPixel32(j, i, arr[c]); c++; } } addChild(new Bitmap(bitmapData));

14 октября 2011 в 00:23:53

Буду пробовать)) но уже завтра.

14 октября 2011 в 00:22:46

кроме того, можно поступить немного глупее - ручками собрать массив:

var w:int = bitmapData.rect.width; var h:int = bitmapData.rect.height; var arr:Array = [ ]; for (var i = 0; i < h; i++) { for (var j = 0; j < w; j++) { arr.push(bitmapData.getPixel32(j, i)); } } var str:String = ''; str += w + ','; str += h + ','; str += arr.join(','); trace(str); //собрали....

14 октября 2011 в 00:21:07

я помню что в MySQL есть формат данных связанный с массивом, просто пока использую бесплатный хост, там мало место для хранения картинок. А картинка будет небольшая 30х30 где-то. И меня интересует, можно ли отправить массив в пхп, он там сохранит в базу данных. И затем если я опять ее загружу, будет ли она опять прозрачной

14 октября 2011 в 00:18:31

Glega, смотря, что именно нужно... в AS3 есть классы PNGEncoder, JPEGEncoder и прочие, которые позволяют создать из BitmapData массив байтов (собственно реальную картинку).. а потом эту картинку можно передать на сервер, где PHP-код сохранит эту картинку в какую-нибудь папку

14 октября 2011 в 00:15:08

а можно будет потом BitMap сконвертировать в массив и записать в базу MySQL?

14 октября 2011 в 00:01:54

Спасибо!)

13 октября 2011 в 23:52:16

Glega, из отдельных составляющих (каждая от 0 до 255), можно собрать ARGB, например из вот такой функции:

function FromArgbToNumber(a:uint, r:uint, g:uint, b:uint):uint { return (a * 16777216) + (r * 65536) + (g * 256) + (b * 1); //return a * Math.pow(2, 24)) + r * Math.pow(2, 16) + g * Math.pow(2, 8) + b; }


Ну и непосредственно, чтобы добавить альфа-канал (из RGB в ARGB):
function FromRgbToArgb(rgb:uint, a:uint):uint { return (a * 16777216) + rgb; }

13 октября 2011 в 23:48:30

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

bitmapData.setPixel32(10, 10, 0x0FFF0000


0x0FFF0000 - это полупрозрачный красный,
0F - прозрачность/ альфа (A)
FF - красный (R)
00 - зелый (G)
00 - синий (B)

13 октября 2011 в 23:47:25

Или как сделать из цвета получаемого из ColorPicker в формате RGB сделать ARGB?
Fundux.ru v.3.0 © 2006-2021 AleXNoD
Портал русских флеш игр и flash мультов