HDD'de birkaç (~ 2GB) ham 24bpp RGB dosyası var. Şimdi bir kısmını almak ve istenilen boyuta getirmek istiyorum.
(izin verilen tek terazi, 1 olan 1/2, 1/4, 1/8, ..., 1/256)C# Piksel verisini System.Drawing.Bitmap'den verimli bir şekilde alma
Bu yüzden şu anda bir diziye ilgi dikdörtgenin her satırını okuyorum Beni doğru boyda fakat yanlış genişliğe sahip bir bitmap ile bırakır.
Bir sonraki adım olarak yeni oluşturulan diziden bir Bitmap oluşturuyorum.
Bu, bir işaretçi kullanılarak yapılır, böylece ilgili verilerin kopyalanması olmaz.
Sonraki Bitmap'teki GetThumbnailImage öğesini arıyorum, bu da doğru boyutlara sahip yeni bir bitmap oluşturur.
Şimdi yeni oluşturulan bitmap'in (bir bayt dizisi gibi) ham piksel verilerini dönmek istiyorum. Ama bunu başarmak için şu anda LockBits kullanarak verileri yeni bir diziye kopyayorum.
Yani benim soru: kopyalayarak olmadan bir bayt dizisi bir Bitmap'ten piksel verilerini almak için bir yolu var mı? gibi
şey:
var bitmapData = scaledBitmap.LockBits(...)
byte[] rawBitmapData = (byte[])bitmapData.Scan0.ToPointer()
scaledBitmap.UnlockBits(bitmapData)
return rawBitmapData
Ben bu işe yaramazsa farkında değilim, bu temelde ulaşmak istediğimiz sadece bir örnektir.
void *} {güvenli, [] bayt ıntptr ptr = bitmapData.Scan0 denemek için yerine, iş; int bytes = Math.Abs (bitmapData.Stride) * bitmapData.Height; raw = yeni bayt [bayt]; Marshal.Copy (ptr, raw, 0, bayt); işlenmemiş olarak döndürülür; // byte [] – antonio